本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws
一.写在前面
昨天晚上读完《图解TCP/IP》后就想,应该和TCP/IP协议簇的理论和通信过程做个了断,给自己写一篇读书笔记吧,坐到电脑面前,又深感无力,因为我深知自己没有能力用一篇简短的笔记,来描述图解TCP/IP讲了什么。那我只能就 【第一次阅读图解TCP/IP】 给我带来了什么来做一次笔记,当然希望将来能抽出时间,阅读第二遍。和《TCP/IP详解》相比,实在的说,去年根本看不懂详解,根本看不懂....,但是图解这本书,对于有一定网络基础的人来说,看了真的会感到豁然开朗。就像学C#的时候,读一读CLR的感觉。
比如从前写socket的时候,开始我想象不到socket是一个什么样的概念,也不明白为什么说它是抽象层。我也不能彻底理解,websocket和socket的区别,两个层面的东西嘛。我也曾不能理解,http报文如何通过并利用TCP/IP协议簇的一系列协议从上游到下游,即使在阅读了《图解HTTP》后,很多内容也是非常疑惑的。甚至连在学校学的数电模电传递高低电压,也没能被我联想到物理层上。
在读书的过程中,自己会挑一些印象深刻的,和对自己比较重要的部分截图到有道云笔记,每次再翻开书的时候,先把之前的截图笔记撸两眼。
二.什么是协议?如何通信?
协议就是这P那P的Protocol,无论是OSI七层模型还是TCP/IP四层模型,上下层之间的交互所遵循的约定叫做【接口】,同一层之间所遵循的约定叫做【协议】,所以你可以说TCP是传输层协议,HTTP是网络层协议,你使用Socket 一套API调用TCP进行通信叫做调用API接口,还有我们最常见的Web请求,使用的叫做Http【协议】,为什么不叫做Http【接口】,因为其通信属于在应用层到应用层,使用的叫做,各自通过【接口】逐层处理报文数据->TCP数据段->IP数据包->链路数据帧->物理比特位,在流经各层接口时,附带上该层的首部,以便在到达目标时,再由各层逐渐剥去首部,恢复原有高层次的数据表现形式,比如数据报。
三.物理层&数据链路层
这本书从网络通信的最底层讲起。物理层->数据链路层。
物理层传输的是电和光信号,就像高低电位代表1和0。
数据链路层的发送端和终点端通信依靠MAC地址,MAC可以识别出【同一个传输介质】上的设备,注意是同一个传输介质。这里其实就是为什么网络层需要依靠IP地址而不是MAC地址,这是因为MAC的通信,是不能跨传输介质的。我们都知道互联网的组成,是有许多小范围的以太网或局域网组成,没有人能保证不同范围不同地点的网络搭建和连接使用相同的传输介质,传输介质也许有同轴电缆,双绞线,光纤电缆,无限电磁波d等等。上面有说到物理层传输的是01序列,而数据链路层并不是单纯的处理0和1,数据链路层的传输单位叫做帧,并且【不同】的数据链路的【最大】允许传输单元也不同,比如以太网最大单元为1500字节,FDDI(光纤分布式数据接口)为4352字节,这也是下面要提到网络层IP协议所解决的问题,请继续往下看。
那么为什么有了MAC地址,物理层的信号就知道怎么走呢?这就是以太网交换机(多个端口的网桥)所要处理的事情了,其通过自学的过程,学习到哪个目标mac地址应该走那个物理上网络接口。书中原文说道【实质上可以理解为mac地址就是接口的目标】。
四.网络层
网络层,在我们做Web方面,听到最多的应该非IP协议莫属了,IP一包为单位,但是仅凭IP协议,无法完成通信。
由于IP地址不美观和不便于人类社会的记忆,有了IP的别名-域名,如何根据域名找到IP地址进行数据传输,这个时候至关重要的就是网络层的DNS。
另外,在使用IP通信的时候,最终肯定要经过数据链路和物理层呀,数据链路层需要的是MAC地址,那么根据IP地址拿到MAC地址的协议就是网络层的ARP。
网络层主要负责终端节点间的通信,数据链路层主要作用是互联同一种数据链路之间进行包传递。一旦数据的传递,需要跨数据链路,那么网络层的作用就体现出来了。这其实正解决了上一小节所提出的【不同】的数据链路的【最大】允许传输单元也不同的问题和MAC可以识别出【同一个传输介质】上的设备。下面上图,来自于原书。光纤分布式数据接口最大传输单元为4352,以太网为1500,数据在发送和接收端所需传输路径已经属于不同介质,跨越不同数据链路了,所以这个时候发挥作用的是IP分片。
还有另外一种,叫做最大传输单元发现机制,其行为如下图所示:
对于数据链路层和IP层有一个形象的比喻。游客找到了旅行社定制旅游行程,从出发地到目的地(终端到终端通信)得到的计划是,飞机->火车->公交车。那么游客所买的票机票,火车票,公交卡,只能在固定区间(数据链路)有效。
五.传输层
传输层最主要的通信协议是TCP和UDP。前者为有连接型,后者为无连接型。TCP通信保证了数据传输的可靠性所有的数据传输,需得到相应的确认应答。下面是两种丢包,并保证可靠性传输的示例。
另外为了传输效率,TCP的窗口机制是这样的,
下面两张图是传输成功的情况与应答失败的情况
下面图片所示,为发包失败的情况:
六.应用层
在TCP/IP四层模型中,应用层位于最顶层,相对于OSI七层模型,其包含应用层,表示层,会话层。会话层负责管理什么时候断开和连接,传输层负责的则是具体实施动作。在TCP/IP中,这些之所以被归类到应用层,我觉得是要留给更多的空间到我们的服务器应用上,我们可以在高级代码层面管理会话和数据格式转换。关于应用层协议平时了解和使用最多的就是http了,不在此做笔记啦。看来想要了解应用层的协议,底层的协议多了解一些,总会让人感觉明朗。