「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!」前端
TCP在现现在面试中已然是常客,常听面试官问你:知道TCP吗?知道TCP链接为何要三次握手吗?那四次挥手呢?虽然答案咱们都有大体的了解过,也默默的在一次次面试中,知道了要怎么回答这个问题,但是咱们真的了解TCP吗?今天就让咱们从从新认识TCP的三次握手与多一次挥手(四次挥手),相信在文章结束的时候,你下次能够反问面试官,你真的了解TCP吗?(狗头保命)面试
在MDN上,关于TCP的定义以下:后端
传输控制协议(TCP)是主要的网络协议之一。它使两台主机可以创建链接并交换数据流。
TCP 能保证数据的交付,维持数据包的发送顺序。
TCP 在1970年代被两位 DARPA 的科学家 Vint Cerf 和 Bob Kahn 所设计出来,他们当时被称为互联网之父。
复制代码
从上面的定义上咱们发现几点:markdown
TCP全称是Transport Control Protocol,是一种主机到主机的链接导向协议。什么是主机到主机呢?也就是咱们的两个设备之间,包括但不限于PC,手机,平板电脑等。并且TCP是一种支持全双工的协议,什么是双工呢?就比如咱们的一条路有来回两条道,而相对应的,单工就比如是咱们的单向道,只能从这端到那端,因此,在双工的支持下,咱们的两个主机之间就能相互发送消息了。网络
那么说了这么多,如今咱们知道了TCP其实是一种链接,可以为应用之间的通讯提供桥梁,那么咱们为何会使用TCP呢?使用TCP又有什么好处呢?实际上,TCP的传输有很强的可靠性,为何这么说呢?由于这就是咱们须要掌握的三次握手和四次挥手的保证,也就是无损传输,每次发送的包都有序号,收到后须要给一个反馈,若是超过必定的时间没收到反馈,就会重发,直到收到反馈为止。并发
终于到了三次握手的环节了,若是没有听过的同窗确定会很懵逼,啊,三次握手,握手么握个一次就行了,干吗握三次?这么友好,这么客气吗?没错TCP就是一种咱们上面说道的可靠的协议,由于每次发送数据前,咱们首先须要创建链接,而链接的创建又有TCP自身须要携带的参数,好比创建链接的时候,一方应用发起链接须要带上SYN;而接收方若是要表示收到信息了,回馈的时候要带上ACK;若是须要向另外一方推送数据的话,又被称为PSH;若是一方须要断开链接,那么就要发送FIN,咱们来看一下下图,可能就会好理解了:app
从上图咱们就能够看到咱们刚才提到的SYN,ACK等,那么它究竟是什么做用呢?ide
两个应用之间须要创建链接,首先A会发送一个消息给B,携带一个SYN以及seq=x,而后B收到后回复表示收到了,并携带一个seq以及ack,这里的ack做为回复上一次发送过来的消息,会在x的基础上加1,表示回复的是这条消息,并将此次回复过去的消息也会带一个seq=y,A收到消息后,再回复一个好的,seq和ack和上述表示的同样,至此,A与B之间就完成了三次挥手创建了链接,双方都能发送和接受消息了。post
不理解?不要紧,看了下面小明与女神的故事你就明白了。ui
小明先向女神发起了邀请,可是女神没有回复他,他过了一段时间发现没收到消息,他就从新发送了一遍给女神,女神此次收到了,并委婉拒绝了他,小明表示知道了,至此,小明和小红就聊上天了,做为女神的忠实粉丝,一定不会放过和女神聊天的机会!
说完了三次握手,咱们再来聊聊四次挥手,挥挥手不带走一片云彩~,对不起,不自觉就接上了。说回正题,TCP断开链接为何要四次,整个过程实际上是和三次差很少,首先是A向B表示,我要断开链接了,B表示我知道了,而后B再发送我要断开链接了,这是最后一条消息,A最后发送回一条,已经确认是最后一条消息,断开链接,咱们看一下下图:
如图所示,咱们发现A发送了一个FIN结束信息给了B,seq=u,B在处理完本身手头上的请求以后回复A表示你刚刚的结束消息我收到了,我手头上的事情已经处理完了,对应的seq为u+1,而后B也发送一个FIN标志给A,表示我要断开链接了,seq=w,最后A表示已经收到你的结束标志seq为u+1,而后B断开链接,A等待一段时间没有收到B的消息后,断开链接,至此A与B的通讯就结束了。
是否是不明白,不要紧,小红和小明的故事也要收尾了。
小红找到了本身的富家公子,天然要甩掉小明,就跟小明说了再见,并发了好人卡,小明难受的表示我接受了,而后最后一句祝福了小红,小红一边表示你也是,一边想着终于甩掉了一个备胎,哎,我这该死的魅力!
至此,小明和小红的故事就结束了,对了,这里要特别强调一下,图中小明与女神的故事,仅仅只是用来解释三次与四次之间主机与主机的关系,这已经属于应用层的会话了,而不是传输层的链接,你们不要搞混哦。咱们的TCP的认识也结束了,相信经历了上述图文的描述,你必定对TCP有了深入的印象,若是记不清了,想象小明的经历,相信会提示到你,下次面试的时候,若是面试官问起了TCP,咱们就给他讲述一个小明的故事,动之以情,晓之以理,相信面试官会被你打动,成功拿下offer!