Linux系统编程10(Socket编程1-概念)

1.套接字 1.1 什么是socket

  • socket是一个编程接口
  • socket是一种特殊的文件描述符
everything in Unix is a file
1.2 协议域domain
No. 参数 含义
1 AF_INET IPv4
2 AF_INET6 IPv6
3 AF_LOCAL Unix域
1.3 类型type
No. 类型 Type 作用 说明
1 流式套接字 SOCK_STREAM 提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。 TCP协议支持该套接字。
2 数据报套接字 SOCK_DGRAM 提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。 UDP协议支持该套接字。
3 原始套接字 SOCK_RAW 允许对低于传输层的协议或物理网络直接访问 常用于检测新的协议
No. 类型 作用
1 流式套接字(SOCK_STREAM) 提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制
2 数据报套接字(SOCK_DGRAM) 提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收
4 原始套接字(SOCK_RAW) 可以对较低层次协议如IP,ICMP直接访问
1.4 协议protocol
No. 参数 含义
1 IPPROTO_TCP TCP
2 IPPROTO_UDP UDP
1.5 五要素
  • 协议
  • 本地地址
  • 本地端口
  • 远程地址
  • 远程端口
2.协议
  • 概念
    接头暗号
2.1 TCP(Transmission Control Protocol)
特点 数据传输方式 类比
面向连接 数据流 大巴车(人满发车,定点发车),打电话(确保信息准确送达)
2.1.1 三次握手/四次挥手
  • 作用
    通信双方必须互相确定对方的存在
  • TCP连接与断开
Linux系统编程10(Socket编程1-概念)
文章图片
TCP连接与断开
  • 三次握手
Linux系统编程10(Socket编程1-概念)
文章图片
三次握手 Linux系统编程10(Socket编程1-概念)
文章图片
三次握手
  • 四次挥手
Linux系统编程10(Socket编程1-概念)
文章图片
四次挥手
  • 报文标识
No. 报文标识 英文 含义
1 SYN synchronous 建立连接
2 ACK acknowledgement 确认
3 FIN finish 结束
4 PSH push 传送
5 RST reset 重置
6 URG urgent紧急
  • 号码
No. 英文 含义
1 Sequence number 顺序号码
2 Acknowledge number 确认号码
  • 应用
下载文件
数据完整性要求高
数据可靠性要求高
传输性能要求低
2.2 UDP(User Datagram Protocol)
特点 数据传输方式 类比
无连接 数据报 出租车(随到随走),发短信(不是关心对方马上收到)
  • 分类
No. 分类 举例
1 单播(unicast) 私聊,爱奇艺视频
2 广播(broadcast) 广告,病毒
3 多播/组播(multicast) 群聊,春晚直播
Linux系统编程10(Socket编程1-概念)
文章图片
  • 区别
Linux系统编程10(Socket编程1-概念)
文章图片
3.路径 3.1 IP(Internet中主机的标识)
3.1.1 分类 32位(IPV4)/128位(IPV6)
3.1.2 表示形式(常用点分形式)
No. 协议 形式 e.g.
1 IPv4 点分十进制 192.168.0.1
2 IPv6 点分十进制 ::192.168.0.1
3 IPv6 点分十六进制 ::C0A8:0001
3.1.3 特例
No. IP地址 地址类型 作用
1 0.0.0.0 通配地址 主机上所有IP,多网卡共用
2 127.0.0.1 回环地址 本地虚拟接口,无网卡可用,检查本地网络协议
3 255.255.255.255 广播地址 受限广播地址,当前路由器均不转发此类广播
4 XXX.XXX.XXX.255 广播地址 子网广播地址
5 XXX.XXX.255.255 广播地址 全子网广播
6 224.0.0.0~239.255.255.255 组播地址 详细参见组播地址分类
  • 组播地址分类
No. 范围 名称 作用
1 224.0.0.0~224.0.0.255 链路组播地址 路由协议和其它用途保留的地址
2 224.0.1.0~238.255.255.255 用户组播地址 用于全球范围(如Internet)或网络协议
3 239.0.0.0~239.255.255.255 本地组播地址 内部使用
3.1.4 域名 DNS(Domain Name System,域名系统),作为域名和IP地址相互映射的一个分布式数据库。
电话号码与人名
IP与域名
3.2 端口(区分一台主机接收到的数据包应该转交给哪个进程来进行处理)
查看端口
netstat –apn

3.3 类比
  • 火车站与站台
  • 飞机场与登机口
  • 公司与办公室
  • 银行与窗口柜台
  • IP与端口
4.字节序
No. 类型 简写 本质 e.g.
1 大端 BE(big endian) 将高序字节存储在起始地址 IBM、网络
2 小端 LE(little endian) 将低序字节存储在起始地址 Intel
【Linux系统编程10(Socket编程1-概念)】查看当前CPU支持的字节序:lscpu

    推荐阅读