| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP三次握手和四次挥手及拥塞控制 -> 正文阅读 |
|
[网络协议]TCP三次握手和四次挥手及拥塞控制 |
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 : 是接收方的接收能力限制了发送方窗口的最大值。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:54:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |