第五章传输层
§5-1 传输层提供的服务
一. 传输层概述
1. 端口
(1).端口的作用
- 通过"端口号"标识本主机的一个特定进程。
- 注意: 每台主机的端口号是相互独立的。
- 注意: TCP、UDP 两种协议的端口号是相互独立的。
- Socket 套接字: TCP或UDP协议,通过 Socket 套接字 = {IP地址 : 端口号},唯一标识网络中的一台主机上的一个应用进程。
(2).端口号的分类
①. 服务器使用的端口号
- 熟知端口号 (0~1023): 通常只能用于被熟知的重要应用程序。
- 登记端口号 (1024~49151)。
②. 客户端使用的端口号
- 短暂端口号 (49152~65535)。
2. 传输层功能
实现端到端(进程到进程)的通信。
(1).复用和分用
①. 复用 (从上到下)
在发送数据的时候,同一台主机上的多个进程可以使用同一个传输层协议。
②. 分用 (从下到上)
在接收数据的时候,传输层可以把数据正确交付到目的进程。
(2).差错检测
-
TCP: 检测出差错后丢弃数据,并通知发送方重传。
-
UDP: 检测出错误后直接丢弃数据,且不通知发送方。
(3).向应用层提供两种服务
-
面向连接的、可靠的端到端传输服务 (TCP)
确保数据正确/完整,但开销大、实时性较差。
-
无连接的、不可靠的端到端传输服务 (UDP)
数据可能出错/丢失,但速度快、开销小。
§5-2 UDP
一.UDP数据报
二.UDP检验
1. 发送方的传输层
2. 接收方的传输层
§5-3 TCP
一.TCP报文段
二.TCP协议的三大阶段
-
建立连接 (三次握手)
-
数据传输
-
释放连接 (四次挥手)
每次建立TCP连接,可以传输多个报文(双向)TCP是面向字节流的(而UDP是面向报文的)。
无论传输多少个报文,在TCP协议看来都是一连串字节流
数据偏移是TCP首部的长度
三.TCP检验
原理与UDP雷同,计算检验和之前也需要添加12B伪首部(只需将UDP伪首部的协议字段的17改成6,UDP长度字段改成TCP长度)
- 建立TCP连接时,在握手①、握手②选项中协商MSS(Maximum Segment Size,最大段长)
- MSS的值表示在接下来的数据传输中,一个TCP报文段最多携带多少数据(首部不算在内)
- 通常MSS不会设置太大,以免在IP层被分片
四.TCP连接管理
1. 建立连接(三次握手)
握手①②不能携带数据,握手③可以携带数据;
握手①②固定消耗1个序号;
握手③如果不携带数据就不消耗序号;
-
建立连接阶段耗时分析
从发出握手①,到客户端进程可以发送数据,至少需要多久?------1RTT(往返时延)
从发出握手①,到服务器进程可以发送数据,至少需要多久?------1.5RTT(往返时延)
2. 释放连接(四次挥手)
挥手①、挥手③即使不携带数据,也要消耗一个序号
挥手①、②、③可以携带数据挥手④不可以携带数据
-
释放连接阶段耗时分析
补充1:客户进程收到挥手③后,立即进入TIME-WAIT状态,并启动"TIME-WAIT计时器",倒计时2MSL后才能进入CLOSE状态。(如果等待期间重复收到挥手③,就重置计时器)
补充2:MSL(MaximumSegment Lifetime,最长报文段寿命),是由TCP协议规定的一个固定时间长度。
补充3:如果服务器进程收到挥手①时,已经没有待传送数据,那么可以连续发出挥手②、挥手③
从客户发出挥手①,到客户进程进入CLOSE状态,至少需要多久? ------1RTT+2MSL
从客户发出挥手①,到服务器进程进程进入CLOSE状态,至少需要多久?一一1.5RTT
五.TCP可靠传输&流量控制
TCP传输的底层原理
捎带确认
(即使缓冲区没有满,只有有序,也可以交给应用层)
重点体会:超时重传机制
- 发出的报文段丢失
- 返回的ACK段丢失
快重传机制、立即确认机制(右图有问题,第一个ACK不能算作冗余ACK,需要再来一个ACK才会立即重传)
六.TCP拥塞控制
cwnd: 拥塞窗口
TCP拥塞控制、TCP流量控制的区别与联系
拥塞控制考题特点:
-
常与"流量控制"综合考察,此时需要考虑接收窗口大小
-
通常只涉及单向传输(TCP连接双方只有一方发送数据)
-
通常默认每个TCP报文段都以最大段长MSS满载数据
-
拥塞窗口的大小常以"MSS的倍数"作为单位
-
接收方收到一个报文段,会"立即确认",而不是"推迟确认"
注:为了聚焦拥塞控制,接下来的讨论中,假设接收方的接收窗口足够大,这样发送窗口大小就只受拥塞窗口限制
1. 慢开始算法-不拥塞
2. 拥塞避免算法-严重拥塞
(横轴单位RTT(往返时延))
(图中网络拥塞点是超时重传,不是冗余ACK)
注:新ssthresh = cwnd/2 = 12;cwnd = 1;注意:ssthresh不能小于2
3. 快重传机制(冗余ACK)快恢复算法-有点拥塞
(0-12和上图一样)
(图中网络拥塞点是冗余ACK)
收到冗余ACK后,和新ssthresh拥塞窗口都等于拥塞窗口当前一半(注意:ssthresh不能小于2)




























