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

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

TCP的三次握手/四次挥手

建立TCP连接的三次握手

TCP连接的三次握手分别为:

  • 客户端发送一个带SYN标志的TCP报文到服务器,表示告诉服务器我想建立一个连接。
  • 服务器收到客户端的带SYN标志的文后,就给客户端回复一个带ACK标志和带SYN标志的报文,ACK表示回复客户端:OK,我准备好了建立连接;然后SYN表示服务器又问客户端:你准备好建立连接了么?
  • 然后客户端又要发送一个带ACK标志的TCP报文,回答服务器说:我准备好了。
    然后一个TCP连接就建立起来了。

SYN相当于询问的标志,ACK相当于回复的标志。

这里有一个问题:为什么最后客户端还要发送一次确认呢?这主要是防止已经失效了的请求报文段突然又传到了服务器,因而产生错误。
“已经失效了的请求报文段”大致是这样产生的:A发出第一个连接请求报文段并没有丢失,在一些网络结点上面长时间滞留,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到这个失效的报文段后,就误以为是A发出的又一次新的连接请求,于是就向A发出确认报文段,同意建立连接,如果不采用三次握手,那么只要B发出确认后,新的连接就建立了。

简化理解:

C问:我想和你建立连接可以吗?(SYN标志的报文)

S答问:可以啊!(ACK标志的响应报文)   那你现在准备好了吗?(SYN标志的报文) 

C答:准备好了! (ACK标志的响应报文)

三次: 客户端请求报文    服务端确认询问报文    客户端确认报文

 

 

 

 

释放TCP连接的四次挥手

由于TCP是全双工的,所以在释放TCP连接时,要双方都得单独关闭。意思就是服务器和客户端都要释放连接。原则是某一方主动关闭时,先发一个FIN报文来表示终止这个方向的连接,收到一个FIN报文就意味着这个方向不再有数据流动,但另一个方向仍可以有数据流动,当这一个方向也发送了FIN报文后,那么这一方的连接也可以关闭了。

释放TCP连接相对于要复杂点,具体释放TCP连接的四次挥手流程如下:

  • A发送一个FIN给B,说:我这边要传给你的数据已经传完了,我要关闭连接了。A进入FIN-WAIT-1状态,等待B确认。
  • B收到了上面的FIN报文后,回复一个ACK报文说:OK。A就关闭了A->B的连接。但是此时B还能给A发送数据,A也能接收B发来的数据。(此时A收到确认后进入FIN-WAIT-2状态。TCP处于半关闭状态)
  • 当B也发送完数据后,就给A发送一个FIN报文说:我这边要传给你的数据也已经传完了,我也要关闭连接了。(B进入LAST-ACK状态,等待A确认)
  • A收到了上面的报文后,回复一个ACK报文说:OK。A进入TIME-WAIT状态。现在TCP连接还没有释放掉,然后经过等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入CLOSE状态。

然后,当A撤销相应的传输控制块TCB后,一个TCP连接就关闭了。

简化理解:

C:我要关闭了,发送询问报文。然后开始等待。。。

S:收到。 然后C就关闭了C ----> S的连接。

S: 我要关闭了,发送询问报文。然后开始等待。。。

C:收到。然后S就关闭了S ---> C的连接。      TCP连接关闭。

      但TCP连接还没有释放掉,然后经过等待计时器(TIME-WAIT timer)设置的时间2MSL后,C才进入CLOSE状态。

 

 

转载自:http://www.jianshu.com/p/1f512687ea19

转载于:https://www.cnblogs.com/njqa/p/6419632.html

你可能感兴趣的文章
访问Access数据库(有多个数据库时 体现多态)
查看>>
Redis 常用命令
查看>>
CentOS 中安装和卸载 Emacs
查看>>
Java从小白到入门,Day3(程序流程控制)
查看>>
bzoj千题计划145:bzoj3262: 陌上花开
查看>>
bzoj千题计划225:bzoj2143: 飞飞侠
查看>>
卢卡斯定理
查看>>
音视频编解码技术的陷阱与出路,一个研发人员的思考
查看>>
flash 支持的html 标签
查看>>
python连接redis sentinel集群(哨兵模式)
查看>>
java学习_文件工具类
查看>>
SQL语句学习
查看>>
用B表更新A表
查看>>
Adobe Dreamweaver CS5 adobe acrobat x pro 序列号
查看>>
MySQL索引优化
查看>>
Ubuntu中useradd和adduser的区别
查看>>
@字王2012·龙爪体系列,共58款
查看>>
vscode开发c#
查看>>
Html5移动端页面自适应布局详解(rem布局)
查看>>
collections模块
查看>>