计算机网络TCP三次握手 四次挥手浅析

这几天复习计算机网络对TCP三次握手很迷惑,查了一大堆资料算是明白了缘由,就看成我第一篇博客的内容吧。web

首先TCP是面向链接的,三次握手是为了创建链接以便传输数据。面试

为何是三次握手呢?服务器

本质上是由于TCP的链接是双向的,而四次握手的中间两步又是能够合并的。网络

双向保证链接的四次握手svg

A 请求链接——> B A 请求链接——> B计算机网络

A <——确认收到 B A <——确认收到 请求链接 Bxml

A <——请求链接 B A 确认收到——> Bblog

A 确认收到——> B博客

三次握手的过程it

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序号的报文段。

备注

更新一个问题,看人家说面试里面的,为何请求报文只占1个序号?

答:此时链接未创建,没法传输数据,只能携带请求信息,也是消耗序号最少的报文,消耗序号1。