UNIX网络编程1:传输层协议TCP、UDP、SCTP

1.  OSI模型

描述网络中各个协议层通常用国际标准组织ISO的计算机通信开放系统互连(open system  interconnection,OSI)模型。它与网际网协议族中的各层对应如下:

TCP和UDP之间有个间隙的原因:网络应用可以绕过传输层直接使用IPv4或者IPv6是可能的,这就是原始套接字,但很少使用。

UNIX网络编程1:传输层协议TCP、UDP、SCTP

2. TCP/IP协议概况

UNIX网络编程1:传输层协议TCP、UDP、SCTP

  • IPv4
  • Ipv6
  • TCP:传输控制协议,面向连接,为用户提供可靠的全双工字节流。TCP套接字是一种流套接字。关心确认、超时和重传之类的细节。
  • UDP:用户数据包协议,是无连接协议,UDP套接字是一种数据包套接字。可以是全双工的。
  • SCTP:流控制传输协议,提供可靠全双工关联的面向连接的协议。SCTP是多宿的,每个关联的两端均涉及一组IP地址和端口号。SCTP提供消息服务。
  • ICMP:网际控制消息协议,处理在路由器和主机之间流通的错误和控制消息。
  • IGMP:网际组管理协议,用于多播,它在IPv4中是可选的。
  • ARP:地址解析协议,用于把一个IPv4协议映射成一个硬件地址(如以太网地址)
  • RARP:反向地址解析协议,用于把一个硬件地址解析成一个IPv4地址
  • ICMPv6:网际控制消息协议版本6,综合了ICMPv4、IGMP、ARP的功能
  • BFP:BSD分组过滤器,提供对数据链路层的访问能力
  • DLPI:数据链路提供者接口,提供对数据链路层的访问能力

3. TCP建立连接和终止

3.1 三路握手

UNIX网络编程1:传输层协议TCP、UDP、SCTP

3.2 TCP选项

  • MSS选项:最大分节大小,TCP_MAXSEG
  • 窗口规模选项:TCP连接任何一段能够通告对端的最大窗口大小是65535(因为TCP首部中相应的字段占16位),但是为了高速网络连接和长延迟路径的尽可能大的吞吐量的需求,需要能够扩大通告窗口的大小。窗口规模选项指定TCP首部中的通告窗口必须扩大(即左移)的位数(0~14),因此所提供的最大窗口接近1GB(65535*2^14)。SO_RCVBUF
  • 时间戳选项:为防止失而复现的分组可能造成的数据破坏,网络编程人员无需考虑这个选项(^ - ^)

3.3 TCP连接终止

在步骤2到步骤3之间,从被动关闭一端到主动关闭一端流动数据是可能的,这称为半关闭。

UNIX网络编程1:传输层协议TCP、UDP、SCTP

3.4 TCP状态转换图

UNIX网络编程1:传输层协议TCP、UDP、SCTP

4.  TIME_WAIT状态

  • 最长分节生命期MSL:任何IP数据包能够在因特网中存活的最长时间,源自Berkeley的实现采用30s,RFC 1122建议2分钟
  • TIME_WAIT状态:主动关闭一端发送ACK后所处的状态,持续2MSL(即1分钟到4分钟之间)
  • TIME_WAIT状态存在的理由:可靠的实现TCP全双工连接的终止(如果发送的ACK丢失,被动关闭端重传FIN,主动关闭端需要重传ACK);允许老的重复分节在网络中消逝

5. 端口号

用端口号来区分进程,端口号是十六位的整数。下图是端口号的分配图:
LANA(the Internet Assigned Numbers  Authority,因特网已分配数值权威机构)维护着一个端口号分配状况清单。
套接字对:一个TCP连接的四元组,为本地IP地址,本地端口号,外地IP地址,外地端口号。
标记每个端点的两个值(IP地址和端口号)通常称为一个套接字。
UNIX网络编程1:传输层协议TCP、UDP、SCTP

6. 缓冲区大小及限制

  • IPv4数据总长度最大为65535字节,IPv4首部为20字节的固定部分和40字节的可选项。IPv4要求最小链路MTU为68字节。IPv4的主机和路由器可对其产生以及转发的数据包分片,若首部DF位被设置则不可分片
  • IPv6数据报净荷长度最大为65535字节,首部长度为40字节,所以总长度最大为65575字节。有特大净荷选项,可以把净荷大小字段扩展到32位,但是需要MTU支持。IPv6要求最小链路MTU为1280字节(可以运行在MTU小于1280字节的链路上,利用分片和重组)。IPv6主机和路由器只可对其产生的数据包分片。
  • MTU(maximum tramission unit,最大传输单元)是数据链路对传输的数据报大小限制,以太网MTU为1500字节。
  • 最小重组缓冲区大小,它是IPv4和IPv6都必须支持的最小数据报大小,对于IPv4是576字节, 对于IPv6是1500字节
  • MSS(maximum segment size,最大分节大小),TCP用MSS向对端通告对端在每个分节中能发送的最大TCP数据量,MSS经常设置为MTU减去IP和TCP首部的固定长度,在以太网中使用IPv4的MSS为1460,使用IPv6的MSS为1440(两者TCP首部为20字节,但IPv4首部是20字节,IPv6首部是40字节)

7. 常见因特网应用的协议使用

UNIX网络编程1:传输层协议TCP、UDP、SCTP