先对几个包进行概述
SYN包:看是否能建立连接
SYN-ACK包:如果服务器同意连接会发送SYN-ACK包
ACK包:客户端收到服务器的回复会发送ACK包
三次握手机制:
第一次:客户端尝试与服务器端建立连接,发送SYN=1包,同时选择一个随机数seq=x作为初始序列号
第二次:服务器端收到客户端的SYN包,如果同意连接,向客户端发送SYN-ACK包,确认号为ack = x+1,同时选择一个随机数seq = q作为初始序列号
第三次:客户端收到服务器端的确认后,发送一个确认报文ACK = 1,完成三次握手
总结:总共发送了三包数据SYN SYN-ACK ACK
为了防止已经失效的请求报文再次发送到服务器端引起错误
两次握手出现的问题:
在三次握手下,客户端收不到ACK包,自然不会认为连接成功
TCP协议为每个连接建立一个缓冲区,建立连接后的第一个字节的序列号为0,后面的每个序列号会+1,在发送数据时,从缓冲区取一部分数据组成发送报文,在TCP协议头中会附带序列号和长度,在接收端收到数据后,需要回复确认收到,确认报文中的ACK=序列号+长度 = 下一包传送的起始位置,这样一问一答的发送方式能够使发送端的数据已被对方收到,发送端也可以发送多包数据,接收端只需要回复一次ACK就可以.
这样发送端可以把待发送的数据分割成一系列碎片,发送到对端,对端根据序列号和长度在接收后重构出来完整的数据,假设其中丢失了某些数据包,就要进行重传
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQdqZpmH-1654937133689)(C:\Users\小刘同学\AppData\Roaming\Typora\typora-user-images\image-20220611160850145.png)]
发送报文:序列号长度+数据内容
回复确认:ACK = 序列号长度 + 长度 = 下一包起始序列号
四次挥手过程描述:
这是为了保证对方已收到ACK包,因为假设客户端发送完最后一包就释放了连接,一旦ACK包在网络中丢失,服务器端一直等待停留在最后确认状态,就无法正常断开连接。如果等待一段时间后,服务器端重发FIN,客户端会响应FIN包,重发ACK包,并刷新超时时间,和三次握手一样,保证不可靠的网络连接中进行可靠的连接
拥塞概念:在某段时间,对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏
问题描述:如果出现拥塞不进行控制,整个网络的吞吐量将随输入负荷的增大而下降
在理想状态下,达到吞吐量饱和之前,网络吞吐量应等于输入负载,超过某一限度时,吞吐量达到饱和
实际上,随着输入负载的增大,吞吐量进入轻度拥塞,当输入负载到达某一状态时,吞吐量和输入负载成反比,到达一定程度,出现死锁.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jHx3hX5v-1654937133690)(C:\Users\小刘同学\AppData\Roaming\Typora\typora-user-images\image-20220609154705198.png)]
假定如下条件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUNRV2Su-1654937133690)(C:\Users\小刘同学\AppData\Roaming\Typora\typora-user-images\image-20220609160103344.png)]
双发维护一个拥塞窗口CWND,
维护原则:网络中没有阻塞时,拥塞窗口尽可能大一些,网路中有阻塞时,拥塞窗口尽可能小一些