一、TCP伪首部
- 组成:
- 源IP地址:发送方的IP地址,占4字节。
- 目的IP地址:接收方的IP地址,占4字节。
- 保留:置为0,占1字节。
- 协议:标识上层协议是TCP,值为6,占1字节。
- TCP报文长度:TCP报文段的长度(包括TCP首部和数据),占2字节。
- 作用:
- 在计算TCP校验和时使用。通过把伪首部与TCP报文(包括TCP首部和数据)一起进行校验和计算,可以增强校验的准确性,确保TCP报文在传输过程中没有被篡改,并且能够正确地到达目标地址和上层协议。
二、UDP伪首部
- 组成:
- 源IP地址:同样是发送方的IP地址,4字节。
- 目的IP地址:接收方的IP地址,4字节。
- 保留:也是置为0,1字节。
- 协议:标识上层协议是UDP,值为17,1字节。
- UDP报文长度:UDP数据报的长度(包括UDP首部和数据),2字节。
- 作用:
- 与TCP伪首部类似,主要用于计算UDP校验和。确保UDP数据报在网络中传输的完整性和正确性,防止在传输过程中因各种原因导致的数据错误或被篡改。
三、两者的共同点和意义
- 共同点:
- 都包含源IP地址、目的IP地址、协议类型和报文长度等关键信息。
- 都不实际在网络中传输,只是在计算校验和时临时参与运算。
- 意义:
- 增强了校验的可靠性:通过引入这些网络层的关键信息(IP地址等)到传输层校验和的计算中,可以更全面地验证数据在网络中传输的正确性,因为IP地址的参与可以确保数据到达了正确的目的地,协议类型的确认可以保证上层协议的匹配性。
- 提高数据传输的准确性:有助于检测和防范在传输过程中可能出现的各种错误,如数据位的篡改、传输路径错误等,从而提升了整个网络通信的质量和可靠性。
示例
某UDP报文的2个16bit 为 1110011001100110 1101010101010101 得到的校验和是
- 首先将两个 16 位的数据相加: 1110011001100110 +1101010101010101 = 1 1011101110111011
- 然后对结果进行回卷进位:
- 如果相加结果超过 16 位,将进位值与低 16 位的值再次相加。这里超过了 16 位,只取低 16 位,进位是1。
- 把进位与低 16 位相加:1011101110111011+1 = 1011101110111100
- 最后对结果取反:
- 对1011101110111100取反,得到0100010001000011