关于前端:当高启强遇到陈书婷与TCP协议

2次阅读

共计 5961 个字符,预计需要花费 15 分钟才能阅读完成。

大家是否常常听他人提起 TCP 协定的三次握手和四次挥手呢?🤔是否看过很多相干的文章都没看懂或是没记住呢🤷‍?看过我上篇的小伙伴都应该晓得 TCP 协定 是属于传输层中的协定,没有看过的请移步这里👉
“老默我想吃鱼了”与五层网络模型。

TCP 协定 中的三次握手和四次挥手是计算机网络中最重要的知识点,也是咱们面试过程中常常问到的点。TCP 协定 (Transmission Control Protocol, 传输控制协议) 是解决牢靠传输的,保证数据的正确性,只有应用这个协定,那单方的数据永远不可能错乱,多个字或者少个字的状况。

TCP 收发数据流程

不晓得大家是否还记得强哥第一次见大嫂是什么场景?花衬衫?深绿色西装?别猜了,看张图片帮你回顾😂

没错,第一次见大嫂提了一斤橘子,当大嫂看到强哥衣着很是惊讶,齐全不想搭理,但有句话说的好,不看僧面看佛面,看在橘子面勉强跟你唠唠,画了一张简图:

TCP 收发数据流程也是如此,次要分为三个局部,首先是 建设连贯 ,咱们个别称为 三次握手 ,打完招呼之后就是闲事了,相互交换寒暄,咱们把这种相互交换称为 收发数据 ,咱们须要留神的是这里的收发数据并不像 HTTP 申请那样,由客户端发出请求,服务端再响应,这里既能够由客户端发送到服务端,服务端也能够发送到客户端,如果把强哥比作客户端,大嫂比作服务端,就是强哥能够找大嫂谈话,大嫂也能找强哥谈话。当交换结束后就 say goodbye,个别称为 四次挥手,至于为什么要握三次手、挥四次手前面会说,莫急!🤤

TCP 如何收发数据

自从强哥见了舒婷,便茶不思、饭不想、夜不能寐😶‍🌫️,懂的都懂,强哥是被舒婷谈吐气质深深折服了🤣,有一天,强哥筹备发微信试探性问问舒婷心田实在的想法,以下就是强哥编辑的内容:

当强哥编辑了这么一大坨内容之后,是如何跑到舒婷的手机中的呢?TCP 是通过 分段 的形式进行传输的,之所以 分段发送 是因为有时咱们发送的货色特地多,容易造成阻塞,分段还有一个益处就是如果遇到丢包,后续只须要从新发送丢包的段即可,画个简图:

如果发送数据量很小的时候,就不须要分段了,一次性就过来。当数据量很大的时候,就要用到分段了,它会将整个数据分成段,依照字节进行编号,而后取出第一段,加上 TCP 头(蓝色方块)开始发送,紧接着取出第二段,再加上 TCP 头开始发送,顺次类推,直到数据全副发完。

在 TCP 协定中,无论是发送方还是接管方,都能够被动给对方发送音讯,数据传输的过程中,难免会呈现数据报失落、程序错乱的状况,那么它是如何解决牢靠传输问题呢?TCP 协定规定:接管方收到数据报后,都要对数据报进行确认,用强哥和舒婷的例子来说,就是当强哥发了一大坨诗意的文字后,舒婷看到后回复一句:“好,我收到了,还有我不喜爱虚的,喜爱切实点的”,有句流行语叫“句句有回音,件件有着落”,就是这么个意思。但如果没有回应的话,那就表明数据出了问题,后续就须要从新发送了。

画个简图:

对照这个图,咱们再走一遍牢靠传输流程,当强哥将编写好的信息发送给舒婷时,如果数据量过大,就须要进行分段发送,取出第一段并携带 TCP 头造成数据报进行传输,这个 TCP 头部蕴含了很多的信息,其中就有seqACKack

  • seq:全称sequence,示意这次数据报序号,就是整个数据被分成段之后发送每一段的序号,有了它咱们就晓得这次是发送哪一段的数据报
  • ACK:示意这次数据数据报是一个确认数据报,只能取 0 或 1,相当于是个布尔值,为 0 时示意发送方收回的数据,为 1 时示意确认数据
  • ack:示意冀望下次收到的数据报序号

当强哥开始发送音讯时,TCP 头携带 seq=xACK=0,seq 示意的是数据报序号,因为咱们并不知道以后是发送第几个数据报片段,所以用 x 示意,ACK= 0 示意以后数据报还没有被接管方确认,当舒婷收到音讯后,回应一句,你写的诗我看了,此时 ACK 就变为 1,示意本人曾经收到音讯了,接管方曾经确认,ack=x+ 1 意思是数据报序号为 x 的我曾经收到了,下次麻烦给我发送序号为 x + 1 的数据报。然而如果发送方长时间没有收到数据报的确认(ACK=1),那就阐明这段数据报出问题了,后续会从新发送。

建设连贯(三次握手)

三次握手,想必大家都听过吧!为什么要三次呢?两次行不行?我感觉一次就行了,难不成想耍流氓?还有我怎么不晓得 TCP 还有手呢?接下来仍然用强哥和书婷的例子,让大家明确三次握手

遇到书婷之前,强哥从未谈过恋爱,也并不知道如何追女孩子,这不深夜分割了法医,通过我的仔细领导,最终向强哥举荐了这本《魔鬼搭讪学》

如果有掘友想征询感情问题,那就关注我吧!👉法医,教你们如何更快的离别,哈哈😂。

当强哥得悉舒婷喜爱切实点的,不喜爱虚的,强哥筹备用书信的形式表白本人的爱慕之情,以下是信的内容

而后强哥叫了一位美团小哥去送信,这一行为相当于 TCP 发动建设链接的申请,美团小哥走着走着迷路了,也不晓得走哪里去了,那强哥的信必定是送不到的,书婷天然也不可能有所回应,这一状况阐明 TCP 的数据报失落了,强哥长时间没有收到书婷的回应,阐明 ACK=0,此时强哥会从新写一封,持续叫一位靠谱的美团小哥送信,直到书婷有所回应,看来强哥也是一位专情的人🥰,心愿大家都做一个看待感情专一的人💐

通过一番折腾,这封信终于到了书婷的手中,这一过程咱们称为第一次握手,第一次握手后书婷晓得强哥具备发消息的能力,然而书婷并不知道强哥是否能够收音讯,这还得看送信人靠不靠谱,书婷分割了好评 100% 的饿了么小哥送信,书婷编辑了以下内容:

书婷让饿了么小哥送信的过程,咱们称为第二次握手,不负所望,饿了么小哥胜利将书信送到强哥手中,当强哥满心冲动、小心翼翼地关上信封,看到书婷写的信,整个心都要碎了,泪流满面😭,深夜,正当我写文章之际,强哥不停敲打房门,当我打开门之后,看到泪流满面的强哥,急忙询问,强哥擦了擦鼻涕跟我说:“第一次表白就被回绝了”,当我接过强哥手中的信,刺激说到:“女人心海底针,你没有被回绝,看,人家称你为小强,阐明你是打不死的小强”,强哥痛定思痛之后决定持续谋求书婷。🤔

强哥收到书婷的信之后,咱们称为第二次握手,此时晓得书婷能收到强哥寄的信了,同时也具备寄信的能力,然而舒婷还是不晓得强哥是否收到本人的信了,这时强哥回了一封信,并写道:“此生非你不娶!”,美团小哥平安将信送到书婷手中,书婷看了信之后心想:“这家伙还蛮有毅力的🤣”,当书婷胜利收到信之后,咱们称这次为第三次握手,此时书婷晓得了强哥也能够收到本人的信了,这时强哥和舒婷都晓得对方既有寄信的能力,又有收信的能力,示意通过三次握手的形式两人沟通渠道曾经建设胜利。接下来就是得心应手的发送音讯了。

画个简图:

咱们过一遍这个图,当发送的数据过大时,会被分成一段一段的数据报,每一段数据报头部都会有 TCP 头部,这外面蕴含了很多信息,其中就有上图中的SYN(Synchronize Sequence Numbers, 同步序列编号,是连贯建设的握手信号)seq(sequence,数据报序号)ACK(Acknowledge character,确认字符,只有 0 和 1)

每个链接都是从 CLOSED 状态开始的,当它执行一个被动关上连贯操作或者被动关上连贯操作,它就来到了 CLOSED 状态,当强哥开始寄第一封信的时候,链接从 CLOSED 状态进入 SYN-SENT 状态,TCP 头部携带SYN=1 示意我要跟书婷建设同步链接、seq=x示意这次发送的是序号为 x 的数据报、ACK=0示意还未被确认的数据报,将这三个同时发给书婷,书婷胜利收到信后,CLOSED状态敞开并进入 SYN-RCVD 状态,示意第一次握手胜利,此时书婷晓得强哥具备寄信的性能,但不晓得的是强哥是否有收信的性能,这时书婷开始回信,第二次握手产生了,书婷的信携带 TCP 头部的信息SYN=1 示意我要跟强哥建设同步链接,seq=y示意这次发送的是序号为 y 的数据报、ACK=1示意强哥的信被确认的数据报、ack=x+1示意序号为 x 的数据报曾经收到,麻烦下次给我发 x + 1 序号的数据报,当强哥胜利收到书婷的回信后,第二次握手胜利,强哥看了信悲痛欲绝、撕心裂肺、痛定思痛之后决定此生非书婷不娶,强哥此时曾经晓得书婷能够收到本人的信,然而书婷并不知道强哥曾经收到本人的信,所以强哥须要再次写封信通知书婷:“此生非你不娶”,这时第三次握手产生了,当书婷收到强哥的信后,书婷明确强哥是个专一的人,同时书婷也晓得强哥能够收到本人的信,此时书婷和强哥单方都具备寄信和收信的能力,这一刻两人的连贯就建设胜利了,连贯状态就变成ESTAB-LISHED,示意失常的传输状态,能够相互交换了。😘

连贯销毁(四次挥手)

三次握手咱们曾经晓得,那四次挥手又是什么呢?为什么握手须要三次?挥手却须要四次?难道是对我恋恋不舍?

通过几天的书信往来,书婷慢慢对强哥也有了好感,加上第一次见面时的情景历历在目,强哥也是喜爱陪孩子游玩的,其实男人除了心疼本人的老婆时有魅力,还有就是带孩子,与孩子一起游玩的时候,此时的他们少了父爱的光环,而变质成了一个活脱脱的孩子,像个孩子一样天真可恶。平时看上去不苟言笑的大男人,他们在当了父亲,陪伴孩子的时候,摘掉了社会发给他们的面具和假装,心就像白云一样柔软和洁净。我想这也是陈书婷喜爱强哥的一方面吧😎

这天安欣警官喊强哥一起吃猪脚面🍜,随后强哥修书一封通知书婷:“安警官约我吃面,不能给你写信了”,强哥是个负责任的男人,尽管他很想和安警官一起吃面,然而他必须征求书婷的批准,所以强哥会等到书婷的来信之后再做决定。

当强哥写信通知书婷:“安警官约我吃面,不能给你写信了”,这就是 第一次挥手 ,无论是强哥,还是书婷,都能够发动第一次挥手,咱们暂且称为 发送方 ,每一次申请都须要被确认才能够,所以当发送方发动第一次挥手时,发完并不会立即就挂,而是要等 接管方 的回应。

不一会功夫强哥收到了书婷的回信:“小强儿,我晓得了,然而我还有最初几句话想跟你说,所以你先别去,等我说完”,而后书婷单方面的写了一大堆寄给小强儿,当把所有的话说完后,书婷写了最初一封信:“我想说的曾经说完了,你去吧,等你忙完咱们再分割”

书婷收到了强哥的来信,随后回复:“小强儿,我晓得了,然而我还有最初几句话想跟你说,所以你先别去,等我说完”,这就是 第二次挥手 ,这里产生了两件事件,第一件就是确认收到了强哥来信,晓得强哥筹备出门和安警官吃面,不能持续写信了,第二个就是书婷还要说几句话,而后书婷持续巴拉巴拉说,等书婷说完之后写了最初一封信:“我想说的曾经说完了,你去吧,等你忙完咱们再分割”,这是 第三次挥手

强哥收到了书婷的来信:“我想说的曾经说完了,你去吧,等你忙完咱们再分割”,强哥也晓得书婷的话也说完了,然而舒婷也并不知道强哥是否收到,所以强哥仍然还须要进行回复:“好,我晓得了,我吃完面回来找你”

强哥最初回复“好,我晓得了,我吃完面回来找你”就是 第四次挥手,实现之后,连贯销毁

画一张简图:

接下来咱们具体的过一遍这个流程:

强哥和舒婷两人相聊甚欢,有一天,安警官约强哥一起吃猪脚面🍜,所以强哥写一封信:“安警官约我吃面,不能给你写信了”,这就是 第一次挥手 ,TCP 头部有一个非凡的信息FIN(finish,示意想完结了),当FIN=1 时,阐明这次的数据报筹备销毁连贯了,发送胜利后,强哥的状态从 ESTAB-LISHED 变为FIN-WAIT-1,示意强哥曾经说完话完结连贯了,看线条 1️⃣。

当书婷收到强哥的信之后,晓得强哥约了安警官一起吃饭,不能持续写信聊天了,此时书婷的状态从 ESTAB-LISHED 变为 CLOSE-WAIT,示意强哥曾经发动了敞开连贯。随后书婷写了一封信:“小强儿,你的信我收到了,我晓得你要进来吃饭了,但我还有最初几句话要说”,这时候ACK=1 示意收到强哥的信了,用于确认数据报,这是 第二次挥手 ,用线条 2️⃣示意,当强哥胜利收到书婷的信后,强哥的状态从FIN-WAIT-1 变为 FIN-WAIT-2,示意书婷批准强哥去吃面,也就是批准强哥开释连贯。因为 接管方 (书婷) 还没有发动断开连接申请,此时书婷仍然能够进行数据传输,图中绿色箭头示意书婷说最初的几句话。

书婷说完之后,写了最初一封信:“我想说的曾经说完了,你去吧,等你忙完咱们再分割”,这是 第三次挥手 ,TCP 头部蕴含了FIN=1,说明书婷说完了,筹备完结了,书婷的状态从CLOSE-WAIT 变为LAST-ACK,示意所有数据报都完结了,用线条 3️⃣示意

当强哥收到了书婷来信后,强哥也晓得了书婷的话也说完了,也筹备完结了,强哥也回复最初一封信:“好,那我出门了,等我回来再说”,TCP 头部的 ACK=1 示意确认收到书婷的数据报,这是第四次挥手,用线条 4️⃣示意

图中有个特地重要的点,就是状态 TIME-WAIT 示意期待所有数据报完结,右边还有一个 2MSLMSL 是 Maximum Segment Lifetime 英文的缩写,中文能够译为“报文最大生存工夫”,2MSL 相当于是数据一个来回的工夫,这里为什么要期待这个工夫呢?次要是因为发送数据报不可能每次都胜利,也有失败的时候,失败就须要从新发送,直到数据报被确认,这里假如第四次挥手线条 4️⃣失败,没有发送胜利,也没有期待 2MSL 工夫间接敞开进入 CLOSED 状态,这时候书婷会认为强哥没有收到本人的信,道路中失落了,那么会再次发送,然而强哥曾经处于 CLOSED 敞开状态了,这样会造成书婷不停的发送,但强哥始终确认不了,所以书婷的连贯没有方法开释,迟早奔溃了。

补充的点

这里给大家补充一个点,看到这里我想大家也都晓得数据包如果很大,会被分成一个个数据报片段进行传输,那么数据报片段在哪里组装成一个残缺的数据呢?有一个中央叫做 数据缓冲区

咱们持续用强哥和舒婷的例子,书婷无论是从谈吐、气质都是优良的女孩,那必定追求者不会少,强哥只是其中之一

画个简图:

这里书婷相当于服务器,而四位追求者相当于客户端,客户端和服务器每一次传输数据都会通过三次握手和四次挥手,数据报片段都会在数据缓冲区进行组装,每次通过四次挥手销毁连贯,也就是革除缓冲区开释空间,当咱们每次关上浏览器页面的时候,关上几个页面感觉不到卡,那你的关上 100 个页面试试,当然这跟电脑配置也有关系。

我想大家当初也应该明确,为什么要应用三次握手和四次挥手?现实状态始终连着不好吗?想申请数据随时申请,干嘛还要断开,次要还是因为缩小服务器的压力,只管三次握手和四次挥手会损耗一些工夫,然而用这些工夫换去服务器的空间是十分划算的。

最初

欲知后续如何?请听下回讲解,关注我不迷路👉法医,如果本篇文章对你有所帮忙,或者你有什么疑难,欢送在评论区留言,我个别看到都会回复的。大家点赞反对一下啊~🌸

正文完
 0