Linux 核心--11.网络

2008-02-23 07:23:44来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

第十章 
网络

    网络和Linux是密切相关的。从某种意义来说Linux是一个针对Internet和WWW的产品。它的开发者和用户用Web来交换信息思想、程序代码,而Linux自身常常被用来支持各种组织机构的网络需求。这一章讲的是Linux如何支持如TCP/IP等网络协议的。 

    TCP/IP协议最初是为支持ARPANET(一个美国政府资助的研究性网络)上计算机通讯而设计的。ARPANET 提出了一些网络概念如包交换和协议分层(一个协议使用另一个协议提供的服务)。ARPANET于1988年隐退,但是它的继承人(NSF1 NET和Internet)却变得更大了。现在我们所熟知的万维网World Wide Web就是从ARPANET演变过来的,它自身支持TCP/IP协议。Unix TM 被广泛应用于ARPANET,它的第一个网络版本是4.3 BSD。Linux的网络实现是以4.3 BSD为模型的,它支持BSD sockets(及一些扩展)和所有的TCP/IP网络。选这 个编程接口是因为它很流行,并且有助于应用程序从Linux平台移植到其它Unix TM 平台。 

10.1  TCP/IP网络简介
    这一部分简单介绍一下TCP/IP网络的主要原理,而不是进行详细地讲述。在IP网络中,每台机器都有一个 IP 地址,一个32位的数字,它唯一地标识这台机器。WWW是一个非常巨大并且迅速增长的网络,每台连在上面的机器都必须有一个独立的IP地址。IP地址由四个用点分开的数字表示,如16.42.0.9。这个IP地址实际上分成两个部分:网络地址和主机地址,每部分的长度是可以变化的(有好几类IP地址)。以16.42.0.9为例,网络地址是16.42,主机地址是0.9。主机地址又进一步分为子网地址和主机地址。还是以16.42.0.9为例,子网地址是16.42.0,主机地址是16.42.0.9。这样的子划分可以允许某部门划分他们自己的子网络。例如,如果16.42是ACME计算机公司的网络地址,则16.42.0可能是子网0,16.42.1可能是子网1。 这些子网可以是分别建立的,可能租用电话线或用微波进行相互间通讯。IP地址由网络管理员分配,用IP 子网可以很好地管理网络。IP子网的管理员可以自由分配子网内的IP地址。 
    通常,IP地址是比较难记的,而名称则容易多了,象linux.acme.com就比16.42.0.9要好记一些。但是必须有一些机器来将网络名称转变为IP地址。这些名称被静态地定义在 /etc/hosts 文件中或者Linux能请求域名服务器(DNS)来解析它。这种情况下,本地主机必须知道一个或一个以上的DNS服务器并且这些服务器要将其名称指定到 /etc/resolv.conf 中。 

    当你想要与另一台计算机连接时,比如说你想阅读一个Web页,你的IP地址就会被用来与那台机器交换数据。这些数据被包含在一些IP包中,每个IP包都有一个IP头用来包含源机器的IP地址和目的机器的IP地址,校验和以及其它的有用信息。IP包的校验和用来让IP包的接收端判断IP包是否在传输过程中发生错误,譬如说由于电话线路的问题而引起的错误。应用程序想要传输的数据可能被分成很多个容易处理的小包。IP数据包的大小是根据传输媒体的变化而不同的;以太网包通常比PPP包要大一些。目的主机在将数据送给接收端应用程序前需要将这些包重新拚装起来。如果你从一个比较慢的站点访问一个有大量图象的Web页,就会看到数据的分割与重组。 

    同一子网内的主机之间可以直接发送IP包,而其它的IP包将被送到一个特定的主机:网关。网关(或路由器)是用来连接多个IP子网的,它们会转发送从子网内来的IP包。例如,如果子网16.42.1.0和16.42.0.0之间通过一个网关相连,那么任何从子网0发往子网1的包必须由网关指引,网关可以帮这些包找到正确的路线。本地主机建立路由表用以为IP包找到正确的机器。每一个目的IP都有一个条目在路由表中,用以告诉Linux将IP包送到哪一台主机。这些路由表是随网络的拓扑结构变化而动态变化的。 






图 10.1: TCP/IP 协议层 

    IP协议是一个传输层的协议,其它协议可以用它来传输数据。传输控制协议(TCP)是一个可靠的端对端的协议,它用IP来传送和接收它自己的包。正如IP包有它自己的头一样,TCP也有它自己的头。TCP是一个面向连接的协议,两个网络应用程序通过一个虚连接相连,即使它们之间可能隔着很多子网、网关、路由器。TCP可靠地传送和接收两应用程序间的数据,并保证数据不会丢失。当用IP来传输TCP包时,IP包的数据段就是TCP包。每一个通讯主机的IP层负责传送和接收IP包。用户数据报协议(UDP)也用IP层来传输它的包,不象TCP,UDP不是一个可靠的协议,但它提供了一种数据报服务。有多个协议可以使用IP层,接收IP包的时候必需知道该IP包中的数据是哪个上层协议的,因此IP包头中有个一字节包含着协议标识符。例如,当TCP请求IP层传输一个IP包时,IP包的包头中用标识符指明该包包含一个TCP包,IP接收层用该标识符决定由哪一协议来 接收数据,这个例子中是TCP层。当应用程序通过TCP/IP进行通讯时,它们不仅要指定目标的IP地址,而且还 要指定应用的端口地址。一个端口地址唯一地标识一个应用,标准的网络应用使用标准的端口地址;如,Web 服务使用80端口。这些已登记的端口地址可在 /etc/services 中看到。 

    这一层的协议不仅仅是TCP、UDP和IP。IP协议层本身用很多种物理媒介将IP包从一个主机传到其它主机。这些媒介可以加入它们自己的协议头。以太网层就是一个例子,但PPP和SLIP不是这样。一个以太网络允许很个主机同时连接到同一根物理电缆。传输中的每一个以太网帧可以被所有主机看见,因此每一以太网设备有个唯一的地址。任何传送给该地址的以太网帧被有该地址的以太网设备接收,而其它主机则忽略该帧。这个唯一的地址内置于每一以太网设备中,通常是在网卡出厂时就写在SROM2中了。以太网地址有6个字节长,如: 08-00-2b-00-49-A4 。一些以太网地址是保留给多点传送用的,送往这些地址的以太网帧将被网上所有的主机接收。以太网帧可以携带很多种协议(作为数据),如IP包,并且也包括它们头中的协议标识符。这使得以太网层能正确地接收IP包并将它们传给IP层。 

    为了能通过象以太网这样的多连接协议传送IP包,IP层必须找到每一IP主机的以太网地址。IP地址仅仅是一个地址概念,以太网设备有它们自身的物理地址。从另一方面说,IP地址是可以被网络管理员根据需要来分配和再分配的,而网络硬件只对含有它们自己的物理地址或多点传送地址的以太网帧作出响应。Linux用地址 解析协议(ARP)来允许机器将IP地址转变成真正的硬件地址,如以太网地址。如果一个主机想知道某一IP地址对应的硬件地址,它就用一个多点传送地址将一个包含了该IP地址的ARP请求包发给网上所有节点,拥有该IP地址的的目标主机则响应一个包含物理硬件地址的ARP应答。ARP不仅仅局限于以太网设备,它能够用来在其它一些物理媒介上解析IP地址,如FDDI。那些不支持ARP的网络设备会被标记出来,Linux将不会用ARP。还有一个提供相反功能的反向地址解析协议(RARP),用来将物理网络地址转变为IP地址。这一协议常常被网关用来响应包含远程网络IP地址的ARP请求。 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Linux 核心--12.Linux内核机制

下一篇:Linux 核心--9.设备驱动