今天回到家里已经是九点半了,然后磨磨蹭蹭洗个澡,洗澡的时候顺便听了会儿B站的视频关于蒋介石为什么会发动四一二反革命事件的起因和经过,然后躺上床= =,单人床,辗转反侧,不是很想动,不过重新想了想,还是起身吧= =!。
许个心愿,一年之内,见到刘超大神= =,交流交流心得。
另外,总感觉自己的笔记做的不够优秀,之前极客时间有看到刘超大神订阅的图像化笔记之类的专栏,还是得找个时间好好研究研究。不然,真的,感觉笔记就白做了。
晚上下班了,感觉思考了一天了,总感觉有些东西没有思考好,就理了理函数式状态机的基础实现,以及想了想如何写自己的笔记,自己才能更好地记住自己感觉已经掌握得体的知识。然后我感觉我找到了我的答案。就是通过动漫的方式!
OK,在整理完UDP的基础知识之后,我们来到了TCP知识的第一个篇章。如果说UDP是莽夫的话
。那么,TCP就是网络协议界的慎重勇者,
OK,就按照这个思路来展开TCP协议第一部分的归纳吧~
对于数据的传输,必须要确保”ready perfectly“(通过三次握手),和服务器建立好连接,才会前往打怪(开始传输数据)。
TCP包头的格式如下:
我想和你建立连接
,这是第一次握手。但是作为慎勇,我绝不能像the shy一样莽,发送了这条信息之后,我就认为连接已经建立了,然后直接传输数据给对方。OK,过一会我收到了来自于服务器的回复(第二次握手),里面包含了我的请求序号所对应的确认序号(请求信号+1),和对方的请求信号等信息,所代表的的意思是”OK,我家的床还挺大的,可以连接= =!“。收到这条信息之后,慎重的我还是不能认为连接已经建立了,那对面怎么知道我收到了他的信息呢?对面不知道我有没有收到他的信息的情况下,到底要不要建立连接呢?慎重的我绝对不能让这种事情发生。
于是我给服务器发送了回复(第三次握手),此时,对方确信我收到了他的回复,连接就此建立。此时,此时,虽然可以继续深入交流来确保连接的建立更加慎重,但是已经足够了,既然能通过三次握手,说明网络情况基本没有大的问题,更多的握手次数仅仅是浪费时间以及资源而已,并不能提高多少效能。
然后是基于TCP协议的数据传输,这个部分在下半部分进行归纳。
OK,传输完数据了(已经把怪物打死了),作为慎勇当然还需要反复鞭尸,把骨灰都扬了能才离开(四次挥手断开连接)。
那么怎么样关闭连接呢?当然依然还是数据请求方来请求关闭连接了。
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状态机,建议和前面的时序图一起看。