使用原始套接字接收(recvfrom/reav/read等)时,可以接收到完整的数据包,
数据组装/拆解过程
数字代表上层协议的类型
![在这里插入图片描述](https://img-blog.csdnimg.cn/7a268587d074427aa1602b939010f74d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aC66ZuF5Lq6dg==,size_20,color_FFFFFF,t_70,g_se,x_16)
完整数据包为:
传输数据包内容 = 链路层包头 + 网络层包头 + 传输层包头 + 应用层数据
Ethernet(MAC)封包格式 ARP/RARP/IP封包 TCP/UDP/ICMP/IGMP封包
接受到的为MAC完整包, 根据每层的包头里面的类型码,确定上一层为什么协议
完整的数据包接收到数组msg[]后,每个字节为数组的一个位置,通过数组位置的后移,可以对应数据包内的所有数据
系统接收到的首先为MAC包
![在这里插入图片描述](https://img-blog.csdnimg.cn/723efe8be0dc43ceb0e98a257a548f6f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aC66ZuF5Lq6dg==,size_20,color_FFFFFF,t_70,g_se,x_16)
完整的数据包接收到数组msg[]后,每个字节为数组的一个位置,通过数组位置的后移,可以对应数据包内的所有数据
如:
msg[0] msg[1] msg[2] mag[3] msg[4] mag[5] 装的内容为 目的MAC地址
mag[12] msg[13] 为上一层协议的类型号
根据类型号,确定数据内的网络层为哪一类,逐层解析每个协议的内容即可