伪头部校验

简介: 伪头部校验

本章问题

UDP和TCP的伪首部只用于计算校验和,在UDP和TCP的报文中是不存在的,为什么要引入伪首部呢?为什么伪首部的要有这些字段?这里我们就先看一下TCP和UDP的首部格式。

 

TCP和UDP首部


源端口目的端口:是0-65535任何数字,在收到请求时系统会为客户端动态分配,0-1023为知名端口号

UDP报文长度(单位4byte):表示udp报头 + udp数据总长度 = 8 + len

校验和:计算之前校验和位置填0,发送之前将校验结果填上,目标端收到后会再次进行校验结果为0表示正确

UDP伪头部:包含UDP1+UDP+data三部分共12 + 8 + len 个字节,UDP发送时需要通过伪头部进行16位校验,伪头部只是在校验时用到,数据收发不用伪头部

TCP报头长度(单位4byte):表示TCP报头不包含数据的长度=20+选项长度,UDP无选项

TCP伪头部:包含TCP1+TCP+选项长度+数据长度4部分组成,如果没有选项和数据刚好就是12+20=32个字节,tcp发送时需要对12+20+选项长度+数据长度这些字节进行16位校验,伪头部只是在校验时用到,数据收发不用伪头部,因为这只是IP报头的一部分而已。


我们为什么会使用伪头部校验?

伪首部是为了增加 校验和 的检错能力:通过伪首部的目的IP地址来检查TCP报文是否收错了、通过伪首部的传输层协议号来检查传输层协议是否选对了。


伪首部的目的是为了防止有人截获tcp数据然后加上IP包头伪造数据包,重放攻击。伪首部只是一个虚拟的概念,是为了计算tcp校验和而虚构的,不存在协议层中任何一个位置。

由于socket协议栈在开始已经知道应用层数据要发往哪里,但是还没有到tcp层封装,故虽然知道ip源地址和目的地址,但是没有填入数据包。


为什么伪首部要有目的IP地址?

我们知道数据传输过程中会产生误码,0可能变为1,1可能变为0,并且每种校验码都有一定的查错能力,超过这个范围,就无法察觉错误了。而早期的通信环境大概比较糟糕,因此,在传输过程中出现误码,可能使IP报文的目的地址出现错误,接收主机的UDP计算校验和时,目的IP地址来自IP层,由于目的IP地址出现错误,导致发送主机计算检验和时使用的目的IP地址与接收主机计算检验和时使用的目的IP地址不同,UDP发现错误,丢弃报文。


为什么伪首部要有源IP地址?

为了让接收主机确认源IP地址没有出现错误。假设我们想要开发一款基于UDP的程序,A发送UDP报文给B,B要发送回应报文给A,假设传输过程出现误码,源IP地址出现错误,则A计算检验和时使用的源IP地址与B计算校验和时使用的源IP地址不同,B就可以发现错误,从而丢弃报文,定时重传等可靠性由应用程序自己保证。

相关文章
|
网络协议 网络架构
TCP/IP协议中分包与重组原理介绍、分片偏移量的计算方法、IPv4报文格式
本文章讲述了什么是IP分片、为什么要进行IP分片、以及IP分片的原理及分析。分片的偏移量的计算方法,一个IPv4包前三个分片的示例。还讲述了IPv4表示字段的作用,标志位在IP首部中的格式以及各个标志的意义:.........
4212 0
TCP/IP协议中分包与重组原理介绍、分片偏移量的计算方法、IPv4报文格式
|
11月前
|
存储 运维 安全
|
缓存 网络协议 安全
TCP首部格式【TCP原理(笔记五)】
TCP首部格式【TCP原理(笔记五)】
654 0
TCP首部格式【TCP原理(笔记五)】
|
11月前
|
负载均衡 网络协议 算法
|
10月前
|
存储 持续交付 虚拟化
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC
|
网络协议 网络架构
MTU 和 MSS 关系、 IP分片、TCP分段
这篇文章详细解释了MTU(最大传输单元)和MSS(最大报文段长度)的关系,包括它们在不同网络层的作用、如何影响IP分片和TCP分段,以及实际网络环境中如何通过调整MTU和MSS来解决数据传输问题。
1506 0
|
算法 SDN C++
以太网帧FCS校验:CRC32的三种实现
这篇文章讨论了CRC32校验码的三种实现方法,用于检测网络通信中的数据错误。首先介绍了基础的按位计算方法,虽然直观但效率低。接着,文章提出了使用非翻转查找表和翻转查找表的快速计算方法,后者在性能上更优。文中提供了C++代码示例,展示如何生成和使用这些查找表。最后,指出在实际应用中,应根据性能需求选择合适的方法。