2.2 网络的层次
2.2.1 常见的三种网络层次划分
应用层
(1)OSI 七层模型
物理层:处于最底层,主要负责处理物理介质上的信号传输,如电缆、光纤、无线等。其作用是定义物理设备的接口标准、信号的编码方式、传输速率等,确保数据能在物理介质上进行传输。
数据链路层:负责将物理层接收到的信号转换为数据帧,实现二进制和电信号的转换,并进行差错检测和纠正。它通过 MAC 地址实现本地网络中的数据传输,将数据帧从一个节点传输到另一个直接相连的节点,还能进行流量控制,确保数据传输的可靠性。
(MAC:介质访问控制层 LLC:逻辑链路控制层)
网络层:主要功能是为数据在不同网络之间传输选择路径。它通过 IP 地址来标识网络中的设备,将数据封装成数据包,根据路由表决定数据包的转发路径,实现网络之间的通信。(根据IP实现逻辑寻址)
传输层:负责在不同主机上的应用程序之间提供可靠或不可靠的端到端通信。(应用到应用)常见的协议有TCP 和 UDP,TCP 提供可靠的面向连接的传输服务,UDP 提供不可靠的无连接传输服务,传输层确保数据的正确传输和流量控制。
(端口号:传输层的地址,用来区分和标定不同的应用,由16位二进制构成,1–65535,其中1到1023是知名端口号)
5 会话层:用于建立、管理和终止网络应用和网络服务器之间的会话。它负责在不同主机的应用程序之间建立逻辑连接,协调数据的传输,如确定会话的开始和结束,处理会话的同步和恢复等。
6 表示层:主要处理数据的表示和转换,包括数据的加密解密、压缩解压缩、格式转换等,确保不同系统之间能够正确地理解和处理数据。
7 应用层:为用户提供直接的网络服务接口,将抽象语言转换成编码,如 HTTP、FTP、SMTP 等协议都工作在这一层。它负责处理应用程序的具体业务逻辑,与用户进行交互,实现各种网络应用功能。
(2)TCP/IP 四层模型
网络接口层(数据链路层-帧 物理层:比特流):对应 OSI 模型的物理层和数据链路层,负责将数据转换为可在物理介质上传输的信号,并处理物理介质上的信号接收和发送,实现与物理网络的连接。
网络层(包):与 OSI 模型的网络层功能类似,主要负责处理 IP 地址和路由选择,将数据包从源主机传输到目标主机,实现不同网络之间的通信。
传输层(段):与 OSI 模型的传输层功能相同,提供端到端的通信服务,确保数据在不同主机的应用程序之间的正确传输,通过 TCP 和 UDP 协议实现可靠或不可靠的传输。
应用层(报文):包含了各种网络应用协议,如 HTTP、FTP、DNS 等,为用户提供各种网络应用服务,直接与用户和应用程序进行交互,实现网络应用的具体功能。
(3)TCP/IP协议五层模型
应用层:为用户提供网络应用服务,直接与用户和应用程序交互。存在封装,封装取决于应用层协议。
传输层:在不同主机的应用程序间实现可靠(TCP)或不可靠(UDP)的数据传输。
网络层:利用IP 地址进行寻址和路由选择,实现不同网络间数据包传输。
数据链路层:将数据包封装成帧,通过 MAC地址实现相邻节点间数据传输与差错控制。(以太网协议)
物理层:负责在物理介质上进行信号的传输与接收,定义物理设备特性。
补充(1)以太网Ⅱ型帧
以太网二型帧是以太网中常用的一种数据帧格式,由目的 MAC 地址、源 MAC 地址、类型字段、数据和帧校验序列(FCS)等字段组成。目的和源 MAC 地址用于标识收发设备,类型字段(type)指的是上一层所使用的协议类型,也就是网络层,数据字段承载实际数据,FCS 用于差错检测。
FCS:就是帧校验序列,它基于循环冗余校验算法(CRC)生成,用于检测数据在传输过程中是否发生错误,保障数据传输准确性。
补充(2)TCP和UDP的定义
TCP
TCP 即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。在数据传输前需通过三次握手建立连接,传输中采用滑动窗口等机制保障数据准确有序,结束时四次挥手断开连接,常用于对数据准确性要求高的场景。
UDP
UDP 即用户数据报协议,是一种无连接的传输层协议。它不事先建立连接就直接发送数据报,不保证数据可靠到达,也不进行排序和重传。具有开销小、传输速度快的特点,常用于对实时性要求较高、可容忍一定数据丢失的场景,如视频流、音频通话等。
补充(3)什么是面向连接
面向连接就是在正式传输数据之前,先建立一个点到点的连接。是一种在数据通信中广泛采用的模式。在数据传输前,通信双方会经历一个建立连接的过程,像 TCP 协议通过三次握手来确认双方状态与能力,协商传输参数。连接建立后,双方进入数据传输阶段,此过程中连接会持续维持,保障数据能有序、可靠地传送,还可实现流量控制与差错处理。当数据传输完毕,双方再通过特定步骤断开连接,如 TCP 的四次挥手,以释放资源。
补充(4)TCP和UDP协议的区别
一、TCP是面向连接的协议,传输前要三次握手建连,结束时四次挥手断连;UDP是无连接的协议,随时收发数据。
二、TCP传输是可靠的,有确认、重传、排序、流控机制保证数据完整准确;UDP不可靠,传输不保证,无纠错机制,可能丢包、乱序,也就是“尽力而为”。
三、TCP可以实现流控,基于滑动窗口机制,接收方反馈窗口大小,发送方据此调整速率实现流控; UDP只顾发送,不考虑接收方状况,无法流控。
四、TCP可以实现分段,会根据 MTU 将数据分成合适大小的段,还会编号按序传输,确保可靠交付;而UDP不能实现分段,将应用层数据原样封装。
五、TCP占用资源较大,速度较慢; UDP占用资源较小,速度快。
补充(5)TCP(传输控制协议)首部格式表
#每部分的解释源端口号(16 位):标识发送数据的应用程序端口。目的端口号(16 位):标识接收数据的应用程序端口。序号(32 位):标记本报文段在发送方数据字节流中的位置。确认序号(32 位):期望收到对方下一个报文段的第一个数据字节序号。首部长度(4 位):指示 TCP 首部长度,以 4 字节为单位。保留(6 位):保留为今后使用,目前置为 0。URG:紧急指针有效标志位。ACK:确认序号有效标志位。PSH:推送标志,提示接收方尽快将数据交付应用层。RST:重置连接标志位。SYN:同步序号,用于建立连接。FIN:发送方完成数据发送,请求释放连接。窗口大小(16 位):告知对方自己的接收窗口大小,用于流量控制。校验和(16 位):检测 TCP 首部和数据在传输中是否出错。校验数据完整性。紧急指针(16 位):配合 URG,指出紧急数据末尾在报文段中的位置。选项:可选字段,用于实现额外功能,如最大报文段长度等。数据:承载应用层实际要传输的数据。
补充(6)UDP头部格式
目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
包长度:该字段保存了 UDP 首部的长度跟数据的长度之和。
校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP包。
补充(7)网络数据封装TCP,UDP适用
网络数据封装从应用层开始,逐步向下各层进行:
应用层:生成原始数据,如网页内容、邮件信息等。
传输层:接收应用层数据,添加 TCP 或 UDP 首部。TCP 会分配源和目的端口号等,建立可靠连接;UDP 仅添加端口号等简单信息,提供无连接服务。
网络层:获取传输层数据单元,添加 IP 首部,包含发送端和接收端 IP 地址等,用于网络路由寻址。
数据链路层:得到网络层数据报,添加以太网首部(含 MAC 地址等)和尾部(如循环冗余校验信息),封装成数据帧,便于在局域网传输。 最终封装好的数据帧通过物理层转化为比特流在网络介质上传输。
什么是MSS?(上图数据那一部分,最大理论值为:MTU-20-20=1460字节)
MSS 即最大段大小,是 TCP 协议里的概念。它规定了 TCP 连接中,一个报文段所能携带数据的最大字节数,不包含 TCP 和 IP 首部。在建立连接时,通信双方会协商确定 MSS 值,一般依据链路 MTU 计算得出,合适的 MSS 可提升传输效率。
这个参数需要在TCP三次握手时,前两个SYN包中进行协商,如果双方不同,则需要按照小的来执行,减少分片带来麻烦。
补充(8)TCP三次握手和四次挥手(超级重点)
三次握手
SYN 是同步序列编号,它是 TCP 首部中的一个控制位,取值为 1 时表示该 TCP 报文段用于同步序号,主要在建立 TCP 连接时发挥作用。
TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
三次握手的过程 |
---|
客户端给服务器发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP 数据包), 该段中也包含客户端的初始序列号(Sequence number = x)。(CP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。) |
TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。 |
TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。 |
四次挥手
四次挥手过程 |
---|
客户端发送第一次挥手,之后由 ESTABLISHED 状态转为 FIN_WAIT1 状态; 服务器收到客户端的第一次挥手之后,发送第二次挥手给服务器,服务器进入 CLOSE_WAIT 状态,等待服务器自身的 SOCKET 关闭等处理; |
客户端收到服务器的第二次挥手,进入 FIN_WAIT2 状态,等待服务器关闭; |
服务器发送第三次挥手,然后进入 LAST_ACK 状态; 客户端收到第三次挥手,发送第四次挥手,客户端进入 TIME_WAIT 状态 |
服务器收到第四次挥手,进入 CLOSED 状态,客户端等待 2MSL 后,进入 CLOSED 状态 |
补充:TCP连接状态解释
CLOSED | 关闭状态,表示当前主机没有正在运行的传输连接 |
---|---|
LISTEN | 监听状态,表示服务器正在等待新的传输连接进入 |
SYN-RCVD | 表示主机已收到一个连接请求,但尚未确认 |
SYN-SENT | 表示主机已经发出一个连接请求,等待对方确认 |
ESTABLISHED | 传输连接建立,双方进入正常数据传输状态 |
---|---|
FIN-WAIT-1 | (主动关闭)主机已经发送关闭连接请求,等待对方确认 |
FIN-WAIT-2 | (主动关闭)主机已收到对方关闭连接确认,等待对方发送关闭连接请求 |
TIMED WAIT | 完成双向传输连接关闭,等待所有分组消失 |
CLOSING | 双方同时尝试关闭传输连接,等待对方确认 |
---|---|
CLOSE WAIT | (被动关闭)收到对方发来的关闭连接请求,并已确认 |
LAST ACK | (被动关闭)等待最后一个关闭连接确认,并等待所有分组消失 |
案例:企业员工不能访问娱乐节目,讲述原理
企业借助 AC(无线控制器)设备和 TCP 原理限制员工访问娱乐节目。
AC 设备作为网络管理核心,可集中管控接入网络的无线接入点和终端。在员工发出访问请求时,该请求以 TCP 报文形式传输。AC 设备会分析 TCP 报文首部信息,如源 IP(员工设备)、目的 IP(娱乐节目网站)和端口号。一旦发现目的 IP 对应娱乐网站或端口号用于娱乐服务,AC 设备依据预设策略拦截该 TCP 连接的建立,阻断报文传输,使员工无法与娱乐节目网站完成 TCP 三次握手,从而无法访问相关内容。
补充(9)IP协议
4位版本:指定IP协议的版本(IPv4/IPv6),对于IPv4来说,就是4。
16位总长度:IP报文(IP报头+有效载荷)的总长度,用于将各个IP报文进行分离。
8位生存时间:数据报到达目的地的最大报文跳数,一般是64,每经过一个路由器的转发,TTL -= 1,一直减到0还没到达,那么就丢弃报文,这个字段主要是用来防止出现路由循环。
16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏。
32位源IP地址:表示发送端所对应的IP地址。
32位目的IP地址:表示接收端所对应的IP地址。
TCP是6,UDP是17
该字段用于标识 IP 数据报所承载的上层协议。当取值为 6 时,表示此 IP 数据报封装的是 TCP 协议数据,TCP 提供可靠传输;取值为 17 时,意味着封装的是 UDP 协议数据,UDP 则是无连接、高效但不保证可靠的传输协议。
IP 协议为什么要分片
是不同网络的最大传输单元(MTU)有差异,像以太网 MTU 一般 1500 字节,当大尺寸 IP 数据报从大 MTU 网络传向小 MTU 网络,就得分片才能继续传输。 二是能提升传输效率与可靠性,小数据单元出错概率低,出错时只需重传出错分片。 三是可适配不同网络设备处理能力,减轻设备处理负担,保证数据顺利传输。
经过网络层的封装,数据最终会交付给下层的数据链路层。由数据链路层进行网络上的转发。可是,数据链路层由于物理特征的原因,一般无法转发太大的数据,即数据链路层一次可以转发到网络的报文大小是有限制的(一般为1500,MTU,最大传输单元)。
什么是MTU?
MTU 即最大传输单元,是数据链路层中一个关键概念,指数据链路层设备能一次传输的最大数据字节数。不同网络类型 MTU 不同,如以太网 MTU 常为 1500 字节。节。当上层数据长度超 MTU,需进行分片处理。MTU 值的大小会直接影响网络传输的效率和性能,合理设置 MTU 能优化数据传输。