TCP报文段的首部格式( 二 )


9.16位窗口大小:流量管控,窗口值是[0~216-1]之间的整数 。窗口值告诉了对方,从本报文段的确认号算起,允许对方发送的数据量 。
10.16位校验和:CRC循环冗余检测算法
11.16位紧急指针:TCP的紧急指针是发送端向接收端发送紧急数据的方法 。紧急指针是一个正的偏移量 。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号 。这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移 。
12.选项部分:长度可变,最小0字节,最长达40字节 。当没有使用选项部分时,TCP的首部为20字节 。
MTU限制:以太网为例1500字节,IP头部20个字节,TCP头部和数据加起来共1480个字节,又因为TCP头部20个字节,所以它所能携带的上层数据为1460个字节 。
UDP:用户数据报协议
UDP在传送数据之前不需要先建立连接,它把应用程序传给IP层的数据发送出去,但是并不保证它们能够到达目的地 。即使远地主机的运输层在收到UDP报文后,也不需要给出任何确认 。虽然UDP不提供可靠的交付,但在某些情况下UDP却是一种最有效的工作方式 。
UDP的主要特点:
(1)UDP是无连接的 。发送数据之前不需要建立连接,所以减少了开销和发送数据之前的时延 。
(2)UDP使用尽最大努力交付 。即不保证可靠交付,所以主机不需要维持复杂的连接状态表 。
(3)UDP是面向报文的 。发送方的UDP对应程序交下来的报文,在添加首部后就下交付给IP层 。它完全保留这些报文的边界,即一次交付一个完整的报文 。所以应用程序必须选择合适大小的报文,若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率 。反之,若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太长,这也降低了IP层的效率 。
并且,
(1)UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低 。这对某些实时应用是很重要的 。很多应用(IP电话、实时视频会议等)要求源主机以恒定的速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但却不允许数据有太大的时延 。UDP正好适合这种要求 。
(2)UDP支持一对一,一对多、多对一和多对多的交互通信 。
(3)UDP 的首部开销小,只有8个字节,比TCP20个字节的首部短 。
UDP的首部格式
用户数据报UDP有两个字段:数据字段和首部字段 。首部字段很简单,只有8个字节,由四个字段组成,每个字段的长度都是两个字节 。如下图:
各字段意义如下:
(1)源端口源端口号 。在需要对方回信时选用 。不需要时可用全0 。
(2)目的端口目的端口号 。这在终点时交付报文时必须要使用到 。
(3)长度UDP用户数据报的长度,其最小值是8(仅有首部) 。
(4)校验和检测UDP用户数据报在传输中是否有错 。有错就丢弃 。
【TCP报文段的首部格式】在计算检验和时,要在UDP用户数据报之前增加12个字节的伪首部 。顾名思义,它并不是真正的首部,只是校验时临时添加的,校验和就是这临时的UDP数据报计算的 。伪首部既不上交也不向下传递 。