banner
NEWS LETTER

五、OSI第四层:运输层

Scroll down

第五章 第四层:运输层 Transport Layer

  • 第四层运输层主要是实现了主机之间的通信。
  • 数据通信是服务于主机上的进程(Session)
  1. An overview of layer 4
  2. TCP (Transmission Control Protocol)
  3. UDP(User Datagram Protocol)
  4. An application: NAT and PAT

一、第四层综述

1、第4层执行多项功能:

  1. 对上层应用数据进行分段(segmenting upper-layer application data)
  2. 建立端到端(end to end)的运营
  3. 将段从一个端主机发送到另一个端主机
    • (第三层和第二层不进行可靠性检验,第四层完成可靠性检验,接受方认为数据错误,在第四层进行要求重传)
  4. 流量控制可靠性
    • 可以比喻为与外国人交谈:通常,您会要求外国人重复他/她的话(可靠性)慢声说话(流量控制)
    • 双方主机的网络的处理能力不同,缓存能力不同

2. 两个特别重要的第4层协议:

  1. 传输控制协议(TCP, Transmission Control Protocol)
  2. 用户数据报协议(UDP, User Datagram Protocol)

3. Layer 4: The Transport Layer

  1. 将传出消息划分为多个 + 在目标站重新组合消息
  2. 传输控制协议(TCP)
    • 可靠
    • 面向连接 Connection -oriented
    • 软件检查
    • 重新发送任何丢失或出错的段
    • 使用确认 acknowledgments
    • 提供流量控制
  3. 用户数据报协议(UDP)
    • 不可靠
    • 无连接 connectionless
    • 不提供段的软件检查
    • (直接丢弃错误的报文,而不进行其他操作)
    • 不使用确认
    • 不提供流量控制

4. 服务模型

alt text

  1. TCP和UDP都使用端口 port来跟踪(track)同时穿越网络的不同会话
  2. 应用软件开发人员同意使用在RFC1700中定义的知名端口号。
  3. 端口号低于255的端口保留用于TCP和UDP公共应用程序。
    • 端口号0-255是public的,不可以随意分给其他的进程,如果分发则不符合规范

5. 套接字(Socket, 第四层的单位)

  • 套接字表示为(IP地址,端口)
  • 每个连接表示为(源套接字,目标套接字),这是一个点对点全双工通道。
  • TCP不支持多播和广播。

二、 TCP (Transmission Control Protocol)

  • 传输控制协议

1. TCP 服务模型

1.1 TCP必须解决的问题

  1. 可靠传输 Reliable transfer
  2. 流量传输 Flow control
    • 滑动窗口 Sliding window
    • 避免拥塞 congestion avoidance
  3. 连接控制 Connection management
    • 建立连接:三次握手
    • 断开连接:四次握手

1.2 TCP数据段的格式

alt text

1.2.1. 首部情况

  • 一行共计4字节,段首在前,固定首部长度为20字节

1.2.2. 源端口和目的端口

  • 源端口和目的端口字段:各占 2 字节
  1. 端口是运输层与应用层的服务接口
  2. 运输层的复用和分用功能都要通过端口才能实现

1.2.3. 序号

  • 序号字段:占4 字节
  1. TCP 传送的数据流中的每一个字节都编上一个序号
  2. 序号字段的值指本报文段所发送的数据的第一个字节的序号

1.2.4. 确认号

  • 确认号字段:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
  1. 确认对方的数据号(发送同时对上一次传输进行确认)
  2. 体现出了全双工通信的优点,比如上回收到最后序号是700,那么确认号就是701

1.2.5. 数据偏移

  • 数据偏移(即首部长度):占 4 位
  1. 指出 TCP 报文段的数据起始处距 TCP 报文段的起始处的长度
    • (Data部分从什么地方开始算)
  2. 单位是 32 位字(以 4 字节为计算单位)
  3. 不满足的话使用填充位保证为4字节的整数倍(保证对齐问题)

1.2.6. 保留

  • 保留字段:占 6 位,保留为今后使用,目前置 0
    • 也就是说截止到现在也没有使用这部分的字段。

alt text

1.2.7. URG

  • 紧急 URG = 1 时,表明紧急指针字段有效。
  1. 告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)

1.2.8. ACK

  • ACK = 1 时确认号字段有效;
  • ACK = 0 时确认号字段无效

1.2.9. PSH(PuSH) 推送

  1. 接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
    • 此时将缓存所有部分都传输,而并不是只将这个报文段的信息进行传输
    • TCP在正常条件下并不是立马传输的,首先要缓存满了才发送,其次还有就是要保证网络可信的时候才发送

1.2.10. RST 复位

  1. ReSeT = 1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接

1.2.11. SYN

  1. 同步 SYN = 1:表示这是一个连接请求或连接接受报文
    • (初始的时候才出现)

1.2.12. FIN(FINis) 终止

  • 用来释放一个连接
  • FIN = 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
    • (发送方没有传输数据了)

alt text

1.2.13. 窗口

  • 2 字节,用来让对方设置发送窗口的依据,单位为字节。
    • 表示可以进行传输的窗口大小是多少。

1.2.14. 检验和

  • 检验和:占2字节。检验和字段检验的范围包括首部数据这两部分

1.2.15. 紧急指针字段

  • 紧急指针字段:占16位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面

1.2.16. 选项(长度可变)

  1. TCP 最初只有一种选项,即最大报文段长度 MSS(Maximum Segment Size)
  2. MSS 告诉对方缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节
  3. 数据字段加上 TCP 首部才等于整个的 TCP 报文段

1.2.17. 填充字段

  • 填充字段:这是为了使整个首部长度是 4 字节的整数倍

2. TCP协议

  1. 主机使用**段(TPDU传输层PDU)**交换数据
  2. 每个段都有:
    • 一个20字节的首部(不包括可选部分)
    • 0 或更多数据字节(请求连接的时候)
  3. 段的大小必须与 IP 数据包匹配,并且还必须满足底层的需求
    • 例如,以太网的 MTU(最大传输单位)为 1500 字节
  4. 每个字节 byte 都有一个 32 位的序号seq

2.1 Reliable Connection 可靠连接

alt text

  • “红蓝两军问题”是一个经典的计算机网络中的死锁(Deadlock)问题,或者说是资源竞争的一个类比。通常是用于阐述一些竞争、阻塞和同步问题。

3. TCP:Establish Connection

第一次握手

alt text

  • 服务器Server:执行LISTEN和ACCEPT原语,被动监听。
  • 客户端Client:执行CONNECT原语,生成一个SYN=1和ACK=0的TCP段,表示连接请求
    • SYN=1:连接请求
    • ACK=0:确认号无效

第二次握手

alt text

  • 服务器:检查是否有服务进程在监听端口
  1. 如果没有进程,回复一个RST=1的TCP段
    • 差错,要重连
  2. 如果进程,决定拒绝或接受请求
  3. 如果接受连接请求,发送一个SYN=1和ACK=1的TCP段
    • 连接请求
    • 确认号有效

第三次握手

alt text

  1. 客户端:发送一个SYN=0和ACK=1的TCP段,以确认连接

  2. 服务器:接收到确认后,通知上层应用程序连接已建立。
    alt text

  3. 默认三次握手就认为可靠了,之后就进行数据传输

  4. 有时候我们会选择,第三次握手的时候同时携带数据。

  • TCP头部中的SEQ(序列号)字段
    • 32位,用来标识当前数据段的序列号。每发送一个数据段时,序列号会根据数据段的大小递增
    • 通过与ACK(确认号)一起使用,确保了数据的可靠性和完整性。
      • 此ACK指的是32位的那个

alt text

  • seq和ack的关系:
    • 在三次握手(TCP连接建立过程)中,序列号用于确保双方都准备好建立连接。
    • 在数据传输过程中,SEQ标识发送的数据包的顺序,而ACK确认已收到的数据。
    • 例如,客户端发送的数据包的SEQ为1000,服务器确认收到后返回ACK为1001,表示它已经成功接收到序列号为1000的数据包。

建立连接实例

alt text

  • 基本的三次握手用于连接同步Synchronization
  • 注意,ACK不占用序列号空间(如果占用,我们将最终确认ACK的ACK!)

4. 数据传输——停止等待协议 Data transfer——stop-and-wait protocol

alt text

  1. 发送段后,暂时保留备份 backup
    • 在发送后没有收到确认的时候,要保存备份来重传
    • 收到确认的时候,抛弃备份
    • 超时计时器:如果对方的应答超过一定时间后则直接进行重发(时间要比正常往返时间稍微长一点)
  2. 每个segment和 ACK 必须具有 ID
  3. 重新发送时间必须大于平均传输时间 * 2
  4. 停止等待协议是一个简单的协议,但是效率很低

5. 数据传输——丢失/延迟 Lost ACK and Late ACK

alt text

  1. 丢失ACK情况:
  • 发送方重新发送一份M1数据段
  • 接收方:如果接收到重复的M1数据段,接收方将丢弃重复的数据段。
    • 重新发送ACK,以确认已经接收到的M1数据段。
  1. ACK迟到情况:
  • 发送方重新发送一份M1数据段
  • 接收方:如果接收到重复的M1数据段,接收方将丢弃重复的数据段。
    • 重新发送ACK,以确认已经接收到的M1数据段。
  • 发送方收到迟到的ACK不做理会
    • 晚到的应答直接丢弃(不做处理)

6. 可靠通信——自动重传请求(ARQ)

  • ARQ (Automatic Repeat reQuest)
  • 这意味着“重传请求”是自动发送的,接收方无需请求发送方重传出错的数据段

6.1 连续 ARQ 协议

  • 连续 ARQ 协议(Contiguous ARQ Protocol
    alt text
  • ARQ的工作原理
  1. 发送方维持发送窗口
  2. 收到一个确认后,发送窗口向前滑动
  3. 只可发送发送窗口内的数据

6.2 具体实例

alt text

  1. 发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的报文段,而发送窗口确定为 500 字节
  2. 发送端只要收到了对方的确认,发送窗口就可前移
  3. 发送 TCP 要维护一个指针。每发送一个报文段,指针就向前移动一个报文段的距离。
    alt text
  4. 发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。
  5. 现在发送端还可发送 300 字节。
  6. 发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节
  7. 现在发送端最多还可发送 400 字节的数据。
    alt text
  8. 利用可变窗口大小进行流量控制,双方确定的窗口值是 400
    alt text
  • WIN:窗口的大小:双方动态协商,收到确认调整窗口
  • ACK:是指可以继续发送的数据的位置。
  • 为什么 201 在 401 后面发送?超时重传要超过两倍的平均传输时间后才进行重传

7. TCP: Release Connection 中断连接

第一次握手:A发起断开连接请求

alt text

  • 客户端:发送一个FIN=1的TCP段,表示请求中断连接
  • 这表示发送方已经没有数据要发送了,但仍然可以接收数据

第二次握手:B:Ack = 1:允许断开

alt text

  • 服务器:发送一个ACK=1的TCP段,表示确认接收到中断连接请求.
  • 此时,接收方可能还有未发送完的数据,因此连接仍然保持,只是不再发送新的数据,此时我们需要完成之前未处理完成的数据的处理。(这里只是说我已经收到了你请求停止传输的请求)

第三次握手:B:FIN = 1:数据处理完成

alt text

  • 服务器: 发送一个FIN=1的TCP段, 表示它也没有数据要发送了,准备中断连接

第四次握手:A:ACK=1,确认收到B的断开信息

alt text

  • 客户端: 发送一个ACK=1的TCP段, 表示确认中断连接. 此时连接正式关闭

汇总

alt text

  • 释放连接之前客户端必须等待2倍的最大报文段生存时间(2MSL)

7. 为什么要等待2MSL

  • 确保A发送的最后一个ACK能够到达B
  • 防止任何无效的连接请求段出现
    • 等待2MSL后,我们可以确保连接上的所有段都已消失

9. TCP的计时器

  1. 重传计时器
  2. 坚持计时器
    • 作用:用于解决TCP连接中的“零窗口”问题。当接收方的接收窗口为零时,发送方会停止发送数据,并启动坚持计时器。坚持计时器到期后,发送方会发送一个小的探测报文段(窗口探测),询问接收方的窗口大小是否已经更新。
    • 目的:防止发送方和接收方在“零窗口”状态下进入死锁。
  3. 保持计时器
    • 作用:用于检测TCP连接是否仍然有效。当一段时间内没有数据传输时,保持计时器会启动,并定期发送探测报文段。如果在多次探测后没有收到对方的响应,连接将被认为已经失效。
    • 目的:确保连接的有效性,及时发现和关闭失效的连接,释放资源。
  4. 时间等待计时器

10. TCP的有限状态机

alt text

  • 粗线:正常的服务器端
  • 虚线:正常客户端
  • 细线:异常状态的问题

三、UDP (User Datagram Protocol)

  • 用户数据报协议

1. 为什么需要UDP

  • 无需连接建立:不需要连接建立过程(比如TCP三次握手,这可能会增加延迟)。
  • 简单:发送方和接收方没有连接状态
  • 小的段头部:段头部较小,只有8个字节
  • 无拥塞控制:UDP可以根据需要快速发送数据。

2. 介绍(特点与应用)

  1. 无连接 Connectionless:
    • 无握手:UDP发送方sender和接收方receiver之间没有握手过程。
    • 独立处理:UDP中的每个数据报文(Datagram)是独立处理的
  2. 常用于流媒体应用 streaming multimedia applications:
    • 容错:对丢失容忍。loss tolerant
    • 速率敏感:对传输速率敏感,而UDP允许尽可能快。rate sensitive
    • 流媒体应用eg:音频、视频
  3. UDP的应用:
    • RIP(路由信息协议):定期发送路由信息。
      • 由于RIP的数据包较小且定期发送,使用UDP可以避免TCP的连接建立和关闭带来的延迟。
    • DNS(域名系统):DNS查询通常使用UDP
      • 因为DNS查询通常是短小的请求和响应,且不需要建立连接,使用UDP可以避免TCP建立连接时的延迟。
    • SNMP(简单网络管理协议):SNMP用于网络设备的监控和管理
      • 尤其是在拥塞的情况下,UDP能够比TCP提供更高的性能,因为TCP在拥塞情况下会出现重传和延迟。
    • 其他协议:包括TFTP(简单文件传输协议)、DHCP(动态主机配置协议)等不需要建立可靠连接的协议。
  4. 必要时在应用层添加可靠性
    • 由于UDP本身不提供可靠性,应用层可以根据需要自己实现数据的可靠性控制。

3. UDP段格式

alt text

  • UDP 的数据段很简单
  • UDP 只有 8 个字节的首部,所以 UDP 报文最少是 8 个字节
  1. 源端口(Source Port):16位,发送方的端口号。
  2. 目的端口(Destination Port):16位,接收方的端口号。
  3. 长度(Length):16位,UDP数据报的总长度(包括头部和数据部分)。
  4. 校验和(Checksum):16位,UDP数据的校验和,用于检验数据在传输过程中是否出错。校验和覆盖数据部分,如果发生错误,接收方会丢弃数据报。
  • 校验也要对 data 一并校验,如果出现错误,直接丢弃。
  • 数据:UDP 直接发送,UDP 不会再自己分片了;应用层根据需要决定如何将数据分割成适合传输的大小。

TCP和UDP对比

alt text

四、An application: NAT and PAT

1. 什么是NAT(Network Address Translation)

  1. 定义:NAT(网络地址转换)是将IP数据包头中一个地址替换为另一个地址的过程。
  2. 用途:NAT用于允许使用私有地址的主机 访问互联网
  3. 解决IP地址耗尽的方案之一
    • 节省注册(合法)地址
    • 增加连接互联网的灵活性
  4. 相关标准:RFC 1631 - 网络地址转换器(NAT)

2. NAT a simple concept

alt text

3. NAT 类型

  1. 静态NAT:Static NAT
    • 固定映射:一个内部地址到一个注册地址。
  2. 动态NAT:Dynamic NAT
    • 映射是动态完成的,基于先到先得的原则。
  3. PAT(端口地址转换/重载): PAT (Overload)
    • 使用端口地址转换允许多个内部用户共享一个“内部全局”地址

4. NAT中的地址类型

  1. Inside Local address 内部本地地址: 内网IP地址
  2. Inside Global address 内部全局地址: 注册IP地址, 对外部展示的内部地址
  3. Outside Global address外部全局地址: 由主机所有者分配的IP地址, 通常是注册地址
    alt text
  • 内部主机发送报文给网关,网关根据 NAT Table 进行翻译,转换成内部全局地址,然后进行转发

5. Static NAT 例子

alt text

  1. 静态映射:静态NAT通过手动配置,将每个内部私有IP地址固定映射到一个公网IP地址。
  2. 转换表:NAT设备维护一个静态转换表,记录内部私有IP地址和对应的公网IP地址之间的映射关系。
  3. 地址转换:当内部主机发起连接请求时,NAT设备根据静态转换表,将内部私有IP地址替换为对应的公网IP地址。
  4. 固定映射:映射关系是固定的,不会随时间变化,确保每个内部主机始终使用相同的公网IP地址进行通信。

6. Dynamic NAT 例子

alt text

  1. 地址池:动态NAT使用一个公网IP地址池来动态映射内部私有IP地址。
  2. 请求映射:当内部主机发起连接请求时,NAT设备从地址池中选择一个未使用的公网IP地址,并将其映射到内部私有IP地址。
  3. 建立映射:NAT设备在内部私有IP地址和选定的公网IP地址之间建立临时映射。
  4. 释放映射:当连接结束或超时时,NAT设备释放该映射,使公网IP地址返回地址池供其他内部主机使用。
  • 先到先得

7. NAT 的优缺点

  1. 优点
    • 由于并非每个内部主机同时需要外部访问,可以使用一个较小的公网IP地址池来服务相对较多的私有地址主机。
  2. 缺点
    • 一对一映射 one-to-one mapping
    • 例如,如果私有地址空间是/8,但公网地址是/24,则只有254个主机可以同时访问互联网。

8. PAT 端口地址转换 Port Address Translation

  • 一种特殊类型的动态NAT
  • 私有IP地址公网IP地址映射到不同的端口号来实现多个私有IP地址共享一个公网IP地址
  • 每个私有IP地址的每个连接都通过不同的端口号进行区分。

9. PAT 工作原理

alt text

  1. 端口重载:PAT使用一个公网IP地址,并通过不同的端口号来区分内部主机的连接请求。
  2. 端口映射:当内部主机发起连接请求时,NAT设备将内部私有IP地址和端口号映射到公网IP地址和唯一的端口号
  3. 建立映射:NAT设备在内部私有IP地址和端口号与公网IP地址和唯一端口号之间建立临时映射。
  4. 转换表:NAT设备维护一个转换表,记录内部私有IP地址和端口号与公网IP地址和唯一端口号之间的映射关系。
  5. 地址转换:当数据包通过NAT设备时,NAT设备根据转换表将内部私有IP地址和端口号替换为公网IP地址和唯一端口号,反之亦然。
  6. 释放映射:当连接结束或超时时,NAT设备释放该映射,使端口号返回端口池供其他内部主机使用。

10. PAT 操作

alt text

If you like my blog, you can approve me by scanning the QR code below.

Other Articles
Article table of contents TOP
  1. 1. 第五章 第四层:运输层 Transport Layer
  2. 2. 一、第四层综述
    1. 2.1. 1、第4层执行多项功能:
    2. 2.2. 2. 两个特别重要的第4层协议:
    3. 2.3. 3. Layer 4: The Transport Layer
    4. 2.4. 4. 服务模型
    5. 2.5. 5. 套接字(Socket, 第四层的单位)
  3. 3. 二、 TCP (Transmission Control Protocol)
    1. 3.1. 1. TCP 服务模型
      1. 3.1.1. 1.1 TCP必须解决的问题
      2. 3.1.2. 1.2 TCP数据段的格式
    2. 3.2. 2. TCP协议
      1. 3.2.1. 2.1 Reliable Connection 可靠连接
    3. 3.3. 3. TCP:Establish Connection
      1. 3.3.1. 第一次握手
      2. 3.3.2. 第二次握手
      3. 3.3.3. 第三次握手
    4. 3.4. 建立连接实例
    5. 3.5. 4. 数据传输——停止等待协议 Data transfer——stop-and-wait protocol
    6. 3.6. 5. 数据传输——丢失/延迟 Lost ACK and Late ACK
    7. 3.7. 6. 可靠通信——自动重传请求(ARQ)
      1. 3.7.1. 6.1 连续 ARQ 协议
      2. 3.7.2. 6.2 具体实例
    8. 3.8. 7. TCP: Release Connection 中断连接
      1. 3.8.1. 第一次握手:A发起断开连接请求
      2. 3.8.2. 第二次握手:B:Ack = 1:允许断开
      3. 3.8.3. 第三次握手:B:FIN = 1:数据处理完成
      4. 3.8.4. 第四次握手:A:ACK=1,确认收到B的断开信息
      5. 3.8.5. 汇总
    9. 3.9. 7. 为什么要等待2MSL
    10. 3.10. 9. TCP的计时器
    11. 3.11. 10. TCP的有限状态机
  4. 4. 三、UDP (User Datagram Protocol)
    1. 4.1. 1. 为什么需要UDP
    2. 4.2. 2. 介绍(特点与应用)
    3. 4.3. 3. UDP段格式
    4. 4.4. TCP和UDP对比
    5. 4.5.
  5. 5. 四、An application: NAT and PAT
    1. 5.1. 1. 什么是NAT(Network Address Translation)
    2. 5.2. 2. NAT a simple concept
    3. 5.3. 3. NAT 类型
    4. 5.4. 4. NAT中的地址类型
    5. 5.5. 5. Static NAT 例子
    6. 5.6. 6. Dynamic NAT 例子
    7. 5.7. 7. NAT 的优缺点
    8. 5.8. 8. PAT 端口地址转换 Port Address Translation
    9. 5.9. 9. PAT 工作原理
    10. 5.10. 10. PAT 操作
Please enter keywords to search