网络系统被分为4/5层(TCP/IP参考模型)或7层(OSI参考模型),每一层都有对应的网络协议完成特定类别的功能。它们相互协作将原始信息进行分层打包(发送过程)和解包(接收过程),以流水线的方式完成复杂的网络传输过程。 应用层俗称7层,传输层俗称4层,IP层俗称3层,数据链路层俗称2层。
网络协议
同一通信节点安装的每一层协议依赖并使用下层协议提供的服务,完成特定的功能,再向其上层协议提供服务;相邻上下层协议之间通过接口通信;不同结点的对等层按照对等协议和数据单元实现对等层之间的通信。不同层的数据单元名称也不同,如下图所示:
5层模型的数据封装与解封装
原始数据包经过每一层都会被该层协议进行改造(封装头尾部、解封头尾部),改造后的数据包被下层协议(发送)或上层协议(接收)识别(通过特点标识如MAC、IP、端口)、改造、传输,最终被目的IP的对等应用接收。
如下图所示,举例,A要发送给B原始数据DATA,DATA会经过下面几个步骤
1、到应用层时变成DATA- H5,H5即为应用层添加的内容;
2、到传输层时变成了5-PDU-H4,5-PUD就是DATA- H5,H4则为传输层添加的内容;
3、到网络层时变成了4-PDU-H3,4-PDU就是5-PDU-H4,也等于DATA- H5- H4,H3则为网络层添加的内容;
4、到数据链路层时变成了T2-3-PDU-H2,……,T2和H2为数据链路层添加的内容;
5、到物理层后,T2-3-PDU-H2则变成了010101……这样形式的二进制数据
6、到达B端的物理层后,则将010101……这样子形式的数据转换成数据链路层可识别的T2-3-PDU-H2;
7、B端的数据链路层将T2和H2拆解掉后传递给上层的网络层;
8、如上形式,传递到B电脑时,则只剩下了原始数据DATA。
二层MAC帧格式
二层即数据链路层,在该层中,数据包称为帧,帧的结构如下图所示:
字段 | 长度 | 含义 |
DMAC | (6字节) | 目的MAC地址,IPV4为6字节,该字段确定帧的接收者。 |
SMAC | (6字节) | 源MAC地址,IPV4为6字节,该字段标识发送帧的工作站。 |
Type | (2字节) | 协议类型。一般为0x0800,表示封装的是IP协议。 |
Data | 变长 | 数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。
如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。 |
CRC | (4字节) | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 |
PS:
1.IFG(Interframe Gap),帧间距,以太网相邻两帧之间的时间断;以太网发送方式是一个帧一个帧发送的,帧与帧之间需要间隙。
2.前同步码和帧开始分界符的作用:其作用是使目的主机接收器时钟与源主机发送器时钟同步。紧接着是帧开始分界符字节“10101011”,用于指示帧的开始。
帧示例:
三层IP报文格式
三层即网络层,在该层中数据包称为IP报文,IP报文的结构如下图所示:
字段 | 长度 | 含义 |
Version | (4比特) | 4:表示为IPV4; 6:表示为IPV6。 |
IHL | (4比特) | 首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。以4字节为一个单位。 |
Type of Service | (8比特) | 服务类型。只有在有QoS差分服务要求时这个字段才起作用。 |
Total Length | (16比特) |
总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。 |
Identification | (16比特) | 标识,主机每发一个报文,加1,分片重组时会用到该字段。 |
Flags | (3比特) |
标志位: Bit 0: 保留位,必须为0。 |
Fragment Offset | (12比特) | 片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。 |
Time to Live | (8比特) | 生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。 |
Protocol | (8比特) |
协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 常见值: 0: 保留Reserved |
Header Checksum | (16比特) | 首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。 |
Source Address | (32比特) | 源IP地址。 |
Destination Address | (32比特) | 目的IP地址。 |
Options | 可变 | 选项字段,用来支持排错,测量以及安全等措施。选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。 |
Padding | 可变 | 填充字段,全填0。 |
报文示例:
四层TCP段格式
四层即传输层,在该层中数据包称为段,TCP段的结构如下图所示:
字段 | 长度 | 含义 |
Source Port | (16比特) | 源端口,标识哪个应用程序发送。 |
Destination Port | (16比特) | 目的端口,标识哪个应用程序接收。 |
Sequence Number | (32比特) | 序号字段。TCP链接中传输的数据流中每个字节都编上一个序号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号。 |
Acknowledgment Number | (32比特) |
确认号,是期望收到对方的下一个报文段的数据的第1个字节的序号,即上次已成功接收到的数据字节序号加1。只有ACK标识为1,此字段有效。 |
Data Offset | (4比特) | 数据偏移,即首部长度,指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,以32比特(4字节)为计算单位。最多有60字节的首部,若无选项字段,正常为20字节。 |
Reserved | (6比特) |
保留,必须填0。 |
URG | (1比特) | 紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。 |
ACK | (1比特) | 确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 |
PSH | (1比特) | 标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。 |
RST | (1比特) | 重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。 |
SYN | (1比特) | 同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求。 |
FIN | (1比特) | 发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接。 |
Window | (16比特) | 窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。 |
Checksum | (16比特) | 窗口:TCP的流量控制,窗口起始于确认序号字段指明的值,这个值是接收端正期望接收的字节数。窗口最大为65535字节。 |
Urgent Pointer | (16比特) | 紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。 |
Options | 可变 |
选项字段。TCP协议最初只规定了一种选项,即最长报文段长度(数据字段加上TCP首部),又称为MSS。MSS告诉对方TCP“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。 窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。 |
Padding | 可变 | 填充字段,用来补位,使整个首部长度是4字节的整数倍。 |
data | 可变 | TCP负载。 |
TCP报文示例:
TCP报文(正常报文)
TCP报文(Keepalive)
TCP报文(Keepalive ACK)
TCP报文(Duplicate ACK)
TCP报文(重传)
TCP报文(Out-Of-Order乱序)
TCP报文(Window Update)
四层UDP段格式
四层即传输层,在该层中数据包称为段,UDP段的结构如下图所示:
字段 | 长度 | 含义 |
Source Port | (2字节) | 标识哪个应用程序发送(发送进程)。 |
Destination Port | (2字节) | 标识哪个应用程序接收(接收进程)。 |
Length | (2字节) | UDP首部加上UDP数据的字节数,最小为8。 |
Checksum | (2字节) |
覆盖UDP首部和UDP数据,是可选的。 |
data octets | 变长 | UDP负载,可选的。 |
UDP报文示例:
七层HTTP数据格式
http请求头报文示例:
http响应头报文示例:
七层DNS数据格式
DNS请求报文示例:
DNS响应报文示例:
网络的本质
数据报文是网络运行世界里,具有完整信息的、最小的组成单元,而协议则是数据报文在网络内交互必须遵循的规则。因此掌握了这两者,基本上就可以把握网络运行的本质。
来源:freebuf.com 2021-05-13 01:36:22 by: chenhh
请登录后发表评论
注册