计算机网络学习4—传输层
计算机网络学习笔记4-传输层
传输层
UDP
概述
- UDP(User Datagram Protocol, 用户数据报协议),面向无连接、不提供可靠性,即不保证数据能够到达目的地。
UDP首部
-
UDP长度:指UDP首部(
8个字节
)和UDP数据之和的数据长度。 -
UDP检验和:覆盖UDP首部和UDP数据,而IP的首部并不覆盖IP数据报中的数据。
图1 UDP首部 -
伪首部(UDP和TCP均含有伪首部)
- UDP数据报和TCP段都包含一个
12个字节长
的伪首部,它是为计算检验和而设置的。 - 伪首部包含IP首部一些字段。目的是让UDP两次检查数据是否已经正确到达目的地。
图2 UDP校验和计算过程中使用的各个字段
- UDP数据报和TCP段都包含一个
UDP应用方面
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时系统)
- 限定与LAN等特定网络中的应用通信
- 广播通信(广播、多播)
TCP
概述
-
TCP(Transmission control Protocol, 传输控制协议),提供一种面向连接的、可靠的、字节流服务。
- 面向连接:两个主机是哟个TCP的应用在交换数据之前必须先建立一个TCP连接。
- 可靠性传输:TCP有很多机制来尽可能的保证数不丢失
- 字节流:不区分ASCII字符和二进制,数据解释交给应用层。
TCP首部
-
控制位(Control Flags)
-
FIN
- 结束; 结束会话Finsh
-
SYN
- 同步; 表示开始会话请求Sequence
-
RST
- 重建连接Reset
-
PUSH
- 推送; 数据包立即发送Push
-
ACK
- 应答Acknowledgment
-
URG
- 紧急Urgent
-
ECE
- 显式拥塞提醒回应ECN-Echo
-
CWR
- 拥塞窗口减少Congestion Window Reduced
图3 TCP首部
-
建立连接(三次握手)
-
三次握手过程
-
Synchronization
: 同步;Sequence
: 序列;Acknowledgment
: 答复 -
step1: 客户端:
Seq=x
(SYN) -
step2: 服务端:
Seq=y, Ack=x+1
(SYN+ACK) -
step3: 客户端:
Seq=x+1, Ack=y+1
(连接建立)
-
图4 三次握手
-
三次握手原因
- 一个TCP连接是全双工的,即数据在两个方向上能同时传输数据,因此,建立连接的过程也就必须确认双方的收发能力是正常的。
- 防止已经过期的连接请求报文又突然传送到服务器,因为若采用两次握手,服务器无法通过SYN判断是迟到的报文还是新的连接请求。
- 此外,四次或是四次以上握手也可以,但是没有必要。
断开连接(四次挥手)
-
四次挥手过程
-
Finsh
: 结束;Sequence
: 序列;Acknowledgment
: 答复 -
step1: 客户端:
Seq=u
(FIN) -
step2: 服务端:
Ack=u+1
(ACK) -
step3: 服务端:
Seq=v
(FIN) -
step4: 客户端:
Ack=v+1
(ACK)
-
图5 四次挥手
-
四次挥手原因
- 确保数据能够完成传输,但关闭连接时,当收到对方的 FIN 报文通知时,它
仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭 SOCKET,也即你可能还需要发送一些数据给对方之后,再发送 FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的
- 确保数据能够完成传输,但关闭连接时,当收到对方的 FIN 报文通知时,它
TCP的流量控制机制
-
慢启动
- TCP开始发送设置拥塞窗口
cwnd=1
。 - 不要以开始就发送大量的数据,先探测一下网络的拥塞程度,也就是由小到大逐渐增加拥塞窗口的大小。
- 为防止cwnd增长过大引起网络拥塞,设置一个慢开始门限(
ssthresh状态变量
)- 当 ,使用慢开始算法
- 当 ,既可使用慢开始算法,也可以使用拥塞避免算法
- 当 ,使用拥塞避免算法
- TCP开始发送设置拥塞窗口
-
拥塞避免
- 在拥塞避免阶段将拥塞窗口控制为按照线性规律增长,使网络比较不容易出现拥塞。
- 使拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT九八发送方的拥塞控制窗口加1。
-
快速重传
- 要求接收方在收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认。
- 不需要等待设置的重传计时器到期,能尽早重传未被确认的报文段,能提高整个网络的吞吐量。
-
快速恢复
- 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把
ssthresh门限减半
。但是接下去并不执行慢开始算法。 - 考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将
cwnd 设置为 ssthresh
的大小,然后执行拥塞避免算法。
图6
- 当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把
UDP和TCP对比
- UDP和TCP特点对比
连接 | 可靠性 | 流量控制、拥塞控制 | 模式 | 系统资源 | 首部 | |
---|---|---|---|---|---|---|
UDP | 无 | 不可靠,丢包不会重发、顺序乱掉不会纠正 | 不使用 | 数据报 | 少 | 简单,开销少 |
TCP | 有 | 可靠,丢包会重新发送,顺序打乱会进行排序 | 使用 | 流 | 多 | 复杂,开销较大 |
-
UDP和TCP首部对比
图7