ip协议首部校验及tcp校验计算

IP报文首部校验和计算:
IP首部
上图为IP首部结构,
16位首部校验和计算方法如下:
将图中按照16位进行分组,然后校验和位清零,将数据按16位一组进行累加,最后得出一个结果,如果此结果高16位为0,则将结果按位取反后填入16位首部校验和位置;如果高16位不为0,则将高16位与低16位相加,再看得出结果高16位是否为0,如果不为零则继续相加,直到高16位为0,然后将结果按位取反后填入16位首部校验和位置。
在这里插入图片描述
上图为一个tcp报文的抓包,提取其中ip报文,从第一行45 00到第三行a8 1c为ip报文,按照上述进行累加:4500H+0034H+d7f7H+4000H+4006H+0000H+c0a8H+a81dH+c0a8H+a81cH=46EBAH,此时高16位不为0,则6EBAH+0004H=6EBEH,取反后为9141H,与抓包16位首部校验和一致。

TCP、UDP报文校验和计算:
TCP和UDP报文计算方法与IP首部校验和计算方法类似,不过校验内容是伪首部+tcp/udp首部+数据,其中伪首部是从ip报文中提取的部分数据,伪首部是为了计算检验和而设置的,其结构如下:
在这里插入图片描述
其中除了16位TCP/UDP长度其余数据均直接取自IP报文首部,16位TCP/UDP长度计算方法:IP首部16位总长度-4位首部长度*4,TCP首部结构如下:
在这里插入图片描述
16位校验和计算方法:从伪首部结构开始计算累加到数据末尾,然后对高16位进行判断,不为零则按照IP16位首部校验和方法进行计算,直到高16位为0,然后对数据取反,将数据填入16位校验和。
同样使用IP首部校验和中的抓包数据:c0a8H+a81dH+c0a8H+a81cH+0006H+(0034H-20=20H)+b9f6H+ee4aH+0762H+19f8H+79b2H+19afH+8010H+0559H+0000H+0000H+0101H+080aH+fffeH+d08bH+ffffH+f2b6H=9805CH,805CH+9H=8065,取反后为7F9AH与抓包数据一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默语先行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值