计算机网络---传输层
文章目录
- 1. 传输层提供的服务
- 1.1 要点概述
- 1.2 服务介绍
- 2. UDP
- 2.1 UDP数据报
- 2.2 UDP校验
- 3. TCP
- 3.1 TCP报文段
- 3.2 TCP连接管理
- 3.3 可靠传输 & 流量控制
- 3.4 拥塞控制
- 3.4.1 慢开始 & 拥塞避免
- 3.4.2 快重传 & 快恢复
1. 传输层提供的服务
1.1 要点概述
强调:
- 复用(从上到下):在发送数据的时候,同一台主机上的多个进程可以使用同一个传输层协议
- 分用(从下到上):在接收数据的时候,传输层可以把数据正确交付到目的进程
1.2 服务介绍
- 网络层实现了“主机到主机”的通信。网络层在IP数据报的首部,指明源IP地址、目的IP地址
- 传输层实现了“端到端”(进程到进程)的通信。传输层在TCP(或UDP)报文段的首部,指明源端口、目的端口
- 开发中只限制熟知端口号不被使用
2. UDP
2.1 UDP数据报
- UDP首部很小,只占8B
- UDP每次传输一个完整的报文,不支持报文自动拆分、重装
- UDP是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制
- UDP支持一对一(封装成单播IP数据报)、一对多传输(封装成广播/多播IP数据报)
简单对比TCP:
- TCP首部更大,占20~60B
- TCP支持报文自动拆分、重装,因此可以传输长报文
- TCP是有连接的、可靠的、支持拥塞控制
- TCP仅支持一对一传输(因为通信双方的传输层必须先建立连接)
- UDP首部长度固定为8B,数据是指携带的数据部分(也可以没有)
- UDP必须携带一个完整的报文,不支持报文的拆分和重组
- UDP校验和部分是校验整个UDP数据报(包含首部和数据部分)
- UDP没有明确指明首部大小的字段,但是却可以通过其他方式间接得出
对比IP数据报的格式:
- IP数据报首部部分最短为20B,最大为60B(可变部分0~40B)
- IP数据报首部长度字段只指首部长度的大小
- IP数据报首部校验和只校验首部
小结:
2.2 UDP校验
小结:
3. TCP
3.1 TCP报文段
强调:
- TCP并不强制要求每个TCP报文段都满载数据,只要不超过MSS就行
具体介绍:
强调:
- 序号 — — 序号字段的值指的是本报文段所发送的数据的第一个字节的序号(该序号表示的字节还没被接收)。 如:一报文段序号字段为301,而携带数据为100B,则本报文段数据的最后一个序号为400,那么下一个报文段的数据序号应从401开始,表示我现在发送的是从401开始的数据
- 确认号 — — 是期望收到对方下一个报文段的第一个数据字节的序号。 若确认号为N,则表明到序号N-1为止的所有数据都已正确收到
- 序号不一定从0开始
- 只有ACK=1时,确认号才有效
- 只有握手①的ACK=0,其他都是ACK=1
- 数据偏移 — — 反映的是首部长度大小。 偏移的含义是指:数据起始序号 - 报文起始序号(末 - 初)
- 可以类比快递,URG=1是卖方加急发送快递,快把这个快递发给驿站,PSH=1是驿站收到快递后,加急送到买方手中,然后买方马上确认快递收到(发送确认报文段)
- 紧急指针要搭配URG使用,只有URG=1,紧急指针才有效,表示的含义是本报文段中紧急数据共有多少字节。延伸:数据从第一个字节到紧急指针所指字节就是紧急数据,如下图
注意:(常考小题)
- 只有握手①、握手②的SYN=1,其他所有TCP报文段都是SYN=0
- 只有挥手①、挥手③的FIN=1,其他所有TCP报文段都是FIN=0
强调:
- 窗口的单位是字节
强调:
- 握手①、握手②中协商MSS
- MSS的值是指一个TCP报文段最多携带多少数据 (首部不算在内)
3.2 TCP连接管理
很重要的一个图:
强调:
- TCP全程中,只有握手①、握手②的SYN=1
- TCP全程中,只有握手①的ACK=0,其他均为ACK=1
- 握手①、握手②不能携带数据,但必须消耗一个序号,正如上图标注所示
- 握手③可以选择携带数据与否,携带则需消耗序号,不携带则不要
强调:
- 只有挥手①、挥手③的FIN=1
- 挥手①、挥手②、挥手③均可携带数据,但携带数据要消耗对应的序号
- 挥手①、挥手③不携带数据也得消耗一个序号,也就是说挥手①、挥手③必定会消耗一个序号
- 挥手④不可以携带数据
- 收到挥手③进入时间等待期,是为了防止挥手④在传输过程中丢失,如果丢失,则一定会在2MSL时间内再次收到挥手③,此时计时器需重置
小结:
3.3 可靠传输 & 流量控制
- (1)经过三次握手建立连接
- (2)发送方发送数据,接收方返回确认号等信息
- (3)发送方在发送缓冲区中移出已经确认收到的数据
注: 已经收到确认的信息就应及时移出发送缓冲区
- (1)发送方连续发出两个报文段,并被服务器收到后,经累计确认,只返回一个确认信息
- (2)再收到新数据,接收区满了,清空后,然后返回新接收窗口等确认信息
- (1)捎带确认
- (2)客户也可以捎带确认
- (3)不一定要缓冲区满了才交付数据
- (1)发送方发送数据中出错
- (2)发送方超时重传
- (1)服务器ACK丢失
- (2)发送方计时器超时,进行重发
- (1)引入快重传,假设623缺失
- (2)接收方连续收到3个冗余ACK后,进行重传
小结:
注意: 发送窗口“框住”的是发送缓冲区中,已发送但尚未收到确认的数据,以及可以发送但尚未发送的数据
3.4 拥塞控制
3.4.1 慢开始 & 拥塞避免
强调:
- 流量控制:控制端到端的数据发送量,是**“局部的”**
- 拥塞控制:控制整个网络中每台主机的数据发送量,降低路由器负载,是**“全局的”**
强调:
- 慢开始:每收到一个ACK,就让cwnd+1
- 拥塞避免:在一个RTT内,只能让cwnd+1
3.4.2 快重传 & 快恢复
强调:
- 快重传 — — 收到连续三个冗余ACK,就立即重传
- 快恢复 — — 发生快重传,将阈值、cwnd设为当前cwnd的一半,然后执行“拥塞避免”
至此,第五章就结束了,内容不是很多,重点就是TCP,理解后记忆的遗忘反倒成了难点。要弄清楚三次握手和四次挥手时TCP首部字段(如序号,ACK,确认号等)的变化,以及每次握手、挥手后接收方和发送方各会进入什么状态,掌握如何进行流量控制、可靠传输、拥塞避免,区分流量控制与拥塞避免的不同之处,这些很容易考小题。
参考:《王道计算机考研 计算机网络》
https://www.bilibili.com/video/BV19E411D78Q/?share_source=copy_web