参考文章:http://357742954.blog.51cto.com/368705/1317226

TCP(Transmission Control Protocol) 传输控制协议,是一个面向连接的协议。

  在运用此协议进行数据传输前都会进行连接的建立工作(三次握手)

  当数据传输完毕,连接的双方都会通知对方要释放此连接(四次挥手)

TCP标志位

tcp标志位有6种标识

  1.SYN(synchronous )建立联机

  2.ACK(acknowledgement)确认

  3.PSH(push)传送

  4.FIN(finsh)结束

  5.RST(reset)重置

  6.URG(urgent)紧急

图解TCP与UDP的三次握手与四次挥手过程

2.TCP/IP的三次握手与四次挥手-LMLPHP

三次握手过程:

  第一次握手:host1发送一个TCP标志位 SYN=1、ACK=0的数据包给host2,并随机会产生一个Sequence  number=1110,当host2接受到这个数据后,host2由SYN=1可知客户端是想要建立连接

  第二次握手:host2要对客户端的联机请求进行确认,向host1发送应答号ACK=1、SYN=1、确认号Acknowledge  number =1111,此值是host1的序列号+1,还会产生一个随机的序列号Sequence  number = 22222,这样就告诉host1可以进行连接;

  第三次握手:host1收到数据后检查Acknowledge  number 是否是1110 + 1的值,以及ACK的值是否为1,若为1,host1会发送ACK = 1、确认号码Acknowledge  number = 22222,告诉host2,你的请求连接被确认,连接可以建立

四次挥手过程:

  第一次挥手:当传输的数据到达尾部时,host1向host2发送FIN = 1标志位;可理解成,host1向host2说,我这边数据传送完成了,我准备断开连接了

  第二次挥手,因TCP的连接是全双工的双向连接,关闭也是要从两边关闭;当host2收到host1发来的FIN=1的标志位后,host2不会立刻向host1发送FIND=1的请求关闭信息,而是先向host1发送一个ACK=1的应答信息,表示:你请求关闭的请求我已经收到,但我可能还有数据没有完成传送,你再等下,等我数据传输完成了我就告诉你

  第三次挥手:host2数据传输完成,向host1发送FIN=1,host1收到请求关闭 连接的请求后,host1就明白host2的数据已经传输完成,现在可以断开连接了

  第四次挥手:host1收到FIN = 1后,host1还是怕由于网络不稳定的原因,怕host2不知道他要断开连接,于是向host2发送ACK = 1确认信息进行确认,把自己(host1)设置成TIME_WAIT的状态并启动2MSL定时器,如果host2没有收到ACK,host2端重传定时器触发,会重发FIN = 1,要求host1重新发送ACK,当host2收到ACK后,host2就断开连接;;当host1等待2MSL(2倍报文最大生存时间)后,仍然没有收到host2的重传请求,他就知道 host2已经收到了ACK,所以 host1此时才关闭连接,否则会重复上述过程,如果被动一方始终没能收到ACK,最终会超过最大重传次数,连接被关闭   这一点设计地很巧妙

2.TCP/IP的三次握手与四次挥手-LMLPHP

深入理解TCP连接的释放:

  由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意外着这一方向上没有数据流动,一个TCP连接在收到一个FIN仍然能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

  TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道

  简单来说是 “先关读,后关写”,一共需要四个阶段。以客户机发送关闭连接为例

  1.服务器读通道关闭

  2.客户机写通道关闭

  3.客户机读通道关闭

  4.服务器写通道关闭

04-29 02:40