Chinaunix首页 | 论坛 | 博客
  • 博客访问: 761970
  • 博文数量: 790
  • 博客积分: 40560
  • 博客等级: 大将
  • 技术积分: 5065
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-28 16:29
文章分类

全部博文(790)

文章存档

2011年(1)

2008年(789)

我的朋友

分类: LINUX

2008-08-28 17:07:46

 

  TCP/IP网络的主要原理

  在一个IP(InternetProtocol)网络中,每一台计算机都有一个32位的IP地址。每台计算机的IP地址都是唯一的。WWW是一个范围十分大,并且不断增长的IP网络,所以网络上的每台计算机都必须有一个唯一的IP地址。IP地址是用.分隔开的4个十进制数,例如16.42.0.9。实际上IP地址可以分为两部分:一部分是网络地址,另一部分是主机地址,例如,在16.42.0.9中,16.42是网络地址,0.9则为主机地址。而主机地址又可以分为子网地址和主机地址。计算机的IP地址很不容易记忆,如果使用一个名字就可以方便得多。如果使用名字,则必须有某一种机制将名字转化为IP地址。这些名字可以静态地保存在/etc/hosts文件中,或者Linux系统请求域名服务器(DNS服务器)来转换名字。如果使用DNS服务器的话,本地的主机则必须知道一个或者多个DNS服务器的IP地址,这些信息保存在/etc/resolv.conf文件中。

  当你和其他计算机相连时,系统要使用IP地址和其他计算机交换数据。数据保存在IP数据包中。每一个IP数据包都有一个IP数据头,其中包括源地址和目的地址,一个数据校验和以及其他一些有关的信息。IP数据包的大小随传输介质的不同而不同,例如,以太网的数据包要大于PPP的数据包。目的地址的主机在接收数据包后,必须再将数据装配起来,然后传送给接收的应用程序。

  连接在同一个IP子网上的主机之间可以直接传送IP数据包,而在不同子网之间的主机却要使用网关。网关用来在不同的子网之间传送数据包。

  IP协议是一个传输层的协议,其他的协议可以利用IP协议来传输数据。TCP(TransmissionControlProtocol)协议是一个可靠的点到点之间的协议,它使用IP协议来传送和接收自己的数据包。TCP协议是基于连接的协议。需要通信的两个应用程序之间将建立起一条虚拟的连接线路,即使其中要经过很多子网、网关和路由器。TCP协议保证在两个应用程序之间可靠地传送和接收数据,并且可以保证没有丢失的或者重复的数据包。当TCP协议使用IP协议传送它自己的数据包时,IP数据包中的数据就是TCP数据包本身。相互通信的主机中的IP协议层负责传送和接收IP数据包。每一个IP数据头中都包括一个字节的协议标识符。当TCP协议请求IP协议层传送一个IP数据包时,IP数据头中的协议标识符指明其中的数据包是一个TCP数据包。接收端的IP层则可以使用此协议标识符来决定将接收到的数据包传送到那一层,在这里是TCP协议层。

  当应用程序使用TCP/IP通信时,它们不仅要指明目标计算机的IP地址,也要指明应用程序使用的端口地址。端口地址可以唯一地表示一个应用程序,标准的网络应用程序使用标准的端口地址,例如,web服务器使用端口80。你可以在/etc/services中查看已经登记的端口地址。

  IP协议层也可以使用不同的物理介质来传送IP数据包到其他的IP地址主机。这些介质可以自己添加协议头。例如以太网协议层、PPP协议层或者SLIP协议层。以太网可以同时连接很多个主机,每一个主机上都有一个以太网的地址。这个地址是唯一的,并且保存在以太网卡中。所以在以太网上传输IP数据包时,必须将IP数据包中的IP地址转换成主机的以太网卡中的物理地址。Linux系统使用地址解决协议(ARP)来把IP地址翻译成主机以太网卡中的物理地址。希望把IP地址翻译成硬件地址的主机使用广播地址向网络中的所有节点发送一个包括IP地址的ARP请求数据包。拥有此IP地址的目的计算机接收到请求以后,返回一个包括其物理地址的ARP应答。ARP协议不仅仅限于以太网,它还可以用于其他的物理介质,例如FDDI等。那些不能使用ARP的网络设备可以标记出来,这样Linux系统就不会试图使用ARP。系统中也有一个反向的翻译协议,叫做RARP,用来将主机的物理地址翻译成IP地址。网关可以使用此协议来代表远程网络中的IP地址回应ARP请求。

  BSD套接口

  BSD套接口是最早的网络通信的实现,它由一个只处理BSD套接口的管理软件支持。其下面是INET套接口层,它管理TCP协议和UDP协议的通信末端。UDP(UserDatagramProtocol)是无连接的协议,而TCP则是一个可靠的端到端协议。当网络中传送一个UDP数据包时,Linux系统不知道也不关心这些UDP数据包是否安全地到达目的节点。TCP数据包是编号的,同时TCP传输的两端都要确认数据包的正确性。IP协议层是用来实现网间协议的,其中的代码要为上一层数据准备IP数据头,并且要决定如何把接收到的IP数据包传送到TCP协议层或者UDP协议层。在IP协议层的下方是支持整个Linux网络系统的网络设备,例如PPP和以太网。网络设备并不完全等同于物理设备,因为一些网络设备,例如回馈设备是完全由软件实现的。和其他那些使用mknod命令创建的Linux系统的标准设备不同,网络设备只有在软件检测到和初始化这些设备时才在系统中出现。当你构建系统内核时,即使系统中有相应的以太网设备驱动程序,你也只能看到/dev/eth0。ARP协议在IP协议层和支持ARP翻译地址的协议之间。

================================网络应用程序用户层--------------------------------BSD核心层套接口层|LNET套接口层|/?\TCPUDP|IP|PPP|SLIP|Ethernet--->ARP================================

  BSD是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制。两个通信进程都用一个套接口来描述通信链路的两端。套接口可以认为是一种特殊的管道,但和管道不同的是,套接口对于可以容纳的数据的大小没有限制。Linux支持多种类型的套接口,也叫做套接口寻址族,这是因为每种类型的套接口都有自己的寻址方法。

  Linux的BSD套接口支持下面的几种套接口类型:

  1.流式(stream)

  这些套接口提供了可靠的双向顺序数据流连接。它们可以保证数据传输中的完整性、正确性和单一性。INET寻址族中的TCP协议支持这种类型的套接口。

  数据流套接口是可靠的双向连接的通信数据流。如果你在套接口中以“1,2”的顺序放入两个数据,它们在另一端也会以“1,2”的顺序到达。它们也可以被认为是无错误的传输。

  经常使用的telnet应用程序就是使用数据流套接口的一个例子。使用HTTP的WWW浏览器也使用数据流套接口来读取网页。事实上,如果你使用telnet登录到一个WWW站点的80端口,然后键入“GET网页名”,你将可以得到这个HTML页。数据流套接口使用TCP得到这种高质量的数据传输。数据报套接口使用UDP,所以数据报的顺序是没有保障的。数据报是按一种应答的方式进行数据传输的。

  2.数据报(Datagram)

  这种类型的套接口也可以像流式套接口一样提供双向的数据传输,但它们不能保证传输的数据一定能够到达目的节点。即使数据能够到达,也无法保证数据以正确的顺序到达以及数据的单一性、正确性。UDP协议支持这种类型的套接口。

  3.原始(Raw)

  这种类型的套接口允许进程直接存取下层的协议。

  4.可靠递送消息(ReliableDeliveredMessages)

  这种套接口和数据报套接口一样,只能保证数据的到达。

  5.顺序数据包(SequencedPackets)

  这种套接口和流式套接口相同,除了数据包的大小是固定的。

  6.数据包(Packet)

  这不是标准的BSD套接口类型,而是Linux中的一种扩展。它允许进程直接存取设备层的数据包。


阅读(234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~