前言
TCP/IP 本质上是软件协议,而LwIP也是对软件协议进行解析处理,所以我们有必要了解下以太网帧、IP、TCP、UDP、IGMP、ICMP帧格式,这样在代码中,才能有的放矢。
以太网帧框架
以太网帧是最底层的原始数据,帧框架如下图所示:
其中【前同步码】和【以太网尾部】我们在抓包的时候,并不能真正看到,我们可以暂时认为这两部分有以太网芯片实现,对于协议栈,并不会包括这两部分。
以太网帧首部
以太网帧首部包括:【目的MAC】+ 源MAC + 类型
IP帧首部
TCP帧首部
tcp抓包示例
client PC :192.168.114
server PC:192.168.1.9, 端口:8080
发送数据:123456780
req数据
xx xx xx xx xx xx xx xx xx xx xx xx 08 00 45 00 // mac 注释隐藏
00 32 9a d0 40 00 80 06 dc 29 c0 a8 01 72 c0 a8
01 09 f8 e8 1f 90 38 55 0d 2b 26 6b 47 eb 50 18
02 01 53 a1 00 00 31 32 33 34 35 36 37 38 39 30
解析
xx xx xx xx xx xx // 目的mac 注释隐藏
xx xx xx xx xx xx // 源mac 注释隐藏
08 00 // IP 协议
45 00 00 32 9a d0 40 00 80 06 dc 29 c0 a8 01 72 c0 a8 01 09 // IP帧头
f8 e8 1f 90 38 55 0d 2b 26 6b 47 eb 50 18 02 01 53 a1 00 00 // TCP帧头
31 32 33 34 35 36 37 38 39 30 // 应用数据
resp数据
xx xx xx xx xx xx xx xx xx xx xx xx 08 00 45 00 // mac 注释隐藏
00 28 7f af 40 00 80 06 f7 54 c0 a8 01 09 c0 a8
01 72 1f 90 f8 e8 26 6b 47 eb 38 55 0d 35 50 10
10 04 4f ab 00 00
解析
xx xx xx xx xx xx // 目的mac 注释隐藏
xx xx xx xx xx xx // 源mac 注释隐藏
08 00 // IP 数据
45 00 00 28 7f af 40 00 80 06 f7 54 c0 a8 01 09 c0 a8 01 72 // IP帧头
1f 90 f8 e8 26 6b 47 eb 38 55 0d 35 50 10 10 04 4f ab 00 00 // TCP帧头
UDP帧首部
udp抓包示例
client PC :192.168.114
server PC:192.168.1.9, 端口:8080
发送数据:123456780
req数据
xx xx xx xx xx xx xx xx xx xx xx xx 08 00 45 00 // mac 注释隐藏
00 26 9a e6 00 00 80 11 1c 15 c0 a8 01 72 c0 a8
01 09 1f 90 1f 90 00 12 32 d9 31 32 33 34 35 36
37 38 39 30
解析
xx xx xx xx xx xx // 目的mac 注释隐藏
xx xx xx xx xx xx // 源mac 注释隐藏
08 00 // IP 协议
45 00 00 26 9a e6 00 00 80 11 1c 15 c0 a8 01 72 c0 a8 01 09 // IP 帧头
1f 90 1f 90 00 12 32 d9 // udp 帧头
31 32 33 34 35 36 37 38 39 30 // 应用数据
注意:udp只有req,没有resp。
ICMP帧格式
icmp(ping)抓包示例
ping 192.168.1.9
req数据
xx xx xx xx xx xx xx xx xx xx xx xx 08 00 45 00 // mac 隐藏
00 3c 9a cc 00 00 80 01 1c 29 c0 a8 01 72 c0 a8
01 09 08 00 4d 41 00 01 00 1a 61 62 63 64 65 66
67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
77 61 62 63 64 65 66 67 68 69
解析
xx xx xx xx xx xx // 目的mac 注释隐藏
xx xx xx xx xx xx // 源mac 注释隐藏
08 00 // IP 协议
45 00 00 3c 9a cc 00 00 80 01 1c 29 c0 a8 01 72 c0 a8 01 09 // IP帧头
08 00 4d 41 // ICMP帧头
00 01 00 1a 61 62 63 64 65 66
67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
77 61 62 63 64 65 66 67 68 69 // ICMP数据内容
resp数据
xx xx xx xx xx xx xx xx xx xx xx xx 08 00 45 00
00 3c 7f ab 00 00 80 01 37 4a c0 a8 01 09 c0 a8
01 72 00 00 55 41 00 01 00 1a 61 62 63 64 65 66
67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
77 61 62 63 64 65 66 67 68 69
解析文章来源:https://www.toymoban.com/news/detail-630287.html
xx xx xx xx xx xx // 目的mac 注释隐藏
xx xx xx xx xx xx // 源mac 注释隐藏
08 00 // IP 协议
45 00 00 3c 7f ab 00 00 80 01 37 4a c0 a8 01 09 c0 a8 01 72 // IP帧头
00 00 55 41 // ICMP 帧头
00 01 00 1a 61 62 63 64 65 66
67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
77 61 62 63 64 65 66 67 68 69
IGMP
文章来源地址https://www.toymoban.com/news/detail-630287.html
小结
- TCP、UDP、IGMP、ICMP均属于IP协议。
- ARP、RARP与IP协议平级。
- 以太网帧是最底层的协议,是原始数据。
- 以太网帧的前同步帧,结尾CRC是硬件驱动层面的,不属于应用层,我们在具体的代码、抓包中,并不会看到。
到了这里,关于LwIP系列(3):以太网帧、IP、TCP、UDP、IGMP、ICMP帧格式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!