这几天复习计算机网络对TCP三次握手很迷惑,查了一大堆资料算是明白了缘由,就看成我第一篇博客的内容吧。web
首先TCP是面向链接的,三次握手是为了创建链接以便传输数据。面试
为何是三次握手呢?服务器
本质上是由于TCP的链接是双向的,而四次握手的中间两步又是能够合并的。网络
双向保证链接的四次握手svg
A 请求链接——> B A 请求链接——> B计算机网络
A <——确认收到 B A <——确认收到 请求链接 Bxml
A <——请求链接 B A 确认收到——> Bblog
A 确认收到——> B博客
三次握手的过程it
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序号的报文段。
更新一个问题,看人家说面试里面的,为何请求报文只占1个序号?
答:此时链接未创建,没法传输数据,只能携带请求信息,也是消耗序号最少的报文,消耗序号1。