五.传输层

 传输层最主要的通信协议是TCP和UDP。前者为有连接型,后者为无连接型。TCP通信保证了数据传输的可靠性所有的数据传输,需得到相应的确认应答。下面是两种丢包,并保证可靠性传输的示例。

                                                     
  bifa88 1

 

另外为了传输效率,TCP的窗口机制是这样的,

下面两张图是传输成功的情况与应答失败的情况

              bifa88 2

 

下面图片所示,为发包失败的情况:

bifa88 3

bifa88 4

三.物理层&数据链路层

这本书从网络通信的最底层讲起。物理层->数据链路层。

物理层传输的是电和光信号,就像高低电位代表1和0。

数据链路层的发送端和终点端通信依靠MAC地址,MAC可以识别出【同一个传输介质】上的设备,注意是同一个传输介质。这里其实就是为什么网络层需要依靠IP地址而不是MAC地址,这是因为MAC的通信,是不能跨传输介质的。我们都知道互联网的组成,是有许多小范围的以太网或局域网组成,没有人能保证不同范围不同地点的网络搭建和连接使用相同的传输介质,传输介质也许有同轴电缆,双绞线,光纤电缆,无限电磁波d等等。上面有说到物理层传输的是01序列,而数据链路层并不是单纯的处理0和1,数据链路层的传输单位叫做帧,并且【不同】的数据链路的【最大】允许传输单元也不同,比如以太网最大单元为1500字节,FDDI(光纤分布式数据接口)为4352字节,这也是下面要提到网络层IP协议所解决的问题,请继续往下看。

那么为什么有了MAC地址,物理层的信号就知道怎么走呢?这就是以太网交换机(多个端口的网桥)所要处理的事情了,其通过自学的过程,学习到哪个目标mac地址应该走那个物理上网络接口。书中原文说道【实质上可以理解为mac地址就是接口的目标】。

七层模型
  1. 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
  2. 数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
  3. 网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
  4. 传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。
    主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
  5. 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
  6. 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换吗(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
  7. 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。

四.网络层

 网络层,在我们做Web方面,听到最多的应该非IP协议莫属了,IP一包为单位,但是仅凭IP协议,无法完成通信。

由于IP地址不美观和不便于人类社会的记忆,有了IP的别名-域名,如何根据域名找到IP地址进行数据传输,这个时候至关重要的就是网络层的DNS。

另外,在使用IP通信的时候,最终肯定要经过数据链路和物理层呀,数据链路层需要的是MAC地址,那么根据IP地址拿到MAC地址的协议就是网络层的ARP。

网络层主要负责终端节点间的通信,数据链路层主要作用是互联同一种数据链路之间进行包传递。一旦数据的传递,需要跨数据链路,那么网络层的作用就体现出来了。这其实正解决了上一小节所提出的【不同】的数据链路的【最大】允许传输单元也不同的问题和MAC可以识别出【同一个传输介质】上的设备。下面上图,来自于原书。光纤分布式数据接口最大传输单元为4352,以太网为1500,数据在发送和接收端所需传输路径已经属于不同介质,跨越不同数据链路了,所以这个时候发挥作用的是IP分片。

bifa88 5

还有另外一种,叫做最大传输单元发现机制,其行为如下图所示:

bifa88 6

对于数据链路层和IP层有一个形象的比喻。游客找到了旅行社定制旅游行程,从出发地到目的地(终端到终端通信)得到的计划是,飞机->火车->公交车。那么游客所买的票机票,火车票,公交卡,只能在固定区间(数据链路)有效。

bifa88 7

 

物理地址寻址:

通信当然得知道发送者的地址和接受者的地址,这是最基础的。以太网规定,所有连入网络的设备,都必须具有“网卡”接口。然后数据包是从一块网卡,传输到另一块网卡的。网卡的地址,就是数据包的发送地址和接收地址,叫做MAC地址,也叫物理地址,这是最底层的地址。每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。有了这个地址,我们可以定位网卡和数据包的路径了。
那么在实际通信时,我们怎么知道对方的MAC地址呢?这里我们是通过ARP协议(地址解析协议),就是根据IP地址(网络层)获取MAC地址的一个TCP/IP协议。上面有说到,发送者从上至下,就需要在已知IP地址的情况下,获取MAC地址发送给接收者,自然地,接收方从下往上时,需要逐步添加对方的地址信息,需要已知MAC地址的情况下,RARP协议(逆地址解析协议)获得对方的IP地址。
  那么知道了对方的MAC地址,连接是如何建立的呢?
  这里简单的说下广播方式(目的端为给定网络上的所有主机),系统将数据包(包含MAC地址)向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。

bifa88 8

上图,1号计算机向2号机算机发送一个数据包,同一个子网络的计算机都会收到这个包。它们读取这个包的首部,找到接受方的MAC地址,同自身的MAC地址相比较,如果两者相同,就接收这个包,作进一步处理,否则就丢弃。
事实上还有其余方式如单播和多播这里就不说明了。

数据帧封装:
  网络层传输的包(packet),在数据链路层中传输的是“帧”(frame)。数据包到达数据链路层后加上数据链路层的协议头和协议尾就构成了一个数据帧。前面说到,数据部分也就是有效载荷,其各个层都是一样的
封装简单说就是事先对数据包进行拆分和打包,在所发送的数据包上附加上目标地址,本地地址,以及一些用于纠错的字节等。对数据包进行处理时通信双方所遵循和协商好的规则就是协议。
  先说说当今TCP/IP采用的主要的局域网技术——以太网。
以太网(Ethernet)规定:一组电信号构成一个数据包,叫做“帧”(Frame),每个帧分为两个部分:首部(Head)和数据(Data)。

bifa88 9

“首部”自然是包含数据包的一些说明项,如发送者、接收者、数据类型等等,“数据”则是数据包的具体内容。不论是以太网帧还是后面网络层的IP数据报都是这么个格式类型。
  前面说到,数据链路层位于物理层和网络层之间。在发送端,数据链路层是接收来自网络层的数据分组,而在接收端它是接受来自物理层的比特流,所以数据链路层的成帧功能就包含两层含义:一是将来自物理层的一个个比特流组装成数据帧(成为帧同步),二是将来自网络层的数据分组封装成数据帧。
  在发送端数据链路层中的帧到达物理层后就会以比特位为单位进行传输,而不是以帧为单位进行传输,在物理线路上数据的传输单位是比特位。发送端以比特位方式一位位地传输到接收端的物理层,然后接收端的物理层把比特流向数据链路层传输,达到后又要将比特流封装成数据帧,添加的首部信息是通过读取对方这就是数据链路层的帧组装方式。
  帧同步的目的就是要使接收端的数据链路层对从物理层传输而来的一串串比特流以帧为单位进行区分,根据帧头和帧尾来区分一个完整帧。

以太网和IEEE 802封装

bifa88 10

Paste_Image.png

bifa88 11

各个字段的详细说明:
  目的地址(Destination Address,DA)和源地址(Source
Address,SA):两种帧都采用6字节的目的地址和源地址(802.3允许16bit),也就是MAC地址,只有网络接口才能识别。

  • 长度(Length)或类型(Type):从网络层来的数据包,大小可以在46—1500字节之间变化。
  • 帧校验序列(Frame Check
    Sequence,FCS):FCS是位于帧尾的字段,它用来存放循环冗余校验(CRC)。
  • 数据链路层除了数据的封装成帧之外,还需要保证数据在该层的“透明”传输,即使在数据链路层上所传输的数据在内容、格式及编码上都没有限制,也要保证数据从发送端无差错地在数据链路上传输到目的接收端。

一.写在前面

  昨天晚上读完《图解TCP/IP》后就想,应该和TCP/IP协议簇的理论和通信过程做个了断,给自己写一篇读书笔记吧,坐到电脑面前,又深感无力,因为我深知自己没有能力用一篇简短的笔记,来描述图解TCP/IP讲了什么。那我只能就
【第一次阅读图解TCP/IP】
给我带来了什么来做一次笔记,当然希望将来能抽出时间,阅读第二遍。和《TCP/IP详解》相比,实在的说,去年根本看不懂详解,根本看不懂….,但是图解这本书,对于有一定网络基础的人来说,看了真的会感到豁然开朗。就像学C#的时候,读一读CLR的感觉。

  比如从前写socket的时候,开始我想象不到socket是一个什么样的概念,也不明白为什么说它是抽象层。我也不能彻底理解,websocket和socket的区别,两个层面的东西嘛。我也曾不能理解,http报文如何通过并利用TCP/IP协议簇的一系列协议从上游到下游,即使在阅读了《图解HTTP》后,很多内容也是非常疑惑的。甚至连在学校学的数电模电传递高低电压,也没能被我联想到物理层上。

  在读书的过程中,自己会挑一些印象深刻的,和对自己比较重要的部分截图到有道云笔记,每次再翻开书的时候,先把之前的截图笔记撸两眼。    

bifa88 12

 

在源博客基础上更改,特此感谢:
原文链接:http://blog.csdn.net/wenqian1991/article/details/42467643

二.什么是协议?如何通信?

 协议就是这P那P的Protocol,无论是OSI七层模型还是TCP/IP四层模型,上下层之间的交互所遵循的约定叫做【接口】,同一层之间所遵循的约定叫做【协议】,所以你可以说TCP是传输层协议,HTTP是网络层协议,你使用Socket
一套API调用TCP进行通信叫做调用API接口,还有我们最常见的Web请求,使用的叫做Http【协议】,为什么不叫做Http【接口】,因为其通信属于在应用层到应用层,使用的叫做,各自通过【接口】逐层处理报文数据->TCP数据段->IP数据包->链路数据帧->物理比特位,在流经各层接口时,附带上该层的首部,以便在到达目标时,再由各层逐渐剥去首部,恢复原有高层次的数据表现形式,比如数据报。

bifa88 13

 

数据传输过程

bifa88 14

两个主机,其用户之间的通信是发送者主机从上至下,接收者主机从下往上。
完整流程为:

  1. 发送者用户(应用层)的数据经由传输层>网络层>链路层>通过物理层(媒介)连接到接收者的物理层;从接收者的物理层>链路层>网络层>传输层>应用层最终到达接收者。来回通信的话就是彼此交换发送者,接收者。
    接收方中的物理层接收信息单元,传输至数据链路层,链路层读取包含在发送方数据链路层预先添加在协议头中的控制信息,取出协议头和协议尾,将剩余部分传送至网络层,协议栈向上层层过滤,最后将数据传送至接收者应用层。
  2. 需要注意的是,从下往上,数据报是越来越大,因为包含的地址信息越来越多,有效载荷(数据包)是不变的。链路层首部包含双方的MAC地址,网络层添加了双方的网络地址,传输层则添加了双方的端地址,层层添加,反过来,从上至下则是层层过滤,数据传输的核心是数据链路层:

数据链路层肩负着上接网络层,下连物理层的中介作用,还需要处理其间的数据传输故障等。事实上,数据链路层在不可靠的物理介质上提供可靠的传输,该层的作用包括:物理地址寻址、数据的成帧、流量控制,数据的检错,重发等。


六.应用层

在TCP/IP四层模型中,应用层位于最顶层,相对于OSI七层模型,其包含应用层,表示层,会话层。会话层负责管理什么时候断开和连接,传输层负责的则是具体实施动作。在TCP/IP中,这些之所以被归类到应用层,我觉得是要留给更多的空间到我们的服务器应用上,我们可以在高级代码层面管理会话和数据格式转换。关于应用层协议平时了解和使用最多的就是http了,不在此做笔记啦。看来想要了解应用层的协议,底层的协议多了解一些,总会让人感觉明朗。

 

七层模型

本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址
www.cnblogs.com/tdws

相关文章