![在这里插入图片描述](https://img-blog.csdnimg.cn/20201023192350836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAzMzQzNg==,size_16,color_FFFFFF,t_70#pic_center)
传输层概述
多路复用和多路分用
什么是多路复用/分用?
为什么进行多路复用/分用?
How?
UDP
什么是UDP?
UDP段格式
UDP校验和
TCP
TCP报文段结构
可靠性数据传输
传输
- TCP发送方简化描述
- TCP接收方
快速重传机制
从TCP ACK生成来看,如果收到一个乱序的段,即中间有发送段丢失,那么接收方会发送重复的ACK
思考:为什么发送方等待3个冗余ACK
快速重传算法
流量控制
注意:流量控制要和后续的拥塞控制区分开。
Sender限制自己已经发送的但还未收到ACK的数据不超过接收方空闲RevWindow尺寸,即:
LastByteSent - LastByteAcked <= RevWindow
建立连接
- 为什么需要初始序列号?为什么需要三次握手?
-
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
-
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
关闭连接
- 为什么需要四次挥手?
因为TCP是一个全双工协议,必须单独拆除每一条信道。4次挥手的目的是终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方向的数据传输。
如果是三次挥手,会怎么样?三次的话,被动关闭端在收到FIN消息之后,需要同时回复ACK和Server端的FIN消息。如果Server端在该连接上面并没有Pending的消息要处理,那么是可以的,如果Server端还需要等待一段时间才可以关闭另外一个方向的连接,那么这样的三次挥手就不能满足条件。
小结1
TCP协议状态机
问题:
传输过程接收方是否需要发送自己的序列号?
拥塞控制
TCP拥塞控制
小结2
补充:
RTT:Round Trip Time,也就是一个数据包从发出去到回来的时间