运输层
重点知识
无连接的UDP(不可靠,支持单播、多播、广播)
面向连接的TCP(可靠,支持点对点单播,不支持多播、广播)
5.1 运输层协议概述
5.1.1 进程之间的通信
- 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
运输层的作用:
- 从IP层来说,通信的两端是两台主机。
- 从运输层的角度看,通信的真正端点并不是主机而是主机中的进程。(即:端到端的通信是应用进程之间的通信。)
5.1.2 运输层的两个主要协议
- 用户数据报协议 UDP(User Datagram Protocol)
- 传输控制协议TCP(Transmission Control Protocol)
5.1.3 运输层的端口
通过协议端口号(端口)解决:主机上可能有多个进程同时技能型通信,进程是动态创建和撤销的【在协议栈层间的抽象的协议端口是软件端口】
5.2 用户数据报协议UDP
5.2.1 UDP概述
复用和分用的功能
差错检测的功能
主要特点:
-
UDP是无连接的,发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。
-
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表。
-
UDP是面向报文的。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。UDP 一次交付一个完整的报文。
-
UDP 没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。很适合多媒体通信的要求。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信。
-
UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。
5.2.2 UDP的首部格式
用户数据报 UDP 有两个字段:数据字段和首部字段。
首部字段有 8 个字节,由 4 个字段组成,每个字段都是 2 个字节。
5.2.3 计算 UDP 检验和的例子
5.3 传输控制协议TCP
5.3.1 主要特点:
- TCP 是面向连接的运输层协议。
- 每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。
- TCP 提供可靠交付的服务。
- TCP 提供全双工通信。
- 面向字节流
5.3.2 TCP的连接
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字 (socket) 或插口。
套接字
s
o
c
k
e
t
=
(
I
P
地址
:
端口号
)
套接字 socket = (IP地址 : 端口号)
套接字socket=(IP地址:端口号)
举例:套接字 s o c k e t = ( 192.169.1.20 : 2028 ) 举例:套接字 socket = (192.169.1.20 : 2028) 举例:套接字socket=(192.169.1.20:2028)
T C P 连接 : : = s o c k e t 1 , s o c k e t 2 = ( I P 1 : p o r t 1 ) , ( I P 2 : p o r t 2 ) TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)} TCP连接::=socket1,socket2=(IP1:port1),(IP2:port2)
5.3.3 可靠传输的工作原理
理想的传输条件:
- 传输信道不产生差错。
- 不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
在这样的理想传输条件下,不需要采取任何措施就能够实现可靠传输。然而实际的网络都不具备以上两个理想条件。必须使用一些可靠传输协议,在不可靠的传输信道实现可靠传输。
停止等待协议
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
1. 无差错情况
2. 出现差错
在接收方 B 会出现两种情况:
- B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
- M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。
在这两种情况下,B 都不会发送任何信息。但A都必须重发分组,直到B正确接收为止,这样才能实现可靠通信。
3. 确认丢失和确认迟到
确认丢失:
- 若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内不能收到确认,但 A 并无法知道:是自己发送的分组出错、丢失了,或者 是 B 发送的确认丢失了。因此 A 在超时计时器到期后就要重传 M1。
- 假定 B 又收到了重传的分组 M1。这时 B 应采取两个行动:
- 第一,丢弃这个重复的分组 M1,不向上层交付。
- 第二,向 A 发送确认。不能认为已经发送过确认就不再发送,因为 A 之所以重传 M1 就表示 A 没有收到对 M1 的确认。
确认迟到:
- 传输过程中没有出现差错,但 B 对分组 M1 的确认迟到了。
- A 会收到重复的确认。对重复的确认的处理很简单:收下后就丢弃。
- B 仍然会收到重复的 M1,并且同样要丢弃重复的 M1,并重传确认分组。
4. 信道利用率
信道利用率 U = T D / ( T D + R T T + T A ) 信道利用率 U = T_D / (T_D+RTT+T_A) 信道利用率U=TD/(TD+RTT+TA)
连续ARQ协议
基本思想:
- 发送方一次可以发出多个分组。
- 使用滑动窗口协议控制发送方和接收方所能发送和接收的分组的数量和编号。
- 每收到一个确认,发送方就把发送窗口向前滑动。
- 接收方一般采用累积确认的方式。
- 采用**回退N(Go-Back-N)**方法进行重传。
5.3.4 TCP报文段的首部格式
MSS (Maximum Segment Size) 是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。所以,MSS是“TCP 报文段长度减去 TCP 首部长度”。
5.3.5 可靠传输的实现
以字节为单位的滑动窗口
超时重传时间的选择
RTO (Retransmission Time-Out) 应略大于上面得出的加权平均往返时间
R
T
T
S
RTT_S
RTTS
R
T
T
D
RTT_D
RTTD是 RTT 的偏差的加权平均值
R
T
O
=
R
T
T
S
+
4
×
R
T
T
D
RTO = RTT_S + 4×RTT_D
RTO=RTTS+4×RTTD
新的
R
T
T
D
=
(
1
−
b
)
×
(
旧的
R
T
T
D
)
+
b
×
1
/
2
×
R
T
T
S
−
新的
R
T
T
样本
×
1
/
2
新的 RTT_D = (1 - b )× (旧的RTT_D) + b × 1/2 ×RTT_S - 新的 RTT 样本 × 1/2
新的RTTD=(1−b)×(旧的RTTD)+b×1/2×RTTS−新的RTT样本×1/2