网络知识:TCP的三次握手,四次挥手

网络知识:TCP的三次握手,四次挥手

这里主要介绍下TCP的三次握手原理,需要了解几个标识:
SYN 请求连接
AKN 确认请求
FIN 释放连接

TCP的三次握手原理

第一次握手:
A向B请求连接,A将SYN=1和SEQ=j,发到B。注意,j是一个随机数。这一次握手的主要含义是在问,B你在不在?

第二次握手:
B接收到了A的请求后,根据他的SYN=1可知,是要请求连接。那么B就要回应A,告诉A,我接收到了你的请求,我们可以进行连接。那么此时,B就会将SYN=1,ACK=1,SEQ=i,ACK NUM=j+1,i为随机数发给A。

第三次握手:
A接收到了B的确认请求。从ACK=1和ACK NUM=j+1知道B收到了他它的请求,并且确认了两者可以建立连接。那么A会发送ACK=1和ACK NUM=i给B。然后两者连接建立。

整个建立连接的过程可以白话化:
A:B你在不在。
B:我在啊,A你在不在
A:我在的,我们建立连接把。

这个过程中,其实A相当于向B发送了2次请求,一是请求,二是确认。同样的B也向A发送了两次请求,但不一样的是B在确认的同时也向A发送了请求。这也就是为什么第二次握手中,B发送了ACK=1,SYN=1的原因。这就是为了确认A的连接请求,同时向A发出请求。

问题1:为什么是三次握手,而不是四次或者两次。
答:之所以不是四次,是因为第四次没有必要。因为B在接收到了A的请求后可以同时向A发出请求连接。那又为什么不是两次呢。这是因为TCP连接是全双工的连接,A和B之间的连接是双向的。可以从A到B,也可以从B到A。如果只有2次握手,那么只相当于A到B的连接建好了。但是B到A的连接并没有建立好。

TCP的四次挥手

TCP在释放连接的时候要进项4次挥手,其中的过程如下:

第一次挥手:
A告诉B,我数据传完了。这时,A会想B发送FIN=1的请求。我准备断开连接了。

第二次挥手:
B收到了A的请求后,根据FIN=1判断,A是向断开连接,但是B不会马上断开连接。因为有可能数据还未传输完毕。这个时候,B会向A发送ACK=1的应答信息。告诉A,好的,我收到了你的断开连接请求了。

第三次挥手:
B完成了数据传输后,这个时候就要告诉A,我接收完数据了,我们可以断开了。将FIN=1发送给A。这个时候,A收到了FIN=1的请求,那么它就知道了B已经完成了数据传输,我可以断开连接了。

第四次挥手:
A收到了FIN=1的断开连接请求,但是A怕网络原因,造成B不知道A要断开连接。所以这个时候A会发送ACK=1给B,让他知道自己已经确认了它的断开连接请求。这个时候A会进入TIME_WAIT状态。如果因为网络关系,B没有收到ACK=1,那么B的TCP的定时器到达后,会让A重新发送ACK=1确认。当B收到ACK=1后,B就会断开连接。而A在等待了2MLS(2倍的最大报文时间)还没收到重新发送ACK=1的请求,就知道B已经断开断开了连接。这时A也会断开连接。

白话化:
A:我没东西可以传给你了
B:知道了,你等会,我还么接收完。
B:好了,我接受完了,我也可以断开连接了。
A:好的,收到了。你断开吧。A在等待了2MLS后,知道B已经断开了,那么自己也断开。

问题2:为什么是四次握手?
答:和三次握手一样,TCP是全双工的连接。即A到B的连接要断开,B和A的连接也要断开。同时TCP是支持半关闭连接的。那么为什么A在没有数据要传输给B的时候为什么不直接断开连接呢。那是因为TCP的全双工特性,A发FIN=1给B,那只是告诉了B,我没东西可以传给你了。但是不代表B传给A的数据也没东西可以传输了。所以B在收到了A的FIN=1请求后,只会告诉A,好的,我收到了你的请求,即ACK=1。那么当B也没东西可以传输时,就会告诉A我也没东西可以给你了。即FIN=1发给A。这是A收到了B的FIN=1请求。那么A回应B,好的,我收到了你的FIN=1请求了,你可以断开连接了。即将ACK=1发送给B,此时A就会进入TIME-WAIT状态。B收到了ACK=1后,就会断开连接。如果B在发送了FIN=1给A后,因为网络原因,A发送给B的ACK=1确认消息没有发送到B那里。那么这是,B就会再次请求A发送ACK=1确认。那么当B收到了这个ACK=1确认后。B就会断开连接。而假如A发送的ACK=1请求确实被B收到了,那么B就会断开连接。A在等待了2MLS后也没有收到重发ACK=1请求。就知道B已经断开了连接。这是A也断开自己的连接。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值