运输层是通信子网和资源子网的分界线,但其并不是通信子网和资源子网的一部分。运输层协议为 进程
之间提供了逻辑通信(即 端到端通信
),而网络层提供的是 主机
之间的逻辑通信(即 点到点通信
)。
运输层提供的功能有:
进程之间的逻辑通信
通过套接字实现复用和分用
对收到的报文(首部和数据部分)进行差错校验
提供面向连接的、可靠的 TCP 和 无连接的、不可靠的 UDP 服务
只有主机之间的通信才用到运输层协议,而转发网络(路由器和交换机)只需要用到下三层协议 |
运输层通过套接字来区分不同主机上的应用进程,通过端口号来区分同一主机上的不同应用进程。端口号长达 16 bit,其将主机上的端口划分如下:
熟知端口号 | 0~1023 |
登记端口号 | 0~1023 |
临时端口号 | 1024~49151 |
客户端使用的端口号又被称为 |
常用的应用端口为:
应用程序 | FTP | Telnet | SMTP | DNS | TFTP | HTTP | SNMP |
熟知端口号 | 20, 21 | 23 | 25 | 53 | 69 | 80 | 161 |
UDP
UDP 是无连接、不可靠的协议,其在 IP 之上只提供两个附加服务:多路复用和差错校验。UDP 适用于实时性强、不要求数据完整性、或者传输数据量少的情况。比如: TFTP, DNS, SNMP, RTP
UDP 具有以下优点:
无需建立连接
无连接,无需维护连接状态
分组首部开销小(只有 8B )
没有拥塞控制,网络中的拥塞不会影响主机的发送效率
UDP 是面向报文的,报文是 UDP 处理的最小单位。其对应用层交付的报文既不分割也不合并,在加入首部后就直接交付给 IP 层 |
UDP 首部为:
16 位源端口号 | 16位目的端口号 |
16位 UDP 长度 | 16位 UDP 校验和 |
数据(若有) |
UDP 长度字段代表
首部 + 数据
的总长度
若 UDP 发现报文中的目的端口号不正确,则直接丢弃该报文,并发送 ICMP :目标不可达
差错报文
UDP 校验和有两种特殊情况:
若校验失败,则可以丢弃报文或者是交付给上层,同时附加上错误报告 |
停等协议
对于停等协议而言,其动作如下:
发送方发送一个分组并等待 ACK, 超时重传。
发送的分组使用 \{0, 1} 对分组进行编号,若接收方接收到序号相同的分组,则丢弃。
停等协议相当于发送窗口和接收窗口均为 1 的滑动窗口。
GBN
回退 N 步( GBN (Go Back N)
)动作如下:
若接收方接受到有序分组则发送 ACK 进行确认,否则直接丢弃分组。
GBN 使用
累计确认
。发送方向接收方以流水线形式连续发送多个分组,分组的数量收发送窗口的大小制约
若发送方等待 ACK 超时,则重传超时分组以及之后的所有分组
GBN 相当于发送窗口为 n , 接受窗口为 1 的滑动窗口。
若采用 n bit 进行编号,则发送窗口的大小 \(W_t\) 应当满足: \(1\leq W_t\leq 2^n-1\)
当 \(W_t = 2^n-1\) 会如何呢?
这里设使用 3 bit 进行编号,设 \(W_t = 2^n = 8\) 。在发送端发送了 0~7 号共 8 个分组后,有两种情况:
所有分组都得到了确认,这时发送端会发送一组新的分组,序号循环使用,依然为 0~7
分组全部丢失,这时发送端要重新发送之前的分组,序号依然是 0~7
那么在两种情况下,接收端将无法判断新到达的分组是新分组还是重发的分组。
SR
选择重传( SR (Select Retransmission)
)。相比 GBN 而言,当分组丢失、失序的时候,将失序的分组进行缓存而不是直接丢弃,其缓存大小受接受窗口限制。
SR 具有以下特点:
接收方不再使用累计确认,对于接收到的、序号位于当前窗口之内和当前窗口之前的分组都发送 ACK 确认
发送方发送的所有分组都需要被确认,否则超时重传
若采用 n bit 进行编号,则发送窗口 \(W_T\) 和接受窗口 \(W_R\) 应满足 \(W_R + W_T \leq 2^n\) 。其中 \(W_R\leq \frac{1}{2} 2^n\)