TCP的三次握手与四次挥手

简述

TCP/IP代表的是协议族,含有大量的协议在内。其中的TCP至关重要,客户端要与服务器交互数据,就必须先完成TCP的连接。那么TCP的是怎么连接的呢?

三次握手

客户端(浏览器)要与服务器进行通信,则必须先进行三次握手。

下面用一幅图简单的介绍一下TCP三次握手的过程:

简单理解为:这里的syn包用于建立连接,ACK包用于确认是否成功建立连接。

那为什么TCP连接一定要进行三次握手,两次不行吗???

三次握手的必要性

举个简单的生活例子:

小张和小李经常网上交友。

一天,小张在xxx网站上看到了小李的交友信息,于是小张兴高采烈地向小李发送了一句英文:“Nice to meet you,guy!”(如果此时小李不认识英文、认为小张是傻子、亦或是由于网络问题信息没有传达过去,第一次沟通失败)

小李正坐在屏幕前等待着有缘人。"噔噔",小李收到并惊疑地看着信息,歪果仁?小李小心翼翼的用着他很烂的英语水平回复:"Can you speak 中文?"(如果此时因为网络问题信息传达不过去,亦或是由于小张的个人问题没有及时回复邮件,第二次沟通失败)

小张看到消息后不由的乐了,立刻回复:“兄弟,你可真逗!”(如果此时因为网络问题消息传达不过去,第三次沟通失败)

小李接收到了消息,回复:"老兄,我的英语不太好,都是中国人,就说中国话!"于是,兄弟俩愉快的聊起了天来。(第三次沟通成功后,双方建立可靠的通信渠道)

通过上面这则例子,应该不难看出来三次握手的必要性。哪有人和你说一句话,你就把他当成真挚的朋友,总得多说几句话吧!

同样的,客户端(浏览器)与服务器要成功通信,则必须保证双方能建立可靠的通信渠道,三次握手的必要性不言而喻。

如果服务器在第二次握手后接受不到客户端的确认请求,那么服务器会在一段时间后自动释放资源(之前的请求过程当做垃圾扔掉~)。

三次握手后的信息交流

成功建立了联系当然就得开始交流了,下面是双方交流的过程:

这里就不再详细解释里面的东西,接着我们的四次握手~

四次握手==四次挥手

客户端与服务器不可能一直保持通信,(你总得关闭浏览器去干别的事,比如玩大型单机游戏?)。这里就有了四次握手,不过我觉得四次挥手更符合我们的日常行为(难道你临走前还得握握手表示一下你对别人的尊重?)。

一幅图说明过程:

简单理解为:fin包请求自身关闭连接,ACK包用于确认请求。

浏览器向服务器发送fin包的时候,已经处于半关闭状态(我很疲惫了,不太想聊天了~)。

服务器接收到fin包后立刻返回ACK包确认客户端的即将关闭状态。

之后,服务器发送fin包,告诉客户端我也要关闭了。

客户端接收到fin包后返回ACK包进行确认。

此后,两者关闭。

感觉客户端和服务器已经被我说成一对好基友了~~

关注不吃亏

图画的有点难看,不要介意

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180721G0RAXS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券