WEB视频自适应 ssh命令 golang 莱斯分布 计算机网络 智慧树 ssl github jestjs gtk angularjs版本 vue前端框架 vue入门 vue响应式布局 pmp培训视频 前端项目实战 pyhton中异常和模块 kubernetes视频 python课程 python基础练习 python等待10秒 python插件 python循环10次 python安装程序 java时间 java表达式 java求阶乘 java命令 java列表 反转颜色 bz2解压命令 tomcat修改端口 ps蒙版抠图详细教程 js字符串比较 剑灵龙骨卷轴 allowtransparency python去重 pcmark10 OPPO投屏 perl正则表达式
当前位置: 首页 > 学习教程  > 编程语言

TCP的三次握手四次挥手

2020/12/28 18:39:10 文章标签:

TCP连接的三次握手 第一次握手 客户端发送一个带有SYN1,ACK0,seqx的报文此时和客户端进入SYN-SENT(SYN发送状态) 第二次握手 服务器接收到客户端带有SYN的数据包,服务器发出一个SYN1,ACK1,seqy,ackx1的确认包然后服务器进入SYN-RCVD(SYN包接…

TCP连接的三次握手

  • 第一次握手
    客户端发送一个带有SYN=1,ACK=0,seq=x的报文此时和客户端进入SYN-SENT(SYN发送状态)

  • 第二次握手
    服务器接收到客户端带有SYN的数据包,服务器发出一个SYN=1,ACK=1,seq=y,ack=x+1的确认包然后服务器进入SYN-RCVD(SYN包接收状态)

  • 第三次握手
    客户端收到服务器发来的确认包之后再给服务器发一个确认带有ACK=1,seq=x+1,ack=y+1的确认包此时客户端状态变为ESTAB-LISHED状态,服务器收到确认包之后也变为ESTAB-LISHED状态TCP连接建立完毕可以进行数据传送了
    TCP三次握手示意图如下:
    tcp三次握手
    补充问题:
    两次握手已经可以建立好连接了为什么还要进行第三次握手???

    现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,服务器和客户端之间的通信,如果客户端给服务器发送一个连接请求报文段,服务器收到了这个报文段,并发送了确认报文段。按照两次握手的协定,服务器认为连接已经成功地建立了,可以开始发送数据分组。但是客户端在服务器的应答报文段在传输中被丢失的情况下,将不知道服务器是否已准备好,不知道服务器建立什么样的序列号,客户端也无法确定服务器是否收到自己的连接请求报文段。在这种情况下,客户端认为连接还未建立成功,将忽略服务器发来的任何数据报文,只等待连接确认报文段。而服务器在发出的报文段超时后,重复发送同样的报文段这样就形成了死锁。

    三次握手建立连接时,发送方再次发送确认的必要性???
    为了防止收到无效的连接请求浪费服务器资源,如果当客户端在发送连接请求的时候请求发生了延迟 一直延迟到连接释放之后才到达服务器此时的连接请求已经是无效的没有意义的(因为连接已经释放之前请求延迟经过超时重传再次发送了请求完成了数据传输所以此时延迟的报文已经无效),服务器就会发送一个确认报文段如果不采用第三次握手此时连接就认为连接已经建立好了服务器就会一直等待客户端发送请求浪费了服务器资源。当采用了第三次握手时服务器发送确认报文之后客户端不会对确认报文做出应答第三次握手没有成功所以连接没有建立


TCP连接释放四次挥手

  • 第一次挥手
    客户端发送一个带有FIN=1 seq=u的报文段请求断开连接,此时客户端从ESTAB-LISHED状态转为FIN-WAIT-1状态

  • 第二次挥手
    服务器端发送一个ACK=1,ack=u+1,seq=v的确认报文段服务器从EATAB_LISHED状态进入CLOSE-WAIT状态,客户端收到报文段后进入FIN-WAIT-2状态

  • 第三次挥手
    服务器发送带有FIN=1,ACK=1,ack=u+1,seq=w的报文段请求关闭连接从CLOSE-WAIT状态进入LAST-ACK状态等待最后一个确认

  • 第四次挥手
    客户端发送最后一个带有ACK=1,ack=w+1,seq=u+1确认报文段客户端从FIN-WAIT-2状态进入TIME-WAIT状态 服务器段收到确认后关闭

TCP连接关闭示意图:
tcp连接释放四次挥手
为什么客户端要等待2MSL???
tcp连接必须经过2MSL之后才会真正释放掉因为当最后一次挥手如果出现了丢包的情况则服务器段接收不到最后一次关闭确认则服务器就不会关闭就会一直等待,当服务器段的等待时间超过超时重传等待时间就会再发一个报文段而此时客户端还在等待时间2MSL内所以客户端就可以再给服务器端发送确认报文段


本文链接: http://www.dtmao.cc/news_show_550058.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?