下面是用wireshark捕获的一段报文:
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P |
1 | 01 | 00 | 5e | 40 | 98 | 8f | dc | 0e | a1 | 21 | 1d | 8c | 08 | 00 | 45 | 00 |
2 | 00 | a4 | 56 | 23 | 00 | 00 | ff | 11 | 06 | 97 | 0a | 6c | cb | d2 | ef | c0 |
3 | 98 | 8f | 1a | 73 | 1a | 73 | 00 | 90 | d7 | 8c | 42 | 54 | 2d | 53 | 45 | 41 |
4 | 52 | 43 | 48 | 20 | 2a | 20 | 48 | 54 | 54 | 50 | 2f | 31 | 2e | 31 | 0d | 0a |
5 | 48 | 6f | 73 | 74 | 3a | 20 | 32 | 33 | 39 | 2e | 31 | 39 | 32 | 2e | 31 | 35 |
6 | 32 | 2e | 31 | 34 | 33 | 3a | 36 | 37 | 37 | 31 | 0d | 0a | 50 | 6f | 72 | 74 |
7 | 3a | 20 | 36 | 38 | 38 | 31 | 0d | 0a | 49 | 6e | 66 | 6f | 68 | 61 | 73 | 68 |
8 | 3a | 20 | 34 | 35 | 30 | 61 | 64 | 65 | 62 | 63 | 38 | 39 | 35 | 62 | 34 | 61 |
9 | 65 | 37 | 66 | 65 | 35 | 64 | 38 | 34 | 66 | 34 | 64 | 31 | 31 | 37 | 65 | 31 |
10 | 66 | 34 | 62 | 37 | 36 | 64 | 30 | 36 | 31 | 30 | 0d | 0a | 63 | 6f | 6f | 6b |
11 | 69 | 65 | 3a | 20 | 63 | 38 | 61 | 39 | 36 | 39 | 61 | 35 | 0d | 0a | 0d | 0a |
12 | 0d | 0a |
|
45 |
1O:IP版本号和首部长度,即:01000101,其中0x4表示版本号是IPv4,0x5表示首部长度是5x4B=20B
00 |
1P:区分服务,只在使用区分服务的时候才使用,这里没有使用
00 | a4 |
2A~2B:总长度,这里表示为164字节,正好是从1O到12B的字节总数
56 | 23 |
2C~2D:标识,这个数是发送方产生的计数器的数
00 | 00 |
2E~2F:标志和片偏移,即0x0000 00000000 0000,其中第一个bit0表示后面没有分片的ip报了,第二个bit0表示这个数据包允许底层协议栈进行分片,第三个bit0暂时没有意义,后面十三个bit0是片偏移字段,这里表示偏移量为0,说明这个IP数据包如果是分片的话就是第一个,又由于前面说明后面没有分片了,所以这是一个没有分片的IP报。
ff |
2G:生存时间TTL,这里表示255,即这个报文当前的状态还可以经过255个路由器的跳跃,因为这个是抓的同一层的宿舍楼的IP报还没有经过路由器转发
11 |
2H:协议,这里是0x11,自己猜测这是在表示数据时UDP报文,因为这个数据报在wireshark上面显示的是UDP报文
06 | 97 |
2I~2J:首部检验和,使用方法,将首部的字段(现在是标准的20B)按16bit位一组求反码运算和,然后再去反码,看结果为0则检查通过,否则不同过,丢弃这个数据包,这里不再进行演算。
0a | 6c | cb | d2 |
2K~2N:源地址,即IP:10.108.203.210
ef | c0 | 98 | 8f |
2O~3B:目的地址,即IP:239.192.152.143
向后都是IP报的数据部分了,其中是UDP的数据,这里不再向下深究,注意这里MAC镇后面没有4个字节的FCS(帧检查序列)