趣谈网络协议笔记-二(第十一讲)

趣谈网络协议笔记-二(第十一讲)

TCP协议(上):因性恶而复杂,先恶后善反轻松


自勉

  1. 我似乎天性不擅长争斗,但是有些时候,我也必须砥砺前行。
  2. 强大是和平的前提,而善良不是。

前言

今天回到家里已经是九点半了,然后磨磨蹭蹭洗个澡,洗澡的时候顺便听了会儿B站的视频关于蒋介石为什么会发动四一二反革命事件的起因和经过,然后躺上床= =,单人床,辗转反侧,不是很想动,不过重新想了想,还是起身吧= =!。
许个心愿,一年之内,见到刘超大神= =,交流交流心得。
另外,总感觉自己的笔记做的不够优秀,之前极客时间有看到刘超大神订阅的图像化笔记之类的专栏,还是得找个时间好好研究研究。不然,真的,感觉笔记就白做了。
晚上下班了,感觉思考了一天了,总感觉有些东西没有思考好,就理了理函数式状态机的基础实现,以及想了想如何写自己的笔记,自己才能更好地记住自己感觉已经掌握得体的知识。然后我感觉我找到了我的答案。就是通过动漫的方式!
趣谈网络协议笔记-二(第十一讲)_第1张图片


OK,在整理完UDP的基础知识之后,我们来到了TCP知识的第一个篇章。如果说UDP是莽夫的话趣谈网络协议笔记-二(第十一讲)_第2张图片
。那么,TCP就是网络协议界的慎重勇者,
趣谈网络协议笔记-二(第十一讲)_第3张图片

OK,就按照这个思路来展开TCP协议第一部分的归纳吧~
对于数据的传输,必须要确保”ready perfectly“(通过三次握手),和服务器建立好连接,才会前往打怪(开始传输数据)。
TCP包头的格式如下:
趣谈网络协议笔记-二(第十一讲)_第4张图片

  • 三次握手:
    首先,我一定会发送一个请求到目标端口来表示我想和你建立连接,这是第一次握手。但是作为慎勇,我绝不能像the shy一样莽,发送了这条信息之后,我就认为连接已经建立了,然后直接传输数据给对方。
    与此同时我开始计时,如果一段时间内没有收到对方没有给我回复,我就重新发送请求,毕竟一路上诸多坎坷,数据丢失也很正常。但是如果到了我设置的超时时间,对方依然没有给我回复,那我就不用继续传输数据了,就是浪费时间了。
    趣谈网络协议笔记-二(第十一讲)_第5张图片

OK,过一会我收到了来自于服务器的回复(第二次握手),里面包含了我的请求序号所对应的确认序号(请求信号+1),和对方的请求信号等信息,所代表的的意思是”OK,我家的床还挺大的,可以连接= =!“。收到这条信息之后,慎重的我还是不能认为连接已经建立了,那对面怎么知道我收到了他的信息呢?对面不知道我有没有收到他的信息的情况下,到底要不要建立连接呢?慎重的我绝对不能让这种事情发生。

于是我给服务器发送了回复(第三次握手),此时,对方确信我收到了他的回复,连接就此建立。此时,此时,虽然可以继续深入交流来确保连接的建立更加慎重,但是已经足够了,既然能通过三次握手,说明网络情况基本没有大的问题,更多的握手次数仅仅是浪费时间以及资源而已,并不能提高多少效能。

然后是基于TCP协议的数据传输,这个部分在下半部分进行归纳。

OK,传输完数据了(已经把怪物打死了),作为慎勇当然还需要反复鞭尸,把骨灰都扬了能才离开(四次挥手断开连接)。
趣谈网络协议笔记-二(第十一讲)_第6张图片

那么怎么样关闭连接呢?当然依然还是数据请求方来请求关闭连接了。
OK,客户端发送一条关闭连接的请求”通话结束了,拜拜!“给服务器。
服务器接收到了这条信息,但是需要一些时间来关闭连接,那就先发送一条信息告诉客户端,让客户端先hold住,不要着急。
此时B可以直接跑路,不再响应A的任何请求,那么此时A会在一直重复发送数据超过MSL(max segment lifetime)后,认为B私自跑路了,就直接发送RST给B,让B知道自己不再管B了。
过一会后,B准备好关闭连接之后发送给A“OK,连接我已经关闭了,你可以安息了”,此时A也可以直接跑路,B也会按照之前A跑路的策略来采取默认方式。A在收到回复时候,关闭连接,同时回复信息给B“OK,我已经关闭连接了”,B在收到A的回复之后正式关闭连接。

TCP状态机,建议和前面的时序图一起看。

你可能感兴趣的:(趣谈网络协议)