博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tcp的三次握手四次挥手
阅读量:6943 次
发布时间:2019-06-27

本文共 931 字,大约阅读时间需要 3 分钟。

hot3.png

三次握手

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

四次挥手

描述四次挥手就是:

1.A与B交谈结束之后,A要结束此次会话,对B说:我要关闭连接了(seq=u,FIN=1)。(第一次挥手,A进入FIN-WAIT-1)

2.B收到A的消息后说:确认,你要关闭连接了。(seq=v,ack=u+1,ACK=1)(第二次挥手,B进入CLOSE-WAIT)

3.A收到B的确认后,等了一段时间,因为B可能还有话要对他说。(此时A进入FIN-WAIT-2)

4.B说完了他要说的话(只是可能还有话说)之后,对A说,我要关闭连接了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次挥手) 5.A收到B要结束连接的消息后说:已收到你要关闭连接的消息。(seq=u+1,ack=w+1,ACK=1)(第四次挥手,然后A进入CLOSED) 6.B收到A的确认后,也进入CLOSED。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

输入图片说明

转载于:https://my.oschina.net/u/3421984/blog/1618261

你可能感兴趣的文章
【51CTO学院三周年】51cto见证我的成长
查看>>
DNS视图+主从服务器+apache服务器
查看>>
编码模拟Spring依赖注入原理
查看>>
使用后提交页面代码项目的文章
查看>>
Hive安装与配置
查看>>
端口出现err-disabled相关问题
查看>>
fundvaluation截图
查看>>
额外域控制器_安装之二_(Windows Server 2008 R2 SP1英文版)
查看>>
学习的知识
查看>>
【Cloud Foundry 应用开发大赛】todolist,日常管理应用
查看>>
MySql高级五--备份和恢复
查看>>
不止于小程序 APICloud推出react native纯翻译模式的UI引擎
查看>>
关于HDFS的Web界面Browse the filesystem 链接无法访问问题
查看>>
c++ 输入输出流
查看>>
Juniper EX2200几个常用vlan配置(创建,acl过滤,vlan间流量隔离)
查看>>
iPad启动图片分辨率
查看>>
Cisco交换机STP--解决广播风暴
查看>>
spawn-fcgi 指定php.ini文件位置
查看>>
通俗易懂理解JVM结构
查看>>
网站漏洞处理
查看>>