TCP/UDP 报文格式 TCP 协议为终端设备提供了面向连接的、可靠的网络服务,UDP 协议为终端设备提供了无连接的、不可靠的数据报服务
从上图我们可以看出,TCP 协议为了保证数据传输的可靠性,相对于 UDP 报文,TCP 报文头部有更多的字段选项
首先让我们来看一下 TCP 的报文头部主要字段: 每个 TCP 报文头部都包含源端口号(source port)和目的端口号(destination port),用于标识和区分源端设备和目的端设备的应用进程
在 TCP/IP 协议栈中,源端口号和目的端口号分别与源 IP 地址和目的IP 地址组成套接字(socket),唯一的确定一条 TCP 连接
序列号(Sequence number)字段用来标识 TCP 源端设备向目的端设备发送的字节流,它表示在这个报文段中的第一个数据字节
如果将字节流看作在两个应用程序间的单向流动,则 TCP 用序列号对每个字节进行计数
序列号是一个 32bits 的数
既然每个传输的字节都被计数,确认序号(Acknowledgement number,32bits)包含发送确认的一端所期望接收到的下一个序号
因此,确认序号应该是上次已成功收到的数据字节序列号加 1
TCP 的流量控制由连接的每一端通过声明的窗口大小(windows size)来提供
窗口大小用数据包来表示,例如 Windows size=3, 表示一次可以发送三个数据包
窗口大小起始于确认字段指明的值,是一个 16bits 字段
窗口大小可以调节
校验和(checksum)字段用于校验 TCP 报头部分和数据部分的正确性
最常见的可选字段是 MSS(Maximum Segment Size,最大报文大小)
MSS 指明本端所能够接收的最大长度的报文段
当一个TCP 连接建立时,连接的双方都要通告各自的MSS 协商可以传输