ipv4头部分析,读书笔记3

ipv4头部分析,读书笔记3

ip头部最长是60字节,前面的20字节是固定的,选项可加上40字节

4位版本号--- 对于ipv4来说呢,就是4

4位头部长度 ---  表示 有多小个32bit(4字节),4位最大表示数是15啦,也就是最大就是15啦,所以头部最长就是60啦

8位服务类型 --- 已经不用了

16总长度---ip数据报长度 所以最大长度为 65535啦

16位标识-- 分片的时候用的

3位标志 --- 第一位保留 第二位 禁止分片 第三位 表示更多分片

13位偏移 --- 相对ip数据报的开始处

8位生存时间 ---ttl 当变为0的时候抛弃

8 位协议 ---- 指应用层协议,区分上层协议

16位校验和 ---- 数据的hash值啦

32 位 原端 和目的端ip地址

选项 包括有

1 记录路由

2 时间戳

3 松散路由

4 严谨 路由

下面来分析一下

tcpdump -i eth0:1 -ent '(dst 192.168.5.190 and src 192.168.5.109)or( dst 192.168.5.109 and src 192.168.5.190)' –X

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 74: 192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 72, length 40

0x0000:  4500 003c 7da4 0000 4001 70a1 c0a8 056d  E..<}...@.p....m
0x0010:  c0a8 05be 0800 4d13 0001 0048 6162 6364  ......M....Habcd
0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi

0x4 代表ip版本号

0x5  头部长度为 5个32位(20个字节)

0x00 说明tos没有开启

0x003c  说明 数据报总长度 60字节

0x7da4 数据报标示

0x0 没有设置标志位

0x000 分片偏移

0x40 ttl设置为64

0x01 表示上层协议 为 icmp    1    ICMP        # internet control message protocol (可以查找linux的/etc/protocols )

0x70a1 校验值

0xc0a8 056d 源ip

0xc0a8 05be 目标ip

 

IP分片

什么时候会分片呢,就是数据包大的时候啦

ipv4头部分析,读书笔记3

参照下图就最清楚啦

ipv4头部分析,读书笔记3

下面来做个试验

ping 192.168.5.190 -l 1473

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 20425, offset 0, flags [+], proto ICMP (1), length 1500)

192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 92, length 1480

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 20425, offset 1480, flags [none], proto ICMP (1), length 21)

192.168.5.109 > 192.168.5.190: icmp

从id可以看出

他们两个包都是同一个包的

第一个包偏移为0 ,flag[+] 表示MF标志啦

第二个包偏移为1480 flag[none]表示已经无下一个

从上个我们可以知道,第二个包是没有包含icmp头部,因为规范说第一次发了下次就不发啦

上一篇:通过 Git 上传代码到 GitHub 必要操作详解


下一篇:10分钟教你用eclipse上传代码到GitHub