返回
Featured image of post EEC4100-传输层

EEC4100-传输层

传输层干嘛的


多路复用与解复用(Multiplexing/Demultiplexing)

### 多路复用(Multiplexing) - **定义**: - 将多个数据流(来自不同应用程序进程的数据)合并为一个数据流。 - 把传给不同应用程序的数据“打包”在一起,通过同一个网络链路发送。 - **应用场景**: - 例如,你的手机正在同时进行以下操作: - 浏览网页 - 刷新电子邮件 - 使用微信聊天 - 所有这些应用程序的数据都通过同一个网络连接发送。 - **作用**: - 提高网络资源的利用率,允许多个应用程序共享同一个网络链路。

解复用(Demultiplexing)

  • 定义
    • 解复用是多路复用的逆过程。
    • 将接收到的数据流分离成单独的部分,分发到对应的应用程序进程。
  • 应用场景
    • 手机接收到的数据包流会被分割,并发送到相应的应用程序(如网络浏览器、邮件客户端、微信等)。

工作原理

解复用

  • 端口的作用
    • IP 协议实现的是 IP 地址到 IP 地址的传输,即两台计算机之间的通信。
    • 每台计算机中可能运行多个应用程序,需要多个通信通道。
    • 端口代表一个通信通道,用于区分不同的应用程序进程。
    • TCP 和 UDP 的端口号都是 16 位,共有 65536 个端口号。
  • 解复用过程
    • 主机接收 IP 数据报:
      • 每个 IP 数据报包含源 IP 地址和目的 IP 地址。
      • 每个数据报携带一个传输层段(TCP 或 UDP 段)。
      • 每个段包含源端口号和目的端口号。
    • 主机使用 IP 地址和端口号将数据段定向到正确的套接字(socket),进而连接到对应的应用程序。

无连接的解复用(UDP)

  • UDP 套接字
    • 创建套接字时,会分配一个本地端口号,例如:
    1
    
    DatagramSocket mySocket1 = new DatagramSocket(12534);
    
  • 发送数据
    • 发送数据时,必须指定目标 IP 地址目标端口号
  • 接收数据
    • 主机接收 UDP 段时,检查段中的目标端口号,并将数据定向到具有该端口号的套接字。
    • 具有相同目的端口但不同源 IP 地址或源端口号的数据段也会被定向到同一个套接字。

面向连接的解复用(TCP)

  • TCP 套接字
    • TCP 套接字通过 四元组 来标识:
      • 源 IP 地址
      • 源端口号
      • 目的 IP 地址
      • 目的端口号
  • 解复用过程
    • 服务器可以在一个 TCP 端口上同时支持多个 TCP 套接字。
    • 每个套接字通过其四元组来区分
    • 例如,Web 服务器为每个连接的客户端分配不同的套接字。
    • 非持久连接的 HTTP(如 HTTP/1.0)为每个请求分配不同的套接字。
#### 常用端口 - **Port 80**:标准 HTTP(超文本传输协议),用于浏览网页。 - **Port 22**:SSH(Secure Shell),用于从远程计算机登录。 - **Port 25**:SMTP(简单邮件传输协议),用于发送邮件。 - **Port 143**:IMAP(Internet 邮件访问协议),用于读取电子邮件。 - **Port 443**:HTTPS(安全 HTTP),用于安全地浏览网页。

UDP

UDP(用户数据报协议)

UDP 是一种“无连接”、“尽力而为”的传输层协议,它提供了简单、轻量级的通信服务。以下是关于 UDP 的详细内容,包括其特点、用途、报文格式和校验和机制。

UDP 的特点

  • 无连接(Connectionless)
    • 不需要在传输数据之前建立连接。
    • 每个 UDP 数据报(segment)独立处理,互不影响。
    • 没有握手过程,减少了协议开销和延迟。
  • 不可靠(Unreliable)
    • 不保证数据报的可靠传输,数据报可能会丢失、重复或乱序到达。
    • 不提供重传机制或确认机制。
  • 简单高效
    • 报文头部简单,只有 8 字节,包含源端口、目的端口、长度和校验和。
    • 适用于对实时性要求高、对可靠性要求低的应用。
  • 无拥塞控制(No Congestion Control)
    • UDP 不会根据网络拥塞情况调整发送速率。
    • 应用程序可以以任意速率发送数据,可能导致网络拥塞。

UDP 的用途

  • 流媒体应用(Streaming Multimedia Apps)
    • 对丢失数据的容忍度较高(如视频会议、在线视频)。
    • 对传输速率敏感,需要快速传输数据。
  • DNS(域名系统)
    • 用于域名解析,通常使用 UDP 进行快速查询。
  • SNMP(简单网络管理协议)
    • 用于网络设备的管理,通常使用 UDP 传输。
  • 可靠传输(Reliable Transfer over UDP)
    • 应用程序可以在 UDP 上添加可靠性机制(如重传、确认)。
    • 应用程序可以根据自身需求实现错误恢复机制。

UDP 报文格式

UDP 报文由头部和数据负载组成,具体格式如下:

字段 长度(字节) 描述
源端口 2 发送方的端口号,用于标识发送方进程。
目的端口 2 接收方的端口号,用于标识接收方进程。
长度 2 UDP 数据报的总长度(包括头部和数据负载),以字节为单位。
校验和 2 用于检测数据报在传输过程中是否发生错误。
数据负载 可变长度 应用程序的数据。

总长度:UDP 数据报的总长度(包括头部和数据负载)必须至少为 8 字节(头部长度)。

UDP 校验和(Checksum)

UDP 校验和用于检测数据报在传输过程中是否发生错误。其计算方法如下:

  1. 发送端
    • 将 UDP 数据报的内容(包括头部和数据负载)视为一系列 16 位整数。
    • 计算这些 16 位整数的 一的补码和(即逐位相加,溢出部分加到最低位)。
    • 将计算结果放入 UDP 头部的校验和字段中。
  2. 接收端
    • 接收到 UDP 数据报后,同样计算其内容的一的补码和。
    • 如果计算结果为全零(0xFFFF),则认为数据报没有错误。
    • 如果计算结果不为全零,则认为数据报发生了错误。

可靠传输(Reliable Transmission)

可靠传输是传输层协议(如 TCP)的核心功能之一,它确保数据能够完整、按序地从发送方传输到接收方。以下是关于可靠传输的实现机制和相关协议的详细内容。

停等协议(Stop-and-Wait Protocol)

停等协议是最简单的可靠传输协议,其工作原理如下:

  • 发送方
    • 发送一个数据包后,必须等待接收方的确认(ACK)。
    • 如果在超时时间内没有收到 ACK,发送方将重传该数据包。
  • 接收方
    • 接收到数据包后,发送 ACK 确认。
    • 如果数据包重复,接收方会丢弃重复的数据包并重新发送 ACK。

问题: - 如果 ACK 丢失或在超时后到达,发送方可能会错误地重传数据包。 - 性能低下,因为发送方在等待 ACK 时不能发送其他数据包,导致链路利用率低。

示例

  • 假设链路带宽为 1 Gbps,传播延迟为 15 ms,数据包大小为 8000 比特:
    • 发送方利用率(Utilization): $$ U_{\text{sender}} = \frac{L / R}{RTT + L / R} = \frac{8000 / 10^9}{30 \times 10^{-3} + 8000 / 10^9} \approx 0.00027 $$
    • 传输吞吐量(Throughput): $$ \text{Throughput} = \frac{8000 \text{ bits}}{30 \times 10^{-3} \text{ s}} = 266.67 \text{ kbps} $$
    • 在 1 Gbps 的链路上,这种协议的吞吐量仅为 266.67 kbps,链路利用率极低。

管道化协议(Pipelined Protocols)

为了提高链路利用率和传输效率,管道化协议允许发送方在等待接收方确认(ACK)的同时发送多个数据包。这种方式可以显著减少因等待确认而导致的链路空闲时间,从而提高整体的吞吐量。常见的管道化协议有两种:Go-Back-N(回退N步)Selective Repeat(选择性重传)

Go-Back-N(GBN)协议

GBN 协议通过滑动窗口机制实现管道化传输:

  • 发送方
    • 使用一个滑动窗口来管理未确认的数据包。
    • 窗口大小为 N,表示可以发送但未确认的数据包数量。
    • 如果超时未收到 ACK,将重新发送窗口中的所有数据包。
  • 接收方
    • 仅接收按顺序到达的数据包。
    • 对于乱序到达的数据包,接收方会丢弃并发送重复的 ACK。

示例

  • 假设窗口大小为 4,发送方发送了 4 个数据包(0, 1, 2, 3),但第 2 个数据包丢失。
  • 接收方会收到 0 和 1,发送 ACK1。
  • 第 3 和 4 个数据包乱序到达,接收方会丢弃并发送重复的 ACK1。
  • 发送方超时后,重新发送 2, 3, 4, 5 数据包。

选择性重传(Selective Repeat)协议

选择性重传协议通过单独确认每个数据包来提高效率:

  • 发送方
    • 使用一个滑动窗口来管理未确认的数据包。
    • 如果超时未收到 ACK,只重新发送未确认的数据包。
  • 接收方
    • 为每个正确接收的数据包单独发送 ACK。
    • 对于乱序到达的数据包,接收方会缓冲这些数据包,并在适当的时候按顺序交付。

示例

  • 假设窗口大小为 4,发送方发送了 4 个数据包(0, 1, 2, 3),但第 2 个数据包丢失。
  • 接收方会收到 0 和 1,发送 ACK0 和 ACK1。
  • 第 3 和 4 个数据包乱序到达,接收方会缓冲这些数据包,并发送 ACK3。
  • 发送方超时后,只重新发送第 2 个数据包。

© 2023 - 2025 壹壹贰捌· 0Days
共书写了265.7k字·共 93篇文章 京ICP备2023035941号-1