TCP协议是传输控制协议,是以=一个面向连接,在运用此协议进行数据传输的时候会进行连接工作 ,(三次握手)当传输完毕后,双方都会通知彼此释放连接(四次挥手)。
TCP标志位:
SYN (建立联机)
ACK (确认)
PUSH (传送)
FIN (结束)
RST (重置)
URG (紧急)
Sequence number (顺序号码)
Acknowledge number (确认号码)
图解TCP 三次握手与挥手:
三次握手过程:
第一次握手:
hsot1发送一个TCP标志位,SYN =1 的数据包 ,并随机产生一个 seq number 的数据包发送给host2, 当host2接收到这个数据后,host2根据SYN=1 可知客户端(host1)想要建立连接。
第二次握手:host2 要对客户端(host1)请求进行确认,向host1 发送 ack number=(host1的 seq number+1),ACK = 1,SYN=1 并随机产生一个seq number 的数据包,这样就告诉host1 可以进行连接。
第三次握手:
host1收到后会检查ack number 是否正确 ,即第一次发送的seq number+1 以及码 ACK =1 ,若正确host1会发送ACK=1和 ack number =(host2 的seq+1),若主机B 收到确认seq number 值与ack=1 则连接建立成功。
一个完整的三次握手就是 请求-----应答------再次确认
四次挥手的过程:
由于TCP 连接是全双功的,因此每一个方向都必须进行单独关闭,这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向上的连接。
第一次挥手:
当传输的数据到达数据的尾部的时候,host1 向host2 发送FIN=1 标志位,可以理解成host1 向host2说,我这边数据已经传输完成,准备断开连接。
第二次挥手:
因为TCP的连接需要从两边关闭,当host2收到host1发送的FIN=1 标志位后,host2不会立刻向host1发送FIN=1的请求关闭信息,而是向host1发送一个ACK应答信息,表示 :你请求关闭请求我已经收到,但我可能还有数据没有完成,你在等下,等待数据除传输完毕后就会告诉你。
第三次挥手:
当host2 数据传输完后,向host1发送FIN=1,host1收到请求关闭连接的请求后,host1 就明白host2数据已经传输完成,可以断开连接。
第四次挥手:
Host1收到FIN=1 ,hos1还是怕有与网络不稳定的原因,怕host2不知道自己要断开连接,于是向host2发送ACK=1 ,确认信息进行确认,把自己设置为TIME_WITE状态并启动定时器,如果host2没有收到ACK ,host2端的定时器到达后,会要求host1重新发送ACK,当host2收到ACK后就会断开连接,当host1等待2mls(两倍报文最大生存时间)后没有收到重传请求,就知道host2已收到ACK,所以host1此时关闭自己。
在TCP 连接的建立与释放的过程中,host1 与host2 并没有严格客户端与服务器端之分,谁先发起请求谁就是客户端。
本篇博文主要参考http://zhaochj.blog.51cto.com/368705/1317226 感谢,感谢 感谢。