CN-TCP-2

TCP流量控制
接收方为TCP连接分配buffer
蓝色表示空出来的可以接受数据的
上层应用可能处理buffer中数据的速度较慢就会导致buffer溢出,淹没接收方。
所以这就是buffer control
所以怎么做流量控制?
Buffer中的可用空间(spare room)
= RcvWindow
= RcvBuffer - (LastByteRcvd - LastByteRead)
Reciever通过在Segment头部字段将RcvWindow告诉Sender
Sender限制自己已经发送的但是还没有收到ACK的数据不超过接收方的空闲RcvWindow尺寸
Receiver告知Sender RcvWindow = 0 , 会出现什么情况?
[!TIP]
会增加一个额外的处理,即使是Window = 0 ,仍然可以有很小一部分的数据可以进行传输
TCP的连接管理
面向连接的连接协议
TCP sender & reciever 会建立连接
初始化TCP变量
Seq #
Buffer 和流量控制信息
Client : 连接的发起者
创建一个套接字Socket,将Socket设置主机名和端口号
Server : 等待客户连接请求
接受客户机发起的请求并建立连接
“三次握手机制”
[!Step1]
Client host send TCP SYN (标志段) segment to server
- specifies initial seq #(选择自己的序列号并告诉服务器)
- no data (不携带任何数据)
[!Step2]
Server host recieves SYN , replies with SYN & ACK segment
服务器接收到服务器的标志段,用标志段确认段来作为回复
- server allocates buffers (为连接建立缓存)
- specifies server initial seq #(选择自己的初始的序列号并告知客户端)
[!Step3]
client receives SYNACK, replies with ACK segment, which may contain data.接收到标志段确认段,客户机发送ACK报文段同意连接
[!INFO]
如果在三次握手的第二步服务器分配资源,最后一次握手如果没有发过来,服务端会保留连接,一段时间没有收到ACK才会关闭连接
关闭连接
Closing a connection:
1 | // client closes socket |
[!Step1]
client向server发送TCP发送TCP FIN控制segment
[!Step2]
server收到FIN,回复ACK,关闭连接,发送FIN
[!Step3]
client收到FIN,回复ACK。
- 进入等待 —— 如果收到FIN,就会重新发送ACK
[!Step4]
server收到ACK,连接关闭
1 | graph TB |
同理可以给出服务端的生命周期图

- 标题: CN-TCP-2
- 作者: Molaters
- 创建于 : 2023-11-24 10:14:50
- 更新于 : 2023-10-12 17:07:09
- 链接: https://molaters.github.io/2023/11/24/计算机网络/CN-TCP-2/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。