Tcp协议细节(三次握手,四次握手)
利用滑动窗口实现流量控制(让发送方的发送速率不要太快,让接收方来得及接收)
(发送窗口的发送窗口不能超过接收方给出的接收窗口的数值)
拥塞控制
拥塞:在某段时间,对网络中某一资源的需求超过了该资源所能提供的可用部分
首先发送方维持一个叫做拥塞窗口cwnd的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态的变化,发送方让自的发送窗口等于拥塞窗口。如果考虑到接收方的接受能力,那么发送窗口还可能小于拥塞窗口。
发送方控制拥塞窗口的原则:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去,制药网络出现拥塞,拥塞窗口就减小一些,以减小注入到网络中的分组数。
几种解决拥塞控制的方法:慢开始,拥塞避免,快重传,快恢复
慢开始:
当主机开始发送数据时,如果立即把大量数据字节注入到网络中,可能引起网络的负荷情况,经验证明,较好的方式是先探测一下,由小到大逐渐增大发送窗口
举一个例子:
在一开始,发送方先设置cwnd=1,发送第一个报文段M1,接收方收到后确认M1。发送方收到对M1的确认后,把cwnd从1增大到2,于是发送方接着发送M2和M3两个报文段,接收方接收到后发回对M2和M3的确认。此时cwnd从2变化到4,然后发送M4到M7,以后每次都是呈倍数增长。
拥塞避免算法:
让拥塞窗口cwnd缓慢增大,每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,拥塞窗口cwnd是按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率慢很多。
快重传:
要求接收方每收到一个失序报文立即发送重复确认。以图为例:

解释:
1.当发送方发送M3给接收方,在传送过程中发生丢包,
2.发送方维持的拥塞窗口中的数据包还在传送,而每一次传送到接收方,接收方都发送一个重复确认M2给发送方
3.只要发送方接收到3个重复确认时,不用等到M3设置的超时重传计时器到期,就自动重传M3
快恢复:
1.当发送方连续接收到3个重复确认时,就执行“乘法减小”算法,把慢开始门限减小,为了预防网络发生拥塞,但接下去不执行慢开始算法
2.由于发送方现在认为网络很可能没有发生拥塞(如果网络发生了严重的拥塞,就不会一连有好几个报文段连续到达接收方,也就不会导致接收方连续发送重复确认),故与慢开始不同之处在于现在不执行满开始算法,而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢的线性增大
首先tcp的运输连接有3个阶段:连接建立,数据传送,连接释放
三次握手:
主要用于tcp的连接建立阶段,引用《计算机网络第6版》中的图加以说明:

首先,发起请求的一方成为客户端,故上图客户端是A,被动等待连接的一方是服务器端,故为B
分析三次握手过程:
- A首先向B发起请求,此时的SYN(同步,在连接建立时用来同步序号)。当SYN=1,而ACK=0,这是一个连接请求报文段,此时A设置一个随机序列号,向B发起请求
- B收到请求后,向A回复一个SYN=1,ACK=1(确认号为1),表示这是一个同意建立连接的报文段。此时ack必须为seq+1,同时也为自己设置一个seq=y,
- A收到B的确认后,向B发送一个ACK=1,并且将ack设置为y+1,seq(字节编号),Tcp的标准规定,ACK报文可以携带数据,但是如果不携带数据则不消耗序号。
为何A还要发送一次确认,主要是为了防止已经失效的链接请求报文段突然又传到了B,因而产生错误
TCP的连接释放:(4次握手)

- A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,A把连接释放报文段首部的终止控制位FIN置为1(FIN字段用来释放一个连接),其序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1
- b收到连接后,发出ACK=1,并ack=u+1,且设置自己的seq=v,此时的tcp处于半关闭状态,a收到确认后,进入等待状态,等待b发出的连接释放报文段
- 若b没有要向a发送的数据,其应用进程就通知TCP释放连接,这是b发出的连接释放报文段必须使FIN=1,并设置自己的seq=w,且b必须重复上次已发送过的确认号ack=u+1,并且设置ACK=1
- a收到b的连接释放报文段后,必须对此发出确认,在确认报文中把ACK置为1,确认号ack=w+1,而自己的序号是seq=u+1
为何A在time-wait状态必须等待2MSL的时间呢?
1,确保a发送的最后一个ack报文段能够到达b
2,防止之前提到的“已失效的连接请求报文段”出现在本连接中
Tcp协议细节(三次握手,四次握手)的更多相关文章
- python摸爬滚打之----tcp协议的三次握手四次挥手
TCP协议的三次握手, 四次挥手 三次握手过程 1, 服务器时刻准备接受客户端进程的连接请求, 此时服务器就进入了LISTEN(监听)状态; 2, 客户端进程然后向服务器发出连接请求报文, 之后客户端 ...
- TCP协议中三次握手
TCP/IP是互联网相关的各类协议族的总称 TCP/IP协议族分为:应用层,传输层,网络层,数据链路层 应用层:向用户提供应用服务时的通讯的活动 传输层:提供处于网络连接中的两台计算机之间的数据传输 ...
- 三报文握手 四报文握手 TCP运输连接管理
三报文握手 四报文握手 TCP运输连接管理
- 计算机网络-TCP之三次握手/四次握手
.概念 .特点 .背景知识补充 .三次握手 .四次握手 .其他补充 1.概念 TCP(Transmission Control Protocol,传输控制协议)是 在不可靠的IP层之上实现的可靠的数据 ...
- TCP协议的三次握手和四次挥手过程
TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...
- TCP协议的三次握手和四次挥手
暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...
- 网络编程——TCP协议的三次握手和四次挥手
三次握手原理解析 TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND ...
- TCP协议的三次握手和四次分手
HTTP连接 HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. ...
- 通俗大白话来理解TCP协议的三次握手和四次断开
from : https://blog.csdn.net/Neo233/article/details/72866230?locationNum=15&fps=1%20HTTP%E6%8F%A ...
- 通俗大白话来理解TCP协议的三次握手和四次分手
通俗理解: 但是为什么一定要进行三次握手来保证连接是双工的呢,一次不行么?两次不行么?我们举一个现实生活中两个人进行语言沟通的例子来模拟三次握手. 引用网上的一些通俗易懂的例子,虽然不太正确,后面会指 ...
随机推荐
- RocketMQ消费批拉超过32不生效
由于一些原因,我需要RocketMQ消费的时候,一批拉400条,一批处理400条.设置如下: 为了简单验证是否正确,消费如下: 直接通过打印msgs.size()观察情况即可. 现象 实验的topic ...
- ReSharper 自动选中
想让智能提示默认选中第一个,步骤:ReSharper->Options->如下图
- 前端使用crypto.js进行加密
前端使用crypto.js进行加密 https://www.cnblogs.com/lz2017/p/8046816.html 最近我在前端使用Cookies保存密码的时候需要前端来进行加密工作, ...
- Shiro的FormAuthenticationFilter登陆成功不跳转
http://jinnianshilongnian.iteye.com/blog/2024723 张开涛的这个配置信息有误,导致默认authc登陆成功后无法跳转 FormAuthenticationF ...
- UnityShaderVariant的一些探究心得
最近遇到了一个问题,角色在Unity编辑器里运行渲染结果都是好的,打包到IOS上却发现,角色身上渲染的很黑.花了些时间查了查,又试了试,把这方面算是初步弄清楚了. 先说出现问题的原因,由于我们把sha ...
- postgre索引
1.创建一般索引 单字段索引: CREATE INDEX index_name ON table_name (field1); 联合索引: CREATE INDEX index_name ON tab ...
- 修改GIT密码
修改GIT本地密码 控制面板->用户账户和家庭安全->凭证管理器->普通凭证:git:hhtp://*****
- xpath 选取指定文本内容可能是多种情况下的语法
url_list = select.xpath("//ul/li/a[contains(text(),'新闻中心' )]/../../li/a/@href | //ul/li/a[conta ...
- windowNoTitle 无效
在开发Dialog 时候如采用 Dialog Activity 方式可能会出现取消标题栏失效 以下针对两种情况说明 1.如果 extends AppCompatActivity 需要在setConte ...
- HTML5 关于一些本地操作 cookie,sessionStorage,localStorage
1,b/s 开发中经常会使用到 cookie,大部分情况下,都是由后端代码实现,那么 js 怎么实现对 cookie 的操作呢? <!DOCTYPE html> <html> ...