当前位置: 首页 > news >正文

网络套接字基础使用和概念

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、IP
  • 二、port
  • 三、TCP/UDP
  • 四、socket编程接口
    • sockaddr


前言

这篇文章更大的形式是以笔记来写的,因此会简略很多基础概念等等。
从网络设计的视角来看,它是脱胎于操作系统的,每层协议都极大程度的解耦并对应于一个计算机体系层,而网络通信其实可以看做是一个冯诺依曼体系在通信。而其中细节和遇到问题并解决便是我们要学的知识点。
套接字(Socket)是网络编程的核心概念,本质是操作系统提供的一种通信端点抽象,用于在不同主机或同一主机的进程间传输数据。它封装了底层网络协议(如 TCP/IP、UDP、Unix Domain Socket 等)的复杂性,为开发者提供统一的编程接口。


一、IP

IP地址可以理解为一台计算机的身份证

IP(Internet Protocol,网际协议)是互联网通信的核心协议,负责在网络层(OSI 第 3 层)为数据包提供寻址和路由功能。它定义了数据如何在复杂网络中从源设备传输到目标设备。

它包含两个版本IPv4和IPv6,区别在于描述地址的长度不同。IPv4当前面临地址不足问题,IPv6的推广我们国家占了重要的一部分,但受制于技术和政治。

二、port

在网络通信中,IP保证找到哪一个计算机,而仅仅找到目标计算机还不够,因为计算机中那么多软件,还得定位到是哪个进程,端口号(port)便可以理解为进程的一种标识符,但是直接用进程id不更好吗,又何必多此一举呢?这其中便涉及到解耦合的设计了,如果网络通信强关联进程id的话,如果后面更改协议或者对操作系统做变更,便会牵一发而动全身。

  • 端口号(port)基础概念:
  1. 端口号是传输层协议的内容。
  2. 端口号是一个2字节16位的整数。
  3. 端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理。
  4. 一个端口号只能被一个进程占用。

三、TCP/UDP

网络协议栈是贯穿整个体系结构的,在应用层、操作系统层和驱动层各有一部分。当我们使用系统调用接口实现网络数据通信时,不得不面对的协议层就是传输层,而传输层最典型的两种协议就是TCP协议和UDP协议。

TCP协议

TCP协议叫做传输控制协议(Transmission Control Protocol),TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP协议是面向连接的,如果两台主机之间想要进行数据传输,那么必须要先建立连接,当连接建立成功后才能进行数据传输。其次,TCP协议是保证可靠的协议,数据在传输过程中如果出现了丢包、乱序等情况,TCP协议都有对应的解决方法。

UDP协议

UDP协议叫做用户数据报协议(User Datagram Protocol),UDP协议是一种无需建立连接的、不可靠的、面向数据报的传输层通信协议。

使用UDP协议进行通信时无需建立连接,如果两台主机之间想要进行数据传输,那么直接将数据发送给对端主机就行了,但这也就意味着UDP协议是不可靠的,数据在传输过程中如果出现了丢包、乱序等情况,UDP协议本身是不知道的。


所谓的可靠和不可靠是一种性质而不是一种好坏。

四、socket编程接口

socket=ip+port.。
创建一个socket就相当于开辟一个文件,只不过这个文件作用于网络通信,通过给定的接口达到网络通信的目的。

socket常见API
创建套接字:(TCP/UDP,客户端+服务器)

int socket(int domain, int type, int protocol);

绑定端口号:(TCP/UDP,服务器)

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

监听套接字:(TCP,服务器)

int listen(int sockfd, int backlog);

接收请求:(TCP,服务器)

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

建立连接:(TCP,客户端)

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);


sockaddr

套接字不仅支持跨网络的进程间通信,还支持本地的进程间通信(域间套接字),其中得益于sockaddr数据结构的设计,类似于继承,我们传参时通过协议家族(AF)传入socketaddr_in或者socketaddr_un来决定是那种通信。然后通过强转即可达到目的。
在这里插入图片描述

此后我们便可以通过这个结构体的数据来达到不同计算机之间寻找双方的目的了。

相关文章:

  • 【Mini-F5265-OB开发板试用测评】按键控制测试
  • AWS创建github相关的角色
  • go tour方法和接口
  • Mobaxterm解锁Docker
  • OpenCV CUDA模块图像处理------颜色空间处理之颜色空间转换函数cvtColor()
  • 高效多线程图像处理实战
  • 知识图谱:AI时代语义认知的底层重构逻辑
  • ASP.NET Web Forms框架识别
  • WPF【11_4】WPF实战-重构与美化(MVVM 架构)
  • ArcGIS Pro 3.4 二次开发 - 知识图谱
  • 飞牛fnNAS手机相册备份及AI搜图
  • 私服 nexus 之间迁移 npm 仓库
  • 融智学“新五常”框架:五维方式的重构与协同
  • 银河麒麟V10×R²AIN SUITE:用AI重构安全,以国产化生态定义智能未来
  • libvirt设置虚拟机mtu实现原理
  • 强大的免费工具,集合了30+功能
  • Ansible 配置Playbook文件格式、关键字和语法详解
  • WPF【11_8】WPF实战-重构与美化(UI 与视图模型的联动,实现INotifyPropertyChanged)
  • Leetcode-5 好数对的数目
  • AI Agents执行流程和决策流程学习
  • 古典 网站模板/广告网站策划方案
  • 国外网站首页设计/seo网站推广软件 快排
  • 网站个性化设计/seo专员工作容易学吗
  • 招聘做网站专业人员/网络营销是学什么的
  • 怎么给人介绍自己做的网站/百度提问首页
  • 不用下载的行情网站/百度推广网站一年多少钱