计算机网络TCP三次握手 四次挥手浅析
这几天复习计算机网络对TCP三次握手很迷惑,查了一大堆资料算是明白了原因,就当作我第一篇博客的内容吧。
首先TCP是面向连接的,三次握手是为了建立连接以便传输数据。
为什么是三次握手呢?
本质上是因为TCP的连接是双向的,而四次握手的中间两步又是可以合并的。
双向保证连接的四次握手
A 请求连接——> B A 请求连接——> B
A <——确认收到 B A <——确认收到 请求连接 B
A <——请求连接 B A 确认收到——> B
A 确认收到——> B
三次握手的过程
TCP三次握手图解第一次握手:
SYN=1 seq=x.SYN=1,ACK=0.表示为请求连接报文,(这里ACK=0省略) seq表示主机A向主机B协商从序号为x发送数据报
这里需要注意的是,A向B的连接未建立无法传送数据,所以该请求报文消耗序号最小,消耗1个序号
第二次握手
SYN=1,ACK=1,seq=y,ack=x+1。
SYN=1,ACK=1表示同意建立A向B的连接,seq=y表示从序号为y的报文段开始发送,
ack=x+1表示已收到序号x的报文段,期望收到x+1序号的数据,即已收到序号x。第一次的请求报文消耗了1个序号
ack=x+1确认了第一次报文的收到,并请求B向A的连接
第三次握手
SYN=1,ACK=1,seq=x+1,ack=y+1 。
seq=x+1表示自己从序号x+1开始发送,期望收到主机B序号y+1的数据
第三次报文确认了前两次请求报文的收到。
四次握手的过程
四次挥手第一次挥手
FIN=1表示请求关闭A向B的连接 seq=u 已发送u-1序号的数据报
第二次挥手
ACK=1,同意关闭A向B的连接。seq=v,B向A发送的数据报序号为v。ack=u+1已收到u序号数据报
此时A向B方向的连接已经关闭,中间保持一段时间单向B向A连接。
第三次挥手
FIN=1 seq=w
FIN=1,请求关闭B向A连接。seq=w,从序号为w开始向A发送。
这里ack=u+1是因为前两次已经关闭了客户向服务器这个方向的链接。
第四次挥手
ACK=1,seq=u+1,ack=w+1。
ACK=1,同意关闭B向A连接。seq=u+1,因为A向B的连接已关闭,故这里是u+1。ack=w+1,已收到序号w的报文段,期望收到w+1序号的报文段。