IP首部及检验和算法

用microsoft network monitor抓取一个帧包如下:

                0000:   00 1E BE 73 DF 00 00 15 58 E9 8C AD
                000c:  08 00 45 00 00 40 7B AD 40 00 80 32
                0018:   19 F2 AC 12 06 60 9D 36 15 44 70 16
                0024:   BA F0 00 00 53 35 05 5C 0F A1 0A 2C
                0030:   4E 91 47 75 61 9D 50 10 FF FF 34 1B
                003c:   00 00 01 02 02 06 B8 71 BE 0C 92 A4 
                0048:   55 22 BD ED 97 00

ip数据包重45 00 00 40 开始。对于前面的数据,应该是数据链路层的报头(猜的)。

1. 第一个四位也就是4, 表示所用的ip协议的版本号, 这里也就是ipv4.

2.第二个四位也就是5,表示ip首部占32b的位数。 5就表示这个ip首部的长度将是32/8*5,即20个字节. 通常ip首部都是占20个字节.

3.接下来8位,即00. 表示的是8位tos服务类型. 具体不知道是什么玩意. 据说有前三位一般被忽略, 中间4位就是tos子字段,并且只有一位可以被设置为1. 他们代表着:最小延时,最大吞吐量,最高可靠性和最小费用. 这些有什么,我还不知道. 最后一位好像只能设置为0.

4.再就是接下来的16位了,00 40. 这几位表示ip数据的长度.. 这里是4*16*4=256字节. ip数据段的最大数据量是65535(2^16-1). 但是一般的服务器不允许超过576字节( 这是为什么呢?).

5.再接下来的16位7B AD, 传言它们代表着主机发送的数据包,主机每发送一次它的值就+1. 见识短了,还参不透这个禅.

6.接下来的16位40 00, 里面前三位是标志什么的,后13表示片偏移,也是弄不求懂.

7.接下来的8位:80, 就是广为传颂的TTL(time to live).

8.再接下来的8位:32,表示数据包的协议了. 具体32代表着什么,请参阅RFC了.

9.接下来的16位:19 F2. 就是我自认为很exciting的部分了.IP首部检验和:用于检测ip数据包的数据是否丢失. 具体计算过程如下:

      a) 数据包发送的时候,首先将ip检验和的16位置0, 然后分别对各个16位取反码求和.最后保存到ip首部检验和的16位中.

      b)客户端接收到数据报的时候,也对各个16位取反码求和. 如果结果全部为1,就表示数据报没有信息丢失.

让我们来看看:

      发送端:  19 F2  二进制为:   0001 1001 1111 0010

      接受端:    取反后为:             1110 0110 0000 1101

很明显应该是所有位都为1的, 现在看着不算很神奇,但是当初第一个吃这鸡蛋的人,确是有点厉害.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值