跳到主要内容

网络协议

阅读需 11 分钟

关于网络协议、七层模型五层模型的总结

网络分层思想

为什么要分层?

在网络早期,完成每一件事需要的协议太多,这时有人提出了分层的想法,把复杂的网络数据传输过程分解为几个功能相对简单的单一的小过程

通过分层,每一层的人可以专注于某一件事情而无需关注多余事情,例如用户只需关注应用的使用,无需关注协议的传输等等

OSI七层模型

1974年,iSO组织发布了OSI参考模型

模型结构

osi七层模型-----TCP/IP四层模型-----TCP/IP五层模型

七层模型

各层功能

image-20241006101142290

数据封装与解封装

封装:从高层往低层依次封装,在每一层使用特定的协议,对数据进行处理,在数据前添加特定的协议报头。

解封装则相反

各层数据

层级数据单位
应用层(五层模型)
应用层
表示层
会话层
PDU
APDU
PPDU
SPDU
传输层段(segment)
网络层包(packet)
数据链路层帧(frame)
物理层比特(bit)

TCP/IP协议簇

概览图

image-20240924203711851

网络层协议

IP (IPv4 · IPv6) (Internet Protocol) 网络之间互连的协议

ARP (Address Resolution Protocol) 即地址解析协议,实现通过IP 地址得 知其物理地址。

RARP (Reverse Address Resolution Protocol) 反向地址转换协议允许局域 网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP地址。

ICMP (Internet Control Message Protocol )Internet 控制报文协议。它是TCP/IP 协议族的一个子协议,用于在IP 主机、路由器之间传递控制消息。

ICMPv6 :

IGMP (Internet Group Management Protocol) Internet 组管理协议,是因特 网协议家族中的一个组播协议,用于 IP 主机向任一个直接相邻的路由器报 告他们的组成员情况。

传输层协议号

协议协议号
ICMP1 (Internet控制报文协议)
IGMP2 (Internet组管理协议)
IP4(IP中的IP(封装))
TCP6(传输控制协议)
EGP8 (外部网关协议)
IGP9 (专用内部网关协议)
UDP17 (用户数据报协议)
RDP27 (可靠数据协议,应用层远程桌面)
IPv641 (互联网协议第6版)
GRE47 (通用路由封装协议)
ICMPv651 (IPv6网络的报文控制协议)
EIGRP88 (增强内部网关路由协议,思科独有)
OSPF89 (开放式最短路径优先协议)
VRRP112 (虚拟路由器冗余协议)
L2TP115 (第二层隧道协议)
STP118 (计划传输协议 )
SMP121 (简单邮件协议)

应用层协议端口

协议协议端口号
FTP文件传输协议 -- 数据连接端口TCP20
FTP文件传输协议 -- 控制连接端口TCP21
SSH远程登录TCP22
Telnet远程登录(不安全的远程连接)TCP23
SMTP电子邮件传输协议TCP25
DNS域名系统TCP/UDP53
DHCP Server接收请求的端口UDP67
DHCP Client接收回应的端口UDP68
TFTP简单文件传输协议UDP69
HTTP协议TCP80
POP2邮局协议2TCP109
POP3邮局协议3TCP110
Windows主机NetBIOS服务器UDP137
Windows主机NetBIOS数据报UDP138
Windows主机NetBIOS会话服务/SMB协议TCP139
HTTPS协议TCP443
SMB协议(文件和打印机共享服务)TCP445
RDP(远程桌面协议)TCP3389

各层间通信

image-20241002174929469

数据链路层

数据链路层的传输单元:帧

帧结构

image-20241003172434505

帧结构的构成:MAC子层+上三层数据+FCS(帧校验序列)

数据链路层的协议:MAC子层协议

MAC子层协议:封装帧头和帧尾

一个标准的以太网帧一共1538字节:

一层开销 (20 Byte) [前导码 (8 Byte) + 包间间隔 (12 Byte)] + 二层封装 (18 Byte) + 三层封装 (20 Byte) + 四层封装 (20 Byte) + MTU

帧头

MAC子层头部包含:目标MAC地址(6 Byte字节 48bit)+ 源MAC地址(6字节)+ 类型(2字节)= 14 字节

类型字段:0x0800 IP协议 0x0806 arp协议

类型字段用于区分上层协议,0800代表上层是IP协议,0806代表上层协议是ARP协议

MAC地址:也称为物理地址,是一台PC的身份,是被固化到网卡的全球唯一标识

帧尾

帧尾:FCS(Frame Checksum Sequence)帧校验序列,长度4个字节

上三层数据

MTU(最大传输单元 max trans unit)

一个帧的最大承受能力叫MTU值=1500 字节

网络层

IP协议分析

IP协议(Internet Protocol)是互联网中最基础的网络层协议之一,它负责将数据分组从源主机传输到目标主机

IP包头结构

image-20241005183237783

IP包头总共 20 Byte字节,一行数据是32bit = 4 Byte字节

版本

4 bit

  • IPv4 版本值 0100 (4)

  • IPv6 版本值 0110 (6)

首部长度

4 bit

定义包头到底是20个字节还是包扩可选项到60字节

优先级与服务类型

8 bit

tos 设定优先级,主要限速使用的保证带宽(弃用)

总长度

16 bit

表示整个IP数据包的长度,包括IP头部和数据部分

总长度字段的最大值是65535字节,这意味着一个IPv4数据包的最大长度是65535字节。超过这个长度的数据需要分片传输,但由于链路层的MTU限制。超过1480字节后就会被分片

标识符

16 bit

当一个数据包需要分片传输时,每个分片的"标识符"字段会被设置为相同的值,便于IP分片的重组

标志

3 bit

用于控制和标识分片的行为

  • 最左边的位是保留位,总是设置为0。
  • 中间的位是“不允许分片(DF)”位,如果设置为1,表示该数据包在传输过程没有被分片。
  • 最右边的位是“更多分片(MF)”位,如果设置为1,表示后面还有更多的分片

片偏移量

13 bit

该字段是与ip分片后,相应的ip片在总的ip片的位置。该字段的单位是8字节

例如第三片的片偏移为370(2960/8),表示开始的时候是2960位,结束的时候在3979位

TTL

8 bit

Time To Live,生存时间,单位为跳数

IP分片每经过一个路由器该值减一,用于防止数据包再网络中永久的循环。TTL范围:1-255

  • windows系统一般为128
  • linux系统一般为1-128之间,如56,64
  • 如果返回地址是255,说明这个地址是在企业级的路由器上,也就是网关

协议号

8 bit

用于区分上层协议

其中 1 标识ICMP、2 标识IGMP、6 标识TCP、17 标识UDP、89 标识OSPF

首部校验和

16 bit

对整个数据包的包头进行的校验,功能和fcs功能相同,不检验数据部分

传输层

关于TCP和UDP协议,在网上看到一个很有意思的图片,形象的描述了TCP娘与UDP娘的不同点

8fead4f350ebf8c0b3d837755460812e

TCP

概述

传输控制协议(TCP,Transmission Control Protocol) 是一种面向连接的、可靠的、基于字节流的传输层通信协议

TCP协议有以下特点:

  1. 面向连接

  2. 可靠性

  3. 全双工通信 (双方能互相发送和传输,并且可以同时发送)

  4. 面向字节流

TCP协议的传输机制

  1. 数据分片:在发送端对用户数据进行分片,在接收端进行重组,由 TCP 确定分片的大小并控制分片和重组;

  2. 到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;

  3. 超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;

  4. 滑动窗口:TCP 连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP 在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;

  5. 失序处理:作为 IP 数据报来传输的 TCP 分片到达时可能会失序,TCP 将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;

  6. 重复处理:作为 IP 数据报来传输的 TCP 分片会发生重复,TCP 的接收端必须丢弃重复的数据;

  7. 数据校验:TCP 将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP 将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。

报文格式

1c04ce5f6950bf0831818332ceeb75d4

其中标志位分别表示

URG(紧急):紧急数据包
ACK(确认):确认收到数据包
PSH(推送):数据包立即发送
RST(复位):中断一个连接
SYN(同步):表示开始会话请求
FIN(结束):结束会话

三次握手

3e9f24027d29518d3c644a6ae3dff5dc

第一次握手

客户端会随机初始化序号(client_isn)x,将此序号置于 TCP 首部的「序列号」字段中,同时把 SYN 标志位置为 1 ,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态.

第二次握手

服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn)y,将此序号填入 TCP 首部的「序列号」字段中,其次把 TCP 首部的「确认应答号」字段填入 x + 1, 接着把 SYN 和 ACK 标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

第三次握手

客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 y + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。

四次挥手

ed4297ce7ebaf52b0af155526df3791c

UDP

概述

UDP 用于应用程序之间的简单通信

UDP有时被称为“即发即忘”协议,它以不确定的顺序向接收端发送数据,不保证传输的确认,也不检查数据包是否按预期般到达

UDP的特点

  1. 无连接:UDP在传输数据前不需要建立连接,数据可以直接发送给接收方,这就减少了建立连接和维持连接状态的开销。
  2. 不可靠:UDP不保证数据包的顺序、完整性或可靠性。如果网络环境不佳,数据包可能会丢失或到达顺序可能会错乱,而UDP不会进行纠正。
  3. 简单快速:UDP的头部长度小,只有8个字节,相比TCP的至少20个字节的头部来说,可以更快速地处理数据包。
  4. 面向报文的:对于应用层交下来的报文段不进行拆分合并,直接保留原有报文段的边界然后添加UDP的首部就交付给网络层。不论报文的长短,UDP都不会进行处理。
  5. 无拥塞控制:UDP不进行网络拥塞的控制,因此,它可能会在网络不佳的情况下继续发送数据包,有可能导致网络拥塞。

报文格式

63e018df0626f9cdb7934400c115a232