TCP/IP学习之“链路层”

以太网一般是指数字设备公司(Digital Equipment Corp.)、英特尔公司(Intel Corp.)和Xerox公司在1982年联合公布的一个标准。是当今TCP/IP采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection)。它的速率为10 Mb/s,地址为48 bit。

IEEE802:

  • 802.3 ---> CSMA/CD
  • 802.4 ---> 令牌总线网络
  • 802.5 ---> 令牌环网络

IEEE802.2/802.3(RFC1042)和以太网的封装格式(RFC894)

TCP/IP学习之“链路层”

  • 两种帧格式都采用48 bit(6字节)的目的地址和源地址(802.3允许使用16 bit的地址,但一般是48 bit地址)。这就是我们所称的硬件地址。ARP和RARP协议对32 bit的IP地址和48 bit的硬件地址进行映射。
  • 在802标准定义的帧格式当中,长度字段是指它后续数据的字节长度,不包CRC校验码。以太网的类型字段定义了后续数据的类型。在802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network Access Protocol,SNAP)的首部给出。802定义的有效长度值与以太网的有效类型值无一相同。
  • 在以太网帧格式中,类型字段之后就是数据;而在802帧格式中,跟随在后面的是3字节的802.2 LLC和5字节的802.2 SNAP。目的服务访问点(Destination Service Access Point,DSAP)和源服务访问点(Source Service Access Point,SSAP)的值都设为0xaa。Ctrl字段的值设为3。随后的3个字节org code都置为0.
  • CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)(它也被称为FCS或帧检验序列)。
  • 802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。在开始观察线路上的分组时将遇到这种最小长度的情况。

SLIP(Serial Line IP)是一种在串行线路上对IP数据报进行封装的简单形式,在RFC 1055[Romkey 1988]中有详细描述。SLIP适用于家庭中每台计算机几乎都有的RS-232串行端口和高速调制解调器接入Internet。

SLIP协议定义的帧格式:

 1). IP数据报以一个称作END(0xc0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符(如果有线路噪声,那么END字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
 2). 如果IP报文中某个字符为END,那么就要连续传输两个字节0xdb和0xdc来取代它。0xdb这个特殊字符被称作SLIP的ESC字符,但是它的值与ASCII码的ESC字符(0x1b)不同。
 3). 如果IP报文中某个字符为SLIP的ESC字符,那么就要连续传输两个字节0xdb和0xdd来取代它。
TCP/IP学习之“链路层”

SLIP协议封装的缺陷:

 1). 每一端必须知道对方的IP地址。没有办法把本端的IP地址通知给另一端。
 2). 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。
 3). SLIP没有在数据帧中加上检验和(类似于以太网中的CRC字段)。如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现(另一种方法是,新型的调制解调器可以检测并纠正错误报文)。


CSLIP(压缩的SLIP)

CSLIP可以将TCP分组交换中的40字节首部(20字节的IP首部+20字节的TCP首部)压缩成3个或5个字节,可以在每个端维护最多16个TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。

PPP(点对点协议)

 PPP点对点协议修改了SLIP协议中的缺陷,PPP包括以下3个部分:
 1). 在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的异步模式(如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。
 2). 建立、配置及测试数据链路的链路控制协议(LCP:Link Control Protocol)。它允许通信双方进行协商,以确定不同的选项。
 3). 针对不同网络层协议的网络控制协议(NCP:Network Control Protocol)体系。当前RFC定义的网络层有IP、OSI网络层、DECnet以及Apple Talk。

PPP数据帧的格式:

TCP/IP学习之“链路层”

  • 每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03的控制字节。
  • 协议字段,类似于以太网中类型字段的功能。当它的值为0x0021时,表示信息字段是一个IP数据报;值为0xc021时,表示信息字段是链路控制数据;值为0x8021时,表示信息字段是网络控制数据。
  • CRC字段(或FCS,帧检验序列)是一个循环冗余检验码,以检测数据帧中的错误。
     由于标志字符的值是0x7e,因此当该字符出现在信息字段中时, PPP需要对它进行转义。
      在同步链路中,该过程是通过一种称作比特填充(bit stuffing )的硬件技术来完成的
      在异步链路中,特殊字符0x7d用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
       1). 当遇到字符0x7e时,需连续传送两个字符:0x7d和0x5e,以实现标志字符的转义。
       2). 当遇到转义字符0x7d时,需连续传送两个字符:0x7d和0x5d,以实现转义字符的转义。
       3). 默认情况下,如果字符的值小于0x20(比如,一个ASCII控制字符),一般都要进行转
    义。
    PPP与SLIP相比较的优点:

     1). PPP支持在单根串行线路上运行多种协议,不只是IP协议;
     2). 每一帧都有循环冗余检验;
     3). 通信双方可以进行IP地址的动态协商(使用IP网络控制协议);
     4). 与CSLIP类似,对TCP和IP报文首部进行压缩;
     5). 链路控制协议可以对多个数据链路选项进行设置。
     为实现以上优点,PPP较SLIP在每一帧的首部增加了3个字节位,1个字节留给协议字段,另2个给CRC字段使用。


环回接口(Loopback Interface)

 环回接口用于运行在同一台主机上的客户程序和服务器程序通过TCP/IP进行通信。A类网络号127就是为环回接口预留的,大多数系统将地址127.0.0.1分配给这个接口,并命名为“localhost”。

环回接口处理IP数据报的过程

TCP/IP学习之“链路层”

扫描二维码关注公众号,回复: 11640176 查看本文章
上图关键点:

 1). 传给环回地址(一般是127.0.0.1)的任何数据均作为IP输入。
 2). 传给广播地址或多播地址的数据报复制一份传给环回接口,然后送到以太网上。这是因为广播传送和多播传送的定义包含主机本身。
 3). 任何传给该主机IP地址的数据均送到环回接口。


最大传输单元(MTU)

几种常见的最大传输单元(MTU)

 链路层对帧的长度都有一个限制,这个特性称为最大传输单元(MTU)
TCP/IP学习之“链路层”
 如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片( fragmentation),把数据报分成若干片,这样每一片都小于MTU。


路径MTU

定义:网络上两台通信主机路径中的最小MTU
 两台主机之间的路径MTU不一定是个常数。它取决于当时所选择的路由。而选路不一定是对称的(从A到B的路由可能与从B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。


串行链路吞吐量计算

 平均等待时间的计算(传输最大数据帧所需时间的一半)只适用于SLIP链路(或PPP链路)在交互通信和大块数据传输这两种情况下。当只有交互通信时,如果线路速率是9600 b/s,那么任何方向上的1字节数据(假设有5个字节的压缩帧头)往返一次都大约需要12.5 ms。


Windows系统查接口MTU

   netsh interface ip show interface

Linux系统查接口MTU

   netstat -i OR netstat -in

猜你喜欢

转载自blog.51cto.com/14033577/2531196