网络编程——数据报的组装和拆解

数据包的组装和拆解

一、数据包在各个层之间的传输

网络编程——数据报的组装和拆解_第1张图片

二、各个层的封包格式

1、链路层封包格式

网络编程——数据报的组装和拆解_第2张图片

+------------------+------------------+----------------------+--------------------+---------------------+-----------------------------------+
| 目标MAC地址(6字节) | 源MAC地址(6字节) | 类型/长度字段(2字节) | 数据(46-1500字节) | 帧校验序列(4字节) | 没有数据填充(0-46字节) |
+------------------+------------------+----------------------+--------------------+---------------------+-----------------------------------+

目的地址:目标MAC地址(6字节),这是数据帧要发送到的目标设备的MAC地址。它唯一标识了数据帧的目的地。

源地址:源MAC地址(6字节), 这是数据帧的发送者的MAC地址。它唯一标识了数据帧的来源。

类型:类型/长度字段(2字节),确定以太网头后面跟的是哪个协议
0x0800 ip协议
0x0806 arp协议
0x0835 rarp协议

数据(46-1500字节): 这是实际要传递的数据,它的长度可以在46字节到1500字节之间。如果数据不足46字节,会被填充至46字节,确保帧的最小长度。

帧校验序列(4字节): 这是用于检测数据传输中可能发生的错误的冗余校验码。校验码可以检测数据在传输过程中是否发生了损坏。

没有数据填充(0-46字节): 如果数据字段的长度不足46字节,可能需要添加填充来保持帧的最小长度。

注意
1、IEEE802.2/802.3封装常用在无线
2、以太网封装常用在有线局域网

2、网络层封包格式(IPV4)

网络编程——数据报的组装和拆解_第3张图片

版本/头部长度: 这个字段包含IP协议版本号和IP头部的长度。版本通常是IPv4(4位),头部长度指示IP头部的字节数,通常为20字节,但可能会因选项字段的存在而变化。

服务类型: 这个字段用于指示数据包的服务质量和优先级。

总长度(2字节): 这个字段表示整个IP数据报的长度,包括头部和数据。

标识: 这个字段用于标识数据报的顺序和重组。

标志/片偏移: 这个字段包含分片数据报的标志位和数据片的偏移。

生存时间: 这个字段用于防止数据包在网络中永远循环,通过逐跳减少来实现。

协议: 这个字段表示传输层协议,例如TCP(6)、UDP(17)等。

校验和(2字节): 这个字段用于检测头部字段的错误。

源IP地址和目标IP地址(各4字节): 这些字段表示源和目标设备的IP地址。

可选项和填充(可选): 这个字段包含可选的IP选项,以及填充字段,以确保IP头部长度为32位的倍数。

数据: 这个字段是实际要传递的数据。

3、传输层封包格式(TCP和UDP)

①TCP封包格式:
网络编程——数据报的组装和拆解_第4张图片

源端口和目标端口(各2字节): 这些字段指示数据的源端口和目标端口。

序列号和确认号(各4字节): 这些字段用于TCP的流控制和确认机制。

首部长度/保留位: 首部长度字段指示TCP首部的长度,保留位用于未来的扩展。

控制标志(2字节): 这个字段包含TCP控制标志,如ACK、SYN、FIN等,用于管理连接状态和数据传输。

窗口大小(2字节): 这个字段表示接收方能够接受的数据量。

校验和(2字节): 这个字段用于校验TCP头部和数据的完整性。

紧急指针(2字节): 这个字段用于指示紧急数据的位置。

选项(可选): 这个字段包含可选的TCP选项,如窗口扩大因子、时间戳等。

数据: 这个字段是实际要传递的数据。

+----------------+----------------+----------------+----------------+
| 源端口(2字节)  | 目标端口(2字节) | 序列号(4字节)  | 确认号(4字节)  |
+----------------+----------------+----------------+----------------+
| 首部长度/保留位  | 控制标志(2字节) | 窗口大小(2字节)  | 校验和(2字节)  |
+----------------+----------------+----------------+----------------+
| 紧急指针(2字节) | 选项(可选)         | 数据(可变长度)   |
+----------------+----------------+----------------+----------------+

②UDP封包格式

网络编程——数据报的组装和拆解_第5张图片

+----------------+----------------+----------------+----------------+
| 源端口(2字节)  | 目标端口(2字节) | 长度(2字节)    | 校验和(2字节)  |
+----------------+----------------+----------------+----------------+
| 数据(可变长度)   |
+----------------+

源端口和目标端口(各2字节): 这些字段指示数据的源端口和目标端口。

长度(2字节): 这个字段表示UDP数据报的长度,包括头部和数据。

校验和(2字节): 这个字段用于校验UDP头部和数据的完整性。

数据: 这个字段是实际要传递的数据。

你可能感兴趣的:(网络编程,网络,服务器,运维,网络协议,tcp/ip,linux)