行业新闻

学网络从分层开始

学网络从分层开始

网络系统被分为4/5层(TCP/IP参考模型)或7层(OSI参考模型),每一层都有对应的网络协议完成特定类别的功能。它们相互协作将原始信息进行分层打包(发送过程)和解包(接收过程),以流水线的方式完成复杂的网络传输过程。 应用层俗称7层,传输层俗称4层,IP层俗称3层,数据链路层俗称2层。

1620804701_609b845d0f9b63e2b1241.png?1620804702851

网络协议

同一通信节点安装的每一层协议依赖并使用下层协议提供的服务,完成特定的功能,再向其上层协议提供服务;相邻上下层协议之间通过接口通信;不同结点的对等层按照对等协议和数据单元实现对等层之间的通信。不同层的数据单元名称也不同,如下图所示:

1620810047_609b993fb64eb5a845a51.png?1620810048470

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。

1620804762_609b849adc871c78c3df7.png?1620804764336

二层MAC帧格式

二层即数据链路层,在该层中,数据包称为帧,帧的结构如下图所示:

1620831413_609becb5cf628f5fb76d2.png?1620831414042


字段长度含义
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”,用于指示帧的开始。

帧示例:

1620832638_609bf17e7c7196407928d.png?1620832638686

三层IP报文格式

三层即网络层,在该层中数据包称为IP报文,IP报文的结构如下图所示:

1620831631_609bed8fce954ca290b87.png?1620831632466

字段长度含义
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比特)

标志位:
IP Flag字段格式

1620832176_609befb08defe00ea3b26.png?1620832177717

Bit 0: 保留位,必须为0。
Bit 1: DF(Don't Fragment),能否分片位,0表示可以分片,1表示不能分片。
Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。

Fragment Offset(12比特)片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。
Time to Live(8比特)生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。
Protocol(8比特)

协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。

常见值:

0: 保留Reserved
1: ICMP, Internet Control Message [RFC792]
2: IGMP, Internet Group Management [RFC1112]
6: TCP Transmission Control Protocol [RFC793]
17: UDP User Datagram Protocol [RFC768]
47: GRE (General Routing Encapsulation)
50: ESP Encap Security Payload [RFC2406]
51: AH (Authentication Header) [RFC2402]
89: OSPF (OSPF Version 2) [RFC 1583]
112: VRRP (Virtual Router Redundancy Protocol) [RFC3768]
115: L2TP (Layer Two Tunneling Protocol)

Header Checksum(16比特)首部检验和,只检验数据包的首部,不检验数据部分。这里不采用CRC检验码,而采用简单的计算方法。
Source Address(32比特)源IP地址。
Destination Address(32比特)目的IP地址。
Options可变选项字段,用来支持排错,测量以及安全等措施。选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。
Padding可变填充字段,全填0。

报文示例:

1620832702_609bf1be32abb224dc542.png?1620832702988

四层TCP段格式

四层即传输层,在该层中数据包称为段,TCP段的结构如下图所示:

1620832739_609bf1e3de843ae765aae.png?1620832740014

字段长度含义
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个字节”。
新的RFC规定有以下几种选型:选项表结束,无操作,最大报文段长度,窗口扩大因子,时间戳。

窗口扩大因子:3字节,其中一个字节表示偏移值S。新的窗口值等于TCP首部中的窗口位数增大到(16+S),相当于把窗口值向左移动S位后获得实际的窗口大小。
时间戳:10字节,其中最主要的字段是时间戳值(4字节)和时间戳回送应答字段(4字节)。
选项确认选项:

Padding可变填充字段,用来补位,使整个首部长度是4字节的整数倍。
data可变TCP负载。

TCP报文示例:

TCP报文(正常报文)

1620833797_609bf605f26b21051a529.png?1620833798746

TCP报文(Keepalive)

1620833830_609bf6266d12a46ee8cd8.png?1620833830953

TCP报文(Keepalive ACK)

1620833851_609bf63bea737a91cc204.png?1620833854339

TCP报文(Duplicate ACK)

1620833881_609bf6596322fead48278.png?1620833882902

TCP报文(重传)

1620833909_609bf6758d6d4ac492cbd.png?1620833912406

TCP报文(Out-Of-Order乱序)

1620833951_609bf69fb6a0d987b8e57.png?1620833952739

TCP报文(Window Update)

1620833979_609bf6bb9506c8040ae67.png?1620833980181

四层UDP段格式

四层即传输层,在该层中数据包称为段,UDP段的结构如下图所示:

1620833466_609bf4ba9b32d525b0a08.png?1620833466964

字段长度含义
Source Port(2字节)标识哪个应用程序发送(发送进程)。
Destination Port(2字节)标识哪个应用程序接收(接收进程)。
Length(2字节)UDP首部加上UDP数据的字节数,最小为8。
Checksum(2字节)

覆盖UDP首部和UDP数据,是可选的。

data octets变长UDP负载,可选的。

UDP报文示例:

1620834068_609bf714a43ee54817f88.png?1620834068831

七层HTTP数据格式

1620811006_609b9cfee94501ddacaad.png?1620811007398

http请求头报文示例:

1620834868_609bfa3471ae6cb9c99f1.png?1620834868834

http响应头报文示例:

1620834914_609bfa628510aaa853cf8.png?1620834914771

七层DNS数据格式

1620811045_609b9d25bce14497250d6.png?1620811047308

DNS请求报文示例:

1620835203_609bfb830091dfd24e641.png?1620835204791

DNS响应报文示例:

1620835237_609bfba5d02bba0ff4596.png?1620835240424

网络的本质

数据报文是网络运行世界里,具有完整信息的、最小的组成单元,而协议则是数据报文在网络内交互必须遵循的规则。因此掌握了这两者,基本上就可以把握网络运行的本质。

1620810808_609b9c389396bbdac0db3.png?1620810809418

关闭