当前位置:网站首页>TCP三次握手和四次挥手及拥塞控制
TCP三次握手和四次挥手及拥塞控制
2022-08-09 13:05:00 【zhouyongku】
TCP是网络层级中第四层:
物理层--->链路层(交换机)----->网络层(IP/路由器 三层交换机)---->传输层(tcp/udp)CP的主要特性对比:
udp是面向无链接的,不需要维护与目标对象的链接状态 不保证数据可靠.而TCP恰好相反.

TCP建立链接的过程:三次握手,断开链接的过程:四次挥手,保证网络传输质量:拥塞控制.
下面是TCP的协议格式

TCP三次握手:
目的:
1.握手是TCP保持链接的必要条件,有了握手才能保证数据完整性,才能实现传输质量控制.
2.三次握手是为了防止无效链接请求,如客户端发起请求,但是由于网络超时,客户端关闭了请求,此时服务端收到了请求,为客户端创建了链接,这种就是无效链接.
过程:

客户端主动退出的TCP四次挥手:
目的:
由于TCP是全双工,客户端和服务器均可以同时发送和接收数据,断开链接的时候为了确保客户端和服务器均完成数据发送和接收.
过程:

拥塞控制
目的:网络的带宽是有限的,不进行拥塞控制将会造成网络堵塞,同时无法保证数据发送和接收的可靠性和及时性.下图可以看到如果不进行拥塞控制,整个网络将会崩溃.

TCP进行拥塞控制的四种算法:
1.慢开始
2.快恢复
3.快重传
4.拥塞控制

慢开始
TCP维护了以下三个变量,以达到一开始向网络注入的报文少的目的.
swnd cwnd ssthresh
swnd:发送方窗口
cwnd:拥塞窗口
该值取决与网络拥塞程度,动态变化
只要网络没有发生拥塞,则该值减,发生拥塞 则该值增加,什么情况代表发生拥塞?当没有及时收到回传的报文.
慢开始ssthresh:门限
当cwnd<ssthresh:使用慢开始算法
当cwnd>ssthresh:改用拥塞避免算法
当cwnd=ssthresh:同时可以使用拥塞算法和慢开始算法
一旦出现超时重传,TCP 就会把慢开始门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd 设置成 1.
快重传
我们知道,一旦出现超时重传,TCP 就会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd 设置成 1. 但是快恢复算法不这样做。
一旦出现超时重传,或者收到第三个重复的 ack 时(快重传),TCP 会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd = ssthresh (在有些版本中,会让 cwnd = ssthresh + 3)。
之前的旧版本的算法是在 TCP 的 Tahoe 版本中,而改进的版本算法是在 TCP Reno 版本中。图 2 中演示了他们之间的区别。蓝色曲线是旧版本,而红色是新版本。
快恢复:

图2 TCP Reno 版本与 Tahoe 版本
一旦出现超时重传,或者收到第三个重复的 ack 时(快重传),TCP 会把慢启动门限 ssthresh 的值设置为 cwnd 值的一半,同时 cwnd = ssthresh (在有些版本中,会让 cwnd = ssthresh + 3)。
图 2 中,连续收到三个重复确认后,TCP Reno(红色)版本转入了拥塞阶段,而 TCP Tahoe 版本(蓝色)转入了慢启动阶段。
实际上,现代的 Linux 内核版本早已都不采用上面这些 TCP 版本了,而是使用使用的 TCP Cubic 版本。那为什么还要学呢?这就好比你想学会走,你就得先学会爬,简单的先弄会,以后再自学复杂的。
拥塞控制
在学习流量控制的时候,我们假设网络无限好,不拥塞。在学习拥塞控制的时候,我们又假设接收方缓冲区和接收窗口无限大,对数据来者不拒。现在,是时候综合考虑他们的时候了。
如何综合考虑这两者呢?实际上很简单,我们只要将接收方的窗口 rwnd 和拥塞窗口 cwnd 放在一起比较,取两者中的较小者,也就是:
发送方的窗口上限值=min{rwnd,cwnd}
上式指出:
rwnd < cwnd : 是接收方的接收能力限制了发送方窗口的最大值。
cwnd < rwnd : 是网络的拥塞限制了发送方窗口的最大值。
边栏推荐
- 5G 联通网管设计思路
- Unicom network management protocol block diagram
- 基于 R 语言的深度学习——简单回归案例
- 面试攻略系列(四)-- 你不知道的大厂面试
- Q_06_03 表达式
- [FPGA Tutorial Case 48] Image Case 8 - Realization of Converting RGB Image to HSV Image Based on FPGA, Assisted Verification by MATLAB
- JS动画函数封装
- Unity3d_API_GPS_LocationService
- Professor Chen Qiang the machine learning and R application course chapter 18 assignments
- uni-app - uview Swiper 轮播图组件点击跳转链接(点击后拿到 item 行数据, 取出数据做操作)
猜你喜欢

蓝桥历届真题-蛇形填数

Q_04_05 使用Qubits

现在40系显卡都快出来了,为何1060型号的显卡还有这么多人用?

面试攻略系列(三)-- 高级开发工程师面试问些啥?

快来扔鸡蛋。

缓存和数据库一致性问题

The sword refers to the offer, cuts the rope 2

error Trailing spaces not allowed no-trailing-spaces 9:14 error Unexpected trailing comma

问题系列-如何修改或更新localhost里的值

How to solve the 0x80070005 error when the computer is reinstalled and the system is restored
随机推荐
Ledong Fire Rescue Brigade was invited to carry out fire safety training for cadres
万物皆可柯里化的 Ramda.js
Microsoft 10/11 命令行打开系统设置页(WUAP,!WIN32)
offset、client、scroll、window.pageYOffset比较
周末看点回顾|我国IPv6网络全面建成;2022昇腾AI开发者创享日·南京站成功举办…
缓存和数据库一致性问题
Map mixed density function and quantile added line
uni-app - uview Swiper 轮播图组件点击跳转链接(点击后拿到 item 行数据, 取出数据做操作)
NC53 删除链表的倒数第n个节点
七夕力扣刷不停,343. 整数拆分(剑指 Offer 14- I. 剪绳子、剑指 Offer 14- II. 剪绳子 II)
现在40系显卡都快出来了,为何1060型号的显卡还有这么多人用?
Rmarkdown Tutorial
Q_04_04 Q#类型模型
NC7 买卖股票的最好时机(一)
GIN Bind mode to get parameters and form validation
昇腾AI开发者创享日南京站!一起CANN机器狗+AI机械臂实现硬核智慧救援!燃爆现场~
搭建大型分布式服务(二)搭建会员服务
glibc memory management model freeing C library memory cache
Q_06_02 类型模型
kustomize entry example and basic syntax instructions