目录
7.滑动窗口机制(协商)的现象——下载速度先慢后快、然后又慢
一、tcp协议
tcp、udp协议,都是TCP/IP模型中传输层的协议

二、TCP协议中通信的消息类型
询问syn、回复ack、应答seq
三、准备阶段(三次握手)
准备阶段要干什么?
通信之前进行可靠性确认。类似于我说话你能听到吗,对方回复能听到问我能听到不,我说我也能。
有什么特点?
面相,即实时通信。就像连麦或面对面聊天一样,马上就回复而不是像微信聊天可以半天才回复一句
准备阶段的核心?
收到请回复,确认机制
(1)准备阶段的数据传输单位
数据单位是segment段,又叫报文,准备阶段只有报文头
应用层(http或者ftp之类的协议)封装进来的头信息
source port、desstination port:源、目标的端口
网络层(tcp协议)封装进来的头信息
seqence number:seq序列号【应答】
acknowledge number:ack序列号【回复】
header length:Resv、URG、ACK【回复消息类型,1代表为ack】、PSH、RST、SYN【询问消息类型,1代表是syn同步请求连接消息类型】、FIN【结束通信信号,finish的简称,1代表关闭连接消息类型】
window:窗口数
(2)三次握手的过程
1.第一次握手
a——>b
【询问:我说话能听到吗】发起同步请求连接消息:syn(1个随机生成的序列号,比如100)
2.第二次握手
a<——b
【回复:能听到】回复消息:ack(序列号100+1=101)
【询问:那你能听到我说话不呢】发起同步请求连接消息:syn(1个随机生成的序列号,比如200)
3.第三次握手
a——>b
【应答:好的,我知道你能听到了】应答消息:seq(101+1=102)
【回复:我也能听到你说话】回复消息:ack(200+1=201)
四、通信阶段
通信阶段的核心?
简单确认机制
(1)通信阶段的传输数据单位
数据单位是segment段,又叫报文,包含报文头、报文正文
1.报文头(附加信息)
应用层(http或者ftp之类的协议)封装进来的头信息
source port、desstination port:源、目标的端口
网络层(tcp协议)封装进来的头信息
seqence number:seq序列号【应答】
acknowledge number:ack序列号【回复】
header length:Resv、URG、ACK【回复消息类型,1代表为ack】、PSH、RST、SYN【询问消息类型,1代表是syn同步请求连接消息类型】、FIN【结束通信信号,finish的简称,1代表关闭连接消息类型】
window:窗口数
2.报文正文
(2)通信过程
1.简单确认
简单确认模式不使用滑动窗口,窗口为1。一次通信只发1个报文,然后简单确认1个报文
- 第1次确认
a——>b
- 【应答:好的,我知道三次握手成功可以发送报文了】seq(1个随机生成的序列号,比如100);
- 发送第1个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(序列号100+1=101)
- 第2次确认
a——>b
- 【应答:好的,我知道可以继续发了】seq(101+1=102)
- 发送第2个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(序列号102+1=103)
- 第3次确认
a——>b
- 【应答:好的,我知道可以继续发了】seq(103+1=104)
- 发送第2个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(序列号104+1=105)
- 第n次简单确认
2.滑动窗口机制确认
滑动窗口机制的优点?
实现一次发多个报文。比如我发一个8GB视频文件,特别大,而以太网传输单位1个数据帧最大才为1500Byte,一次只确认1个报文效率太低。开启滑动窗口,设置窗口数为n个,就可以一次确认n个报文
滑动窗口机制确认过程?
比如:开启滑动窗口,设置窗口数为5
- 第1次确认
a——>b
- 【应答:好的,我知道三次握手成功可以发送报文了】seq(100、101、102、103、104)
- 发送5个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(104+1=105)<——b
第2次确认
a——>b
- 【应答:好的,我知道可以继续发了】seq(105+1=106、107、108、109、110)
- 发送5个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(序列号110+1=111)
- 第3次确认
a——>b
- 【应答:好的,我知道可以继续发了】seq(111+1=112、113、114、115、116)
- 发送5个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(序列号116+1=117)
3.滑动窗口机制确认特点—协商
什么是协商?
每次确认前,都会协商窗口数n的大小
协商的过程?
- 第1次协商
尝试n=1
a——>b
- 【应答:好的,我知道三次握手成功可以发送报文了】seq(100)
- 发送1个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(100+1=101)
- 第2次协商(增加窗口数)
一次发1个报文没问题,就尝试n=5
a——>b
- 【应答:好的,我知道可以继续发了】seq(101、102、103、104、105)
- 发送5个报文
【回复:确认收到了,可以继续发】回复消息:ack(105+1=106)
- 第3次协商(发生丢包)
一次发5个报文没问题,就尝试n=10
a——>b
- 【应答:好的,我知道可以继续发了】seq(106+1=107、108、....、116)
- 发送10个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(本来应该是116+1=117,结果却是110+1=111),发生了丢包
- 第4次协商(减少窗口数)
一次发10个报文过多了,那就一次少发点。尝试n=8
a——>b
- 【应答:好的,我知道可以继续发了】seq(106=1=107、108、....、114)
- 发送8个报文
a<——b
【回复:确认收到了,可以继续发】回复消息:ack(114+1=115)
4.滑动窗口机制确认特点—重传(断点续传)
- 发送(出现丢包)
a——>b
- 【应答:好的,我知道可以继续发了】seq(101、102、103、104、105)
- 发送5个报文
- 要求重传(断点续传)
a<——b
- 只收到了101、102、104、105,发生了丢包
- 【回复:从103开始重新发(因为在102中断了)】回复消息:ack(102+1=103)
5.滑动窗口机制确认特点—缓存
比如协商发5个报文,a在发送前会先缓存这5报文。如果要求重传,就发送缓存
6.滑动窗口机制的现象—百度网盘限速
现象:比如,我是10M(兆)宽带,正常下载速度应该是1.2MB/s。我没开会员,用百度网盘下载速度为什么只有100/KB每秒,慢得很,开了会员就正常了,恢复到1.2MB/s
原因:没开会员时,滑动窗口数可能只有3个。开了会员,滑动窗口数就变成100了
7.滑动窗口机制(协商)的现象——下载速度先慢后快、然后又慢
现象和原因:
- 比如开了百度网盘会员,下载时先协商窗口数为5,发现没问题,然后再尝试窗口数为10,依次增大窗口数,速度越来越快
- 在到达临界值,再尝试更大的窗口数,此时速度到达巅峰,发现丢包了
- 于是重新协商减少窗口数,速度就又慢了
五、关闭连接阶段(四次挥手)
(1)发送者a(源)关闭连接
1.第一次挥手(a发起)
a——>b
- 【应答:好的,我知道你收到最后一个报文了】seq=(1个随机生成的序列号,100)
- 【结束通信信号:再见,不聊了】FIN(1)
- 【回复:我要关闭连接了】ack(1个随机生成的序列号,200)
2.第二次挥手
a<——b
- 【应答:好的,我知道你要关闭连接了】seq=(200)
- 【回复:那就不聊了再见,你关闭连接吧】ack(100+1=101)
(2)接收者b(目标)关闭连接
1.第三次挥手(b发起)
a<——b
- 【应答:好的,我知道a关闭连接了】seq=(1个随机生成的序列号,800)
- 【结束通信信号:再见,不聊了】FIN(1)
- 【回复:我也要关闭连接了】ack(101)
2.第四次挥手
a——>b
- 【应答:好的,我知道你也要关闭连接了】seq=(101)
- 【回复:那就不聊了再见,你也关闭连接吧】ack(800+1=801)
(3)拒绝服务
第二或第四次挥手,a或b一直不回复,就叫拒绝服务。对方先会一直等待,超过规定时间就会自动断开。
本文详细解析TCP协议的三次握手过程和通信阶段的滑动窗口机制,包括简单确认、重传和缓存策略。同时,介绍了TCP协议在关闭连接时的四次挥手操作,并探讨了百度网盘限速与滑动窗口的关系。
2208

被折叠的 条评论
为什么被折叠?



