tcp三次握手四次挥手_TCP的三次握手四次挥手

现代大部分网络技术都是基于TCP协议的,而TCP的网络连接和断开,使用的是一种叫做三次握手四次挥手的方式(协议)进行的。下面,我们用情侣从表白到分手的过程来类比说明,什么是TCP的三次握手和四次挥手。

建立连接之三次握手


我们来看看情侣在谈恋爱之前,他们是如何确立关系的?

ea169c5ea9bb702750d6b541472d39c7.png

其实计算机之间通过TCP三次握手来建立连接,跟上面情侣建立关系的过程是十分相似的。

首先,客户端,发送一个请求段给服务端,等待服务端的响应。当这个段到达服务端时,服务端会先检查,请求的端口是否有相应的进程在监听,如果没有就会拒绝连接,如果有,就由该进程来判断是否接受这个连接请求,如果接受,就会发送一个确认段,当客户端收到确认段后,会再发送一个确认段给服务端,表示已经收到,正式建立连接,开始传输数据。

ef97fa70dde9b933a03c51a9f1b2f6ce.png

连接释放之四次挥手


上面的那对情侣,在一起交流了很多,觉得无话可说了,于是想断开两个人之间的关系,那他们应该如何断开呢?

假设先是男孩子提出的分手,“我要和你分手”,女孩回复道,“好的,我收到你要和我分手的消息了”。好像,这样就能断开两个人之间的关系了?两次挥手就成功了?当然不是,因为分手是两个人的事,如果只有一个人提出分手,另外一个还处于未分手状态,就会纠缠不清了。

54dd716ec9eb2d16fa8d67ef881c9efc.png

计算机TCP的连接释放也是相似的。为了释放一个连接,任何一方都可以发送一个设置了FIN标志位的TCP段,表示该方向已经没有数据要发送需要断开连接,当被另一方确认后,这个方向上的连接就被关闭,不再发送任何数据。然而,另外一个方向上或许还在继续着数据的传输,所以需要等待另一方也发送设置FIN标志位的TCP段,并被确认后,另一方向的连接也被关闭。当两个方向的连接都关闭后,才能算是彻底的断开连接。

4de89cf250d6a1298bb0ef4a407ab52a.png

实战


我们试试抓一下请求百度时的包,看看使用百度的时候是否有三次握手和四次挥手。

1.使用下面的命令去开启抓包。

sudo tcpdump -n -S -i en0 host www.baidu.com

2.用curl请求百度。

curl www.baidu.com

然后我们就能看到抓下来的包了。

0f1dea3ce2196c3549f4ab1b59bac0aa.png

这里主要关注几个点,IP、Flags(标志位)、seq(序号)和ack(确认号)。

首先,客户端请求连接百度时,发出请求段,SYN=1,seq=3142022249,百度收到后,回复客户端SYN=1,seq=3365013299,ack =3142022250,接着客户端也回复确认,ACK=1,ack=3365013300,连接建立完成,开始发送数据。

客户端和百度要断开连接时,客户端发送FIN=1,seq=3142022327,百度收到后回复ACK=1,ack=3142022328,于是断开客户端->服务端方向的连接,接着,百度向客户端发送FIN=1,seq=3365016001,客户端收到后回复ACK=1,ack=3365016002,于是断开服务端->客户端方向的连接,四次挥手结束。

最后


TCP的三次握手四次挥手,在实际开发中,用到的几率几乎为零。但这不代表我们不应该去了解和学习,因为越是基础的东西,它的影响力就越是潜移默化的。

好了,希望这篇文章对大家有用,如果觉得喜欢的话,欢迎收藏点赞在看转发,谢谢大家的支持?。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值