Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1799126
  • 博文数量: 600
  • 博客积分: 10581
  • 博客等级: 上将
  • 技术积分: 6205
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:13
文章分类
文章存档

2016年(2)

2015年(9)

2014年(8)

2013年(5)

2012年(8)

2011年(36)

2010年(34)

2009年(451)

2008年(47)

分类: LINUX

2009-08-22 12:58:40

1.10 不同的BSD版及其重要的TCP/IP特性

 

    起初关于Internet的很多研究现在仍然在伯克利系统中应用-新的拥塞控制算法(21.7节),多目传送(12.4节),“又长又胖的管道”修改(24.3节),以及其他类似的研究。

 

1.15 应用编程接口

    使用TCP/IP协议的应用程序通常采用两种应用编程接口(API):socketTLI(运输层接口:Transport Layer Interface)。前者有时称作“Berkeley socket”,表明它是从伯克利版发展而来的。后者起初是由AT&T开发的,有时称作XTIX/Open传输接口),以承认X/Open这个自己定义标准的国际计算机生产产商所做的工作。XTI实际上是TLI的一个超集。

本书不是一本编程方面的书,但是偶尔会引用一些内容来说明TCP/IP的特性,不管大多数的APIsocket)是否提供它们。所有关于socketTLI的编程细节请参阅文献[Stevens 1990]

 

1.16  测试网络

    1.11是本书中所有的例子运行的测试网络。为阅读时参考方便,该图还复制在本书的封面内侧。

 

1.11  本书例子运行的测试网络,所有的IP地址均从140.252开始编址。

 

    在这个图中(作者的子网),大多数的例子都运行在下面四个系统中。图中所有的IP地址属于B类地址,网络号为140.252。所有的主机名属于.tuc.noao.edu这个域。(noao代表National Optical Astronomy Observatoriestuc代表Tucson)。例如,右下方的系统有一个完整的名字: svr4.tuc.noao.edu,其IP地址是:140.252.13.34。每个方框上方的名称是该主机运行的操作系统。这一组系统和网络上的主机及路由器运行于不同的TCP/IP实现。

    需要指出的是,noao.edu这个域中的网络和主机要比图1.11中的多得多。这里列出来的只是本书中将要用到的系统。

    3.4节中,我们将描述这个网络所用到的子网形式,在4.6中我们将更介绍sunnetb之间的拔号SLIP的有关细节。2.4节将详细讨论SLIP

 

1.17   小结

    本章快速地浏览了TCP/IP协议族,介绍了我们在后面的章节中将要详细讨论的许多术语和协议。

    TCP/IP协议族分为四层:链路层,网络层,运输层和应用层,每一层各有不同的责任。在TCP/IP中,网络层和运输层之间的区别是最为关键的:网络层(IP)提供点到点的服务,而运输层(TCPUDP)提供端到端的服务。

    一个互连网是网络的网络。构造互连网的共同基石是路由器,它们在IP层把网络连在一起。第一个字母大写的Internet是指分布在世界各地的大型互连网,其中包括1万多个网络和超过100万台主机。

    在一个互连网上,每个接口都用IP地址来标识,尽管用户习惯使用主机名而不是IP地址。域名系统为主机名和IP地址之间提供动态的映射。端口号用来标识互相通信的应用程序。服务器使用众所周知的端口号,而客户使用临时设定的端口号。

 

 

习题

1.1 请计算最多有多少个A类、B类和C类网络号。

1.2 用匿名FTP(见27.3节)从主机nic.merit.edu 上获取文件nsfnet/statistics/history.netcount。该文件包含在NSFNET网络上登记的国内和国外的网络数。画一坐标系,横坐标代表年,纵坐标代表网络总数的对数值。纵坐标的最大值是习题1.1的结果。如果数据显示一个明显的趋势,请估计按照当前的编址体制推算,何时会用完所有的网络地址。(3.10节讨论解决该难题的建议。)

1.3 获取一份主机需求RFC拷贝[Braden 1989a],阅读有关应用于TCP/IP协议族每一层的稳健性原则。这个原则的参考对象是什么?

1.4 获取一份最新的赋值RFC拷贝。“quote of the day"协议的有名端口号是什么?哪个RFC对该协议进行了定义?

1.5 如果你有一个接入TCP/IP互连网的主机帐号,它的主IP地址是多少?这台主机是否接入了Internet?它是多接口主机吗?

1.6 获取一份RFC 1000的拷贝,了解RFC这个术语从何而来。

1.7 Internet协会联系,isoc@isoc.org或者+1 703 648 9888,了解有关加入的情况。

1.8 用匿名FTP从主机is.internic.net处获取文件about-internic/information-about-the-internic

11

2 链路层

 

2.1 引言

    从图1.4我们可以看出,在TCP/IP协议族中,链路层主要有三个目的:(1)为IP模块发送和接收IP数据报;(2)为ARP模块发送ARP请求和接收ARP应答;(3)为RARP发送RARP请求和接收RARP应答。TCP/IP支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网,令牌环网,FDDI(光纤分布式数据接口),RS232串行线路等。

    在本章中,我们将详细讨论以太网链路层协议,两个串行接口链路层协议(SLIPPPP),以及大多数实现都包含的环回(loopback)驱动程序。以太网和SLIP是本书中大多数例子使用的链路层。我们对MTU(最大传输单元)进行了介绍,这个概念在本书的后面章节中将多次遇到。我们还讨论了如何为串行线路选择MTU

 

2.2 以太网和IEEE 802封装

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

    几年后,IEEE(电子电气工程师协会)802委员会公布了一个稍有不同的标准集,其中802.3针对了整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。这三者的共同特性由802.2标准来定义,那就是802网络共有的逻辑链路控制(LLC)。不幸的是,802.2802.3定义了一个与以太网不同的帧格式。文献[Stallings 1987]对所有的IEEE 802标准进行了详细的介绍。

    TCP/IP世界中,以太网IP数据报的封装是在RFC 894[Hornig 1984]中定义的,IEEE 802网络的IP数据报封装是在RFC 1042[Postel and Reynolds 1988]中定义的。主机需求RFC要求每台Internet主机都与一个10Mbit/s的以太网电缆相连接:

    1. 必须能发送和接收采用RFC 894(以太网)封装格式的分组。

    2. 应该能接收与RFC 894混合的RFC 1042IEEE 802)封装格式的分组。

    3. 也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组。

    最常使用的封装格式是RFC 894定义的格式。图2.1显示了两种不同形式的封装格式。图中每个方框下面的数字是它们的字节长度。

    两种帧格式都采用48 bit6字节)的目标地址和源地址。(802.3允许使用16 bit的地址,但一般是48 bit地址。)这就是我们在本书中所称的硬件地址。ARPRARP协议(第4章和第5章)对32 bitIP地址和48 bit的硬件地址进行映射。

    接下来的2个字节在两种帧格式中互不相同。在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括CRC检验码。以太网的类型字段定义了后续数据的类型。在802标准定义的帧格式中,类型字段则由后续的子网接入协议(Sub-network Access ProtocolSNAP)的首部给出。幸运的是,802定义的有效长度值与以太网的有效类型值无一相同,这样,就可以对两种帧格式进行区分。

    在以太网帧格式中,类型字段之后就是数据,而在802帧格式中,跟随在后面的是3字节的802.2 LLC5字节的802.2 SNAP。目的服务访问点(Destination Service Access Point, DSAP)和源服务访问点(Source Service Access Point, SSAP)的值都设为0xaactrl字段的值设为3。随后的3个字节org code都置为0。再接下来的2个字节类型字段和以太网帧格式一样。(其他类型字段值可以参见RFC 1340 [Reynolds and Postel 1992])。

    CRC字段用于帧内后续字节差错的循环冗余码检验(检验和)。(它也被称为FCS或帧检验序列)

    802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。我们在开始观察线路上的分组时将遇到这种最小长度的情况。

    在本书中,我们在需要的时候将给出以太网的封装格式,因为这是最为常见的封装格式。

 

2.1 IEEE 802.2/802.3RFC 1042)和以太网的封装格式(RFC 894

 

2.3 尾部封装

    RFC 893[Leffler and Karels 1984]描述了另一种用于以太网的封装格式,称作尾部封装(trailer encapsulation)。这是一个早期BSD系统在DEC VAX机上运行时的试验格式,它通过调整IP数据报中字段的次序来提高性能。在以太网数据帧中,开始的那部分是变长的字段(IP首部和TCP首部)。把它们移到尾部(在CRC之前),这样当把数据复制到内核时,就可以把数据帧中的数据部分映射到一个硬件页面,节省内存到内存的复制过程。TCP数据报的长度是512字节的整数倍,正好可以用内核中的页表来处理。两台主机通过协商使用ARP扩展协议对数据帧进行尾部封装。这些数据帧需定义不同的以太网帧类型值。

    现在,尾部封装已遭到反对,因此我们不对它举任何例子。有兴趣的读者请参阅RFC 893以及文献[Leffler et al. 1989]11.8节。

 

2.4 SLIP:串行线路IP

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

    下面的规则描述了SLIP协议定义的帧格式:

    1IP数据报以一个称作END0xc0)的特殊字符结束。同时,为了防止数据报到来之前的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个END字符。(如果有线路噪声,那么END字符将结束这份错误的报文。这样当前的报文得以正确的传输,而前一个错误报文交给上层后,会被发现其内容毫无意义而被丢弃。)

    2.如果IP报文中某个字符为END,那么就要连续传输两个字节0xdb, 0xdc来取代它。0xdb这个特殊字符被称作SLIPESC字符,但是它的值与ASCII码的ESC字符(0x1b)不同。

    3 如果IP报文中某个字符为SLIPESC字符,那么就要连续传输两个字节0xdb,0xdd来取代它。

    2.2中的例子就是含有一个END字符和一个ESC字符的IP报文。在这个例子中,在串行线路上传输的总字节数是原IP报文长度再加4个字节。

    SLIP是一种简单的帧封装方法,还有一些值得一提的缺陷:

    1. 每一端必须知道对方的IP地址。没有办法把本端的IP地址通知给另一端。

    2. 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于SLIP,那么它不能同时使用其他协议。

    3. SLIP没有在数据帧中加上检验和(类似于以太网中的CRC字段)。如果SLIP传输的报文被线路噪声影响而发生错误,只能通过上层协议来发现。(另一种方法是,新型的调制解调器可以检测并纠正错误报文。)这样,上层协议提供某种形式的CRC就显得很重要。在第3章和第17章中,我们将看到IP首部和TCP首部及其数据始终都有检验和。在第11章中,我们将看到UDP首部及其数据的检验和却是可选的。

 

2.2 SLIP报文的封装

 

    尽管存在这些缺点,SLIP仍然是一种广泛使用的协议。

 

(下面是原书p.25①的译文)

    SLIP的历史要追溯到1984年,Rick Adams第一次在4.2BSD系统中实现。尽管它本身的描述是一种非标准的协议,但是随着调制解调器的速率和可靠性的提高,SLIP越来越流行。现在,它的许多产品可以公开获得,而且很多产家都支持这种协议。

 

2.5 压缩的SLIP

    由于串行线路的速率通常较低(19200 b/s或更低),而且通信经常是交互式的(如TelnetRlogin,二者都使用TCP),因此在SLIP线路上有许多小的TCP分组进行交换。为了传送1个字节的数据需要20个字节的IP首部和20个字节的TCP首部,总数超过40个字节。(19.2节描述了Rlogin会话过程中,当敲入一个简单命令时这些小报文传输的详细情况。)

    既然承认这些性能上的缺陷,于是人们提出一个被称作CSLIP(即压缩SLIP)的新协议,它在RFC 1144[Jacobson 1990a]中被详细描述。CSLIP一般能把上面的40个字节压缩到35个字节。它能在CSLIP的每一端维持多达16TCP连接,并且知道其中每个连接的首部中的某些字段一般不会发生变化。对于那些发生变化的字段,大多数只是一些小的数字和的改变。这些被压缩的首部大大地缩短了交互响应时间。

 

(下面是原书p.25②的译文)

    现在大多数的SLIP产品都支持CSLIP。作者所在的子网(参见封面内页)中有两条SLIP链路,它们均是CSLIP链路。

 

2.6  PPP:点对点协议

    PPP,点对点协议修改了SLIP协议中的所有缺陷。PPP包括以下三个部分:

    1.在串行链路上封装IP数据报的方法。PPP既支持数据为8位和无奇偶检验的异步模式(如大多数计算机上都普遍存在的串行接口),还支持面向比特的同步链接。

    2.建立、配置及测试数据链路的链路控制协议(LCPLink Control Protocol)。它允许通信双方进行协商,以确定不同的选项。

    3.针对不同网络层协议的网络控制协议(NCPNetwork Control Protocol)体系。当前RFC定义的网络层有IPOSI网络层,DECnet,以及AppleTalk。例如,IP NCP允许双方商定是否对报文首部进行压缩,类似于CSLIP。(缩写词NCP也可用在TCP的前面)。

    RFC 1548[Simpson 1993]描述了报文封装的方法和链路控制协议。RFC 1332[McGregor 1992]描述了针对IP的网络控制协议。

    PPP数据帧的格式看上去很像ISOHDLC(高层数据链路控制)标准。图2.3PPP数据帧的格式。

 

2.3 PPP数据帧的格式

 

    每一帧都以标志字符0x7e开始和结束。紧接着是一个地址字节,值始终是0xff,然后是一个值为0x03的控制字节。

    接下来是协议字段,类似于以太网中类型字段的功能。当它的值为0x0021时表示信息字段是一个IP数据报,值为0xc021时表示信息字段是链路控制数据,值为0x8021时表示信息字段是网络控制数据。

    CRC字段(或FCS,帧校验序列)是一个循环冗余检验码,以检测数据帧中的错误。

    由于标志字符的值是0x7e,因此当该字符出现在信息字段中时,PPP需要对它进行转义。在同步链路中,该过程是通过一种称作比特填充(bit stuffing)的硬件技术来完成的[Tanenbaum 1989]。在异步链路中,特殊字符0x7d用作转义字符。当它出现在PPP数据帧中时,那么紧接着的字符的第六个比特要取其补码,具体实现过程如下:

    1. 当遇到字符0x7e时,需连续传送两个字符:0x7d0x5e,以实现标志字符的转义。

    2. 当遇到转义字符0x7d时,需连续传送两个字符:0x7d0x5d,以实现转义字符的转义。

    3. 默认情况下,如果字符的值小于0x20(比如,一个ASCII控制字符),一般都要进行转义。例如,遇到字符0x01时需连续传送0x7d0x21两个字符。(这时,第六个比特取补码后变为1,而前面两种情况均把它变为0。)

    这样做的原因是防止它们出现在双方主机的串行接口驱动程序或调制解调器中,因为有时它们会把这些控制字符解释成特殊的含义。另一种可能是用链路控制协议来指定是否需要对这32个字符中的某一些值进行转义。默认情况下是对所有的32个字符都进行转义。

    SLIP类似,由于PPP经常用于低速的串行链路,因此减少每一帧的字节数可以降低应用程序的交互时延。利用链路控制协议,大多数的产品通过协商可以省略标志符和地址字段,并且把协议字段由2个字节减少到1个字节。如果我们把PPP的帧格式与前面的SLIP的帧格式(图2.2)进行比较会发现,PPP只增加了3个额外的字节:1个字节留给协议字段,另2个给CRC字段使用。另外,使用IP网络控制协议,大多数的产品可以通过协商采用Van Jacobson报文首部压缩方法(对应于CSLIP压缩),减小IPTCP首部长度。

    总的来说,PPPSLIP具有下面这些优点:(1PPP支持在单根串行线路上运行多种协议,不只是IP协议;(2)每一帧都有循环冗余检验;(3)通信双方可以进行IP地址的动态协商(使用IP网络控制协议);(4)与CSLIP类似,对TCPIP报文首部进行压缩;(5
阅读(881) | 评论(0) | 转发(0) |
0

上一篇:TCP/IP详解2

下一篇:TCP/IP详解4

给主人留下些什么吧!~~