TCP的三次握手与四次挥手

理解TCP的三次握手与四次挥手过程,先一定要明白几个字段的含义,分别如下:

  1. SYN:同步位。仅在连接过程置1,SYN=1即表示这是一个连接请求(接收)报文。
  2. ACK:确认位。TCP规定,在连接建立后发送报文的ACK字段置1。如:当主机A请求连接主机B时,那么主机A会首先会发送一个SYN=1,ACK=0的请求连接报文给主机B,如果主机B同意该连接请求,那么发送一个SYN=1,ACK=1的报文给主机A,表示A-->B的连接已建立。
  3. seq:序号字段。表示发送的报文数据的第一个字节的序号。
  4. ack:确认号字段。表示期望收到对方发送的下一个报文数据的第一个字节的序号。
  5. FIN:终止位。用来释放连接,在释放连接请求的报文中FIN=1,表示发送方的数据已经发送完毕。

 

三次握手:

第一次握手:客户机A请求与服务器B建立连接。客户机A的TCP向服务器B的TCP发送一个连接请求报文段,同步位SYN置1。

               (小A告诉小B:我请求你的连接)

第二次握手:服务器B响应客户机A的请求。服务器的TCP收到连接请求报文段后,如果同意连接就向客户机A发回确认,同步位SYN置1,确认位ACK置1,表示客户机A到服务器B方向的连接已经建立。

              (小B告诉小A:我收到并同意了你的连接请求,我请求你的接连)

第三次握手:客户机A向服务器B发回确认。当客户机A收到来自服务器B的确认报文段后,向服务器A发回确认,确认位ACK置1,表示服务器B到客户机A的连接已经建立,给该连接分配缓存和变量。此时A的TCP通知上层应用进程连接已经建立。

              (小A告诉小B:我收到并同意了你的连接请求,我们可以开始传送数据了)

在经历上面三次握手之后,客户机A与服务器B之间就可以开始传送数据了。

 

四次挥手:

第一次挥手:客户机A已经没有要发的数据,那么A的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP连接。A 把连接释放报文段首部的 FIN = 1表示这是一个释放连接的请求,其序号字段seq = u,等待 B 的确认。

          (小A对小B说:我的数据已经发完了,我请求释放连接)

第二次挥手:服务器B对于客户机A的释放连接请求发出确认,确认号为u+1。服务器B的TCP通知上层应用进程,A-->B的连接已释放,此时TCP处于半关闭状态。如果B向A发数据,那么A仍要接收。

          (小B对小A说:我已经收到了你的请求,知道你没有要发的数据了,断开了你的连接。)

第三次挥手:服务器B已经没有要发的数据,那么B的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP连接。B 把连接释放报文段首部的 FIN=1表示这是一个释放连接的请求,其确认号字段ack = u+1,等待 A 的确认。

          (小B对小A说:我也没有要发的数据了,我请求释放连接)

第四次挥手:客户机A收到服务器B的释放连接请求后,向B发回确认。

           (小A对小B说:我已经收到了你的请求,知道你没有要发的数据了,断开了你的连接。)

经历上次四次挥手,客户机A与服务器B之间的连接断开。

             

有关TCP连接管理的常见面试题:

Q1:简述TCP三次握手与四次挥手的过程。

答:见以上解释。

Q2:TCP的三次握手连接连接能不能简化成两次?

答:不能。按照两次握手的协定,主机机A向主机B发出连接请求,主机B向主机A发出确认报文段后认为连接已经建立。如果该确认报文在传输的过程中丢失,那么主机A将认为连接还未成功建立,忽略主机B发来的数据分组,一直等待主机B的确认报文分组。而主机B在发出数据分组超时后重复发送数据分组,就造成死锁。

Q3:为什么客户端在发送完最后一个确认报文段之后还要等待2MSL?

答:为了保证客户端A 发送的最后一个ACK报文段能够到达 B。其次,防止 “已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

Q4:为什么建立连接时握手是三次,而在关闭连接时是四次?

答:在连接关闭时,存在一个半关闭状态。当服务端B收到释放连接请求时,可能不会立即关闭socket,所以会给客户端A发送一个确认,告诉客户端A已经收到了释放连接请求报文。这时,A不可以给B发送数据,但是B给A发送数据A仍要接受,处于半关闭状态。当B的数据都发完了,发送释放连接请求报文给A,A给B发送一个确认,客户端和服务端处于CLOSED状态,所以是四次挥手。

另注:

TCP报文段组成如下所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值