TCP中三个函数与TCP三次握手的过程以及举例关系

三次握手 建立起 TCP连接 的 reliable分配初始序列号资源,在相互确认之后开始数据的传输有 主动打开(一般是client) 和 被动打开(一般是server)。

TCP使用3次握手建立一条连接该握手初始化了传輸可靠性以及数据顺序性必要的信息,这些信息包括两个方向的初始序列号确认号由初始序列号生成,使用3次握手是因为3次握手已经准備好了传输可靠性以及数据顺序性所必要的信息该握手的第3次实际上并不是需要单独传输的,完全可以和数据一起传输详细过程如下所示:

第一步,Client会进入SYN_SENT状态并发送Syn 消息给Server端,SYN标志位在此场景下被设置为1同时会带上Client这端分配好的Seq号,这个序列号是一个U32的整型数該数值的分配是根据时间产生的一个随机值,通常情况下每间隔4ms会加1除此之外还会带一个MSS,也就是最大报文段长度表示Tcp传往另一端的朂大数据块的长度。

第二步Server端在收到,Syn消息之后会进入SYN_RCVD状态,同时返回Ack消息给Client用来通知Client,Server端已经收到SYN消息并通过了确认这一步Server端包含两部分内容,一部分是回复Client的Syn消息其中ACK=1,Seq号设置为Client的Syn消息的Seq数值+1;另一部分是主动发送Sever端的Syn消息给ClientSeq号码是Server端上面对应的序列号,當然Syn标志位也会设置成1MSS表示的是Server这一端的最大数据块长度。

第三步Client在收到第二步消息之后,首先会将Client端的状态从SYN_SENT变换成ESTABLISHED,此时Client发消息给Server端这个方向的通道已经建立成功,Client可以发送消息给Server端了Server端也可以成功收到这些消息。其次Client端需要回复ACK消息给Server端,消息包含ACK状态被设置为1Seq号码被设置成Server端的序列号+1。(备注:这一步往往会与Client主动发起的数据消息合并到一起发送给Server端。)

第四步Server端在收到这个Ack消息之後,会进入ESTABLISHED状态到此时刻Server发向Client的通道连接建立成功,Server可以发送数据给ClientTCP的全双工连接建立完成。

图片来自网络侵权请告知,会及时删除

TCP的连接因为是全双工的也就是Client和Server两端,发送消息两个方向的连接都要建立成功如果要保证双向连接都成功的话,三次通信是最少的佽数了大于三次的话,后面的次数通信就没有必要了是在浪费资源。

二次的话会怎么样,可不可以呢答案是不可以,我们来看下下面的场景。

在谈论这个之前我们先要知道TCP是基于IP协议的,而IP协议是有路由的IP协议不能够保证先发送的数据先到达,这当中依赖于IP協议底层的网络质量以及Client与Server之间的路由跳数。

Client在发送完Syn消息1这里称作Syn1之后,假设因为网络原因Syn1并没有到达Server端,这个时候Client端已经超时Client之后重新发起SYN消息,这里称作Syn2结果由于网络原因Syn2先到答Server,Server于是与Client基于Syn2建立了连接结果没过多久Syn1又到达了Server,Server于是关掉了Syn2建立的那条连接,又重新建立了一条连接对于Client来说新建立的这条连接是早就过时的,所以Client不会在这条连接上发送任何数据这就导致了Server端长时间收不到數据,Client新的连接被断掉了

三次握手失败了会怎么样?


灰子做于二零一九年一月二十日

【原创作品,欢迎分享请勿转载,谢谢尊重!!】

  • 如果对网络工程基础不牢建议通读《细说OSI七层协议模型及OSI参考模型中的数据封装过程?》 下面就是TCP/IP...

  • 最近在恶补计算机网络方面的知識之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知最近看...

  • 网络知识点 OSI 开放式互联参考模型 七层协议 1物理層 解决:机器1向机器2发送比特流,机器2接收比特流 定...

  • 建立连接:理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗ロ?连接建立时各端分配一块缓...

我要回帖

更多关于 TCP三次握手的过程以及举例 的文章

 

随机推荐