TCP/IP and the DoD Model
DOD模型基本上就是一个浓缩版本的OSI模型,它由四层组成而不是OSI模型的七层:
·Process/Application layer 应用处理层
·Host-to-Host layer 主机到主机层
·Internet layer 网际层
·Network Access layer 网络访问层
图2.1显示了一个DOD模型和OSI参考模型的比较图,就象你所看到的,它们两个在概念上十分的相似,但是它们有不同的层数和不同的名称。
注意:当谈及IP栈上的不同的协议时,OSI参考模型和DOS模型是可以互相交换的。网际层(Internet layer)和网络层(Network layer)只不过是描述相同东西的两个不同词语,类似的有主机到主机层(Host-to-Host layer)和传输层(Transport layer)。
在DOD模型的Process/Application层上存在数量巨大的协议组合,它们结合不同的活动和功能生成焦点来对应OSI模型的上三层(应用层,表示层,会话层)。应用和处理层(Process/Application layer)定义点到点应用通信的协议并控制用户接口的规范。
主机到主机层(Host-to-Host layer)功能类似OSI模型的传输层,它定义了建立应用程序传输服务的协议。它处理问题例如建立可靠的端到端(end-to-end)的通信连接并保证无差错(error-free)的数据传送。它处理数据包的排序和维护数据的完整性。
网际层(Internet layer)相当于OSI模型的网络层,在整个网络上指定数据包的逻辑传输的关联协议。它通过指定IP地址来维护对主机的寻址,并且在多重网络中处理数据包的路由。
在DOD模型的底部,网络访问层(Network Access layer)监视着主机和网络中数据的交换。它等同于OSI模型的数据链路层和物理层。网络访问层监视硬件寻址和定义数据物理传输的协议。
DOS模型和OSI参考模型在设计,概念,和类似层上功能是这样的相似。图2.2显示了TCP/IP协议集和DOD模型上每层关联的协议。
The Process/Application Layer Protocols
下面我们来介绍应用和处理层上的常见协议:
·Telnet
telnet是一些可变的协议集合,它的特性是终端仿真。它允许用户在一个远程的客户机叫Telnet client上访问另外一台机器上的资源,这台机器叫做Telnet server。Telnet通过连接一个快的Telnet服务器并使得客户机好象一个终端直接连接到服务器的本地网络中(请分清终端和终端仿真)来完成它的使命。这种投射实际上是一种软件映射---一个虚拟的能够互相作用的终端。
这些仿真终端使用文字模式并能够执行精确的程序比如显示菜单等,这能够给用户机会来选择相应的选项来访问服务器上的东东。用户通过运行一个telnet软件并登陆进telnet服务器来开始一个telent会话。
小提示:为什么Telnet叫做Telnet呢?它的名字来源于“telephone network”,这是以前大多数telnet会话发生的地方,也叫电话交换网络。一般都是用来登陆古老的BBS(电子公告牌)。
·FTP
文件传输协议File Transfer Protocol (FTP)一般用来让我们传送文件,它能在任何使用FTP的两台机器之间完成传送文件的任务。但是!FTP并不单单是一个协议,它还是一个程序,象一个协议一样操作;象一个程序,它被用户使用来完成文件任务。FTP允许访问目录和文件并能完成几种类型的目录操作,例如重定向到另一个目录。FTP和Telnet合作来记录你登陆进FTP服务器的动作并提供文件传输服务。通过FTP访问一个主机只是第一步,然而,用户必须受到一个登陆认证的支配。一般是通过提供用户和密码来访问被系统管理员限制访问的内容。但是有时你可以采用用户名“anonymous”绕过这个认证,不过这样你可能有些东西不能访问。即使当用户象一个程序一样手动使用FTP,它的功能也限制在监听和操作目录,显示文件内容,和在主机间复制文件。它不能执行远程的程序文件。
另外要提一下的是,FTP使用21端口为大家所熟知,但是21端口只是用来传输FTP控制命令的,FTP使用20端口来传输数据。
·TFTP
简单文件传输协议Trivial File Transfer Protocol (TFTP)是简化了功能减少了体积的FTP,它不象FTP那样给你丰富的功能但是TFTP没有目录浏览的能力,它除了能够接收发送文件外什么都做不了。这个紧凑和微小的协议同样在数据分类上存在不足,比FTP发送更多更小的数据块,并且TFTP也没有认证机制,所以它是不安全的。一些站点支持它只不过是因为默认存在的安全风险。
·NFS
网络文件系统Network File System (NFS)是协议中的一颗宝石(原文中就是这样描述的),它专用于文件共享。它允许两种不同类型的文件系统能够互相操作。它象这样工作:支持NFS服务的软件运行在一个NT的服务器上,并且NFS客户软件运行在一个Unix主机,NFS允许NT服务器内存的一部分用来存储Unix文件,使Unix的用户能够使用NT主机上转化的文件,即使NT文件系统和Unix文件系统是不相同的----------它们有不同的文件权限,不同的文件名长度,不同的安全性等等等等。NFS能够同时使Unix的用户和NT的用户能够用它们各自的文件系统各自的访问方式来访问同样的文件,这不能不说是一个伟大的发明。
·SMTP
简单邮件传输协议Simple Mail Transfer Protocol (SMTP),通常我们把它称为E-mail,使用一个假脱机或者排队的办法来发送电子邮件。自从一个消息被发送到目的地,信息被假脱机到一个驱动器,一般都是磁盘。在目的地的服务软件时刻监视着这个消息队列,当它发觉新消息便处理发送消息到它们的目的地。一般我们用SMTP来发送邮件,用POP3来接收邮件。
·LPD
行式打印机监视协议The Line Printer Daemon (LPD)用来提供打印机的网络共享。
·X Window
设计来用于Client-Server操作,X-window是一个用户图形界面接口graphical user interface (GUI),它允许一个程序称作client运行在一台计算机上并且它通过一个窗口服务在另一台计算机上显示东西。
·SNMP
简单网络管理协议Simple Network Management Protocol (SNMP)搜集并操作有价值的网络信息。它从一个管理站通过固定的或者随机的时间间隔轮巡在网络上的设备来收集数据,要求它们揭露真实确定的信息。当一切都正常时,SNMP接收一些东西叫作baseline----定义一个健康网络的运行特性的报告。这个协议能象看门狗一样监视着网络,能快速通知管理员一些突发的事件。这些网络看门狗被称为代理程序(agents),当异常发生时,代理程序发送一个叫做trap的警告到管理站。
·DNS
域名名字服务Domain Name Service (DNS)解释主机名-------一般特指因特网地址名,例如 www.routersim.com。你不能够使用DNS,你只能够输入一些你想访问的设备的IP地址。一个IP地址能够在一个网络上识别主机。然而,DNS被设计来让我们的生活更加方便,想象一下:如果你想移动你的网页到一个不同的服务提供商时将发生什么?你的IP地址将改变并且没有人知道新的IP地址是什么。DNS允许你使用一个域名来指定一个IP地址。你能够改变IP地址当你想改变的时候,并且没有人知道发生了变化。
DNS用来解释一个正式域名fully qualified domain name (FQDN),举个例子: www.lammle.com or todd.lammle.com。一个正式域名是一个分级的结构,以能够逻辑地定位一个系统基于它们的域标记符。如果你想解释名称“todd”,你必须输入todd.lammle.com这个正式域名,或者有一个设备例如PC或者路由器添加你的后缀。举例,在一个cisco的路由器,你能够使用这样的命令:ip domain-name lammle.com来附加对lammle.com域名的每一个请求。如果你不需要作这个,你将要输入正式域名来获取DNS对名称的解释。
小提示:关于DNS的一件重要的事情是如果你能用IP地址来ping一个设备但是不能通过正式域名来访问,那肯定是你的DNS配置出了问题。
·DHCP/BootP
动态主机配置协议Dynamic Host Configuration Protocol (DHCP)分配一个IP地址给主机,不管是在一个小的还是大的网络环境中它使得你的管理更加方便和效率更高。大部分的硬件设备能够使用DHCP的服务,包括CISCO的路由器。
DHCP不同于BOOTP,BOOTP也能够分配一个IP地址给主机,但是需要你手动地把主机的硬件地址添加进BOOTP的地址表里。你可以把DHCP当作是一个动态的BOOTP。
但是要记住的是BOOTP能够引导一台主机,而DHCP不能。DHCP服务器能够提供很多 信息给一台主机,下面是一个DHCP服务器能够提供的信息列表:
·IP地址
·子网掩码
·域名
·默认网关
·DNS
·WINS信息
DHCP服务器甚至能够提供更多的信息给我们,但上面列出来的是最常见的。
The Host-to-Host Layer Protocols
主机到主机层的主要目的是屏蔽上层复杂的应用程序,它告诉上层“只需要给我你的数据流和一些说明,我将开始处理从你那里来的信息并准备发送”。
下面部分描述了这一层的两个协议:
·Transmission Control Protocol (TCP)
·User Datagram Protocol (UDP)
Transmission Control Protocol (TCP)
传输控制协议(TCP)从一个应用程序那里接受大块大块的信息并把它们分割成段(segments)。它编号并排序每一个段使得目的主机的TCP协议能够把那些段还原为本来应用程序需要的样子。当这些段发出去后,传送主机的TCP协议等待接收主机的TCP协议发送一个确认(acknowledgment)信号才继续发送,如果没有接收到确认信号则从新发送那些段。
在传送主机开始发送那些段之前,发送方的TCP协议就联系接收方的TCP协议来建立一个连接。这个连接一般被叫做虚电路(virtual circuit)。这种通信连接类型被叫做是面向连接的(connection-oriented)。在第一次握手(handshake)的时候,双方的TCP协议就已经商量好了在接收方还没有发回一个确认信号时就可以发送的信息的数量,当什么都商量好了的时候,当然,这个可靠的连接就将发生。
TCP是一个全双工,面向连接,可靠和精确的协议,但是为了完成前面所描述的这些名词和条件,除了错误检测外,都不是小任务。TCP是非常复杂的,并不用十分惊讶,通过概念描述的那些术语你可以想象它的网络开销是多么的大。并且今天的网络比过去的网络要更加可靠,这些附加的可靠性是通常并不需要的。
TCP Segment Format
上层把数据流发送到传输层上的协议以后,我将示范TCP怎么分段一个数据流并且把它发送到网际层(Internet layer),网际层随后把这些数据段封装成数据包并路由它们到网络上去。这些数据段将被传送到接收主机的Host-to-Host层上负责重建数据流并传送到上层应用的协议的手上。
图2.3显示了TCP数据段的格式,并显示了一些和TCP头不同的字段。
TCP头长度是20字节,或者相当于24字节的OPTIONS。
你需要理解TCP数据段格式的每一个字段的含义,数据段包括下列字段:
Source port :源主机发送数据时应用程序的端口号。
Destination port :目的主机被请求的应用程序的端口号。
Sequence number : 把数据按照正确的顺序排列或者重新传输丢失的数据或者毁坏的数据,这个处理过程叫做排序(sequencing)
Acknowledgment number :定义哪一个TCP八位位组是准备下一个传送的。
Offset :在TCP头的32位的字,它指示数据从那里开始。
Reserved :通常设置为0。
Code bits :控制功能通常用来设立和终止一个会话。
Window :确定发送者将接受的窗口机制的尺寸大小。
Checksum :因为TCP不相信低层的检查,所以使用循环冗余校验(CRC)来检查所有的东西,CRC检查TCP数据段的头部和数据。
Urgent pointer :一个有效位只有当紧急指针(Urgent pointer)出现在code bits字段时才设置,如果设置了,这个数值指示当前排序数字的偏移值。
Option :可能是0或者多位(不超过32bits)。
Data :.....数据,要指出的是它包含了上层协议的头部。
因为TCP创建了许多开销,应用程序开发者可能选择效率性而不是可靠性来减少开销,所以用户数据报协议(User Datagram Protocol)也被定义在传输层中以供选择使用。
User Datagram Protocol (UDP)
如果你拿UDP和TCP相比较,前者基本上是后者的缩小版,很多时候人们需要一个更轻薄微小的协议,就象一个瘦人在公园的凳子上,一个thin的协议不会占据太多的空间---------在这个例子中,指的是更多的网络带宽。(关于UDP协议在RFC768中有详细的描述)
在一些情形下,开发者们可以很干脆的选用UDP而不使用TCP。记住,SNMP象看门狗一样在监视着网络,间歇地发送信息和一个固定的状态更新并且提供报警功能,尤其是运行在一个大的网络中。建立,维护,和关闭每一个TCP连接的开销是远大于那一点信息的。
另一种需要UDP而不是TCP的情况是当可靠性已经在Process/Application layer处理好了,网络文件系统(NFS)可以处理自己的可靠性问题,这时使用TCP无疑是不实际和冗余的。不过最后我要说,用UDP还是TCP只有应用软件开发者们才会去考虑,而不是我们这些希望数据传输得更快的人。^_^
UDP不把数据段排序而且也不关心数据段到达目的地的顺序。它把数据发出去后就忘掉了不管它们了,它不跟踪,校验甚至连一个数据安全到达确认的消息都没有,把所有的东西都放弃掉了。正因为如此,UDP被认为是不可靠的协议,这说并不意味着UDP是无效的,这里说的不可靠仅仅指的是不可靠地处理问题而已。
UDP不创建一条虚电路,也不在传送信息之前接触目的主机,因为这样,它也被认为是无连接的协议。UDP假定应用程序们自己使用它们自己的可靠性方法,所以它不去做那些。这给了程序开发者们一个选择:当需要运行网络协议栈时,可以选择更可靠的TCP协议和传输更快的UDP协议。
UDP Segment Format
图2.4清楚的说明了UDP和TCP相比较下明显的低开销。仔细看图,你能够看出UDP不能够使用窗口机制或者提供确认在UDP头的原因吗?
弄懂UDP数据段中每一个字段的含义很重要。UDP数据段包括以下内容:
Source port :同TCP
Destination port :同TCP
Length of the segment :UDP头和UDP数据的长度。
CRC :检查UDP头和UDP数据的完整性。
Data :数据。
UDP和TCP一样,都不相信低层(lower layer),所以使用CRC来检查数据,要记住的是CRC被包含在FCS(Frame Check Sequence,帧校验序列)字段中,这就是为什么你在UDP数据段中只能看到FCS的信息的原因。
Key Concepts of Host-to-Host Protocols
自从你学习connection-oriented(TCP)和connectionless(UDP)协议以来,现在做一个总结是十分必要的。表
2.1显示了一些这两个协议的关键概念,你可以紧紧的记住它。
一个电话的比喻可以帮助你理解TCP协议怎么工作。我们都知道在你打电话给某人时,你必须首先建立一个到另外人的连接---不管他们在哪里。这就象TCP协议中的一条虚电路。如果在你们的电话交谈中你要告诉别人一些重要的消息,一般你会说:“你知道了吗?”或者是:“你听清楚了没有?”而这些就象是TCP的确认机制------它们本来就是被设计用来取得确认的。在通话的时候(尤其是有cellphone(也就是蜂窝式移动电话俗称大哥大)参加通话的时候),人们会问:“你还在那里吗?”。他们结束他们的通话时一般都会说“Goodbye”,然后把电话挂断。TCP同样有这些类型的功能。
另一方面,使用UDP就象是寄一张明信片,寄的时候你不用先通知别人收明信片,你只需要写下收件人的姓名地址和你的祝福,然后邮寄它。这和UDP的无连接方式是多么的类似啊。明信片发出去后,它上面的信息大概并不关系生死问题,所以你可以不必确认它是否被收到。同样地,UDP也不包括一个确认的功能。
Port Numbers
TCP和UDP必须使用端口号来和上层通信,因为它们需要留意同时通过网络的不同的会话。源端口号是由源主机动态分配的,并且这些号码从1024开始。1023及以下的号码已经被RFC3232定义了(或者你可以去 www.iana.org看看),这些号码被叫做保留号码,众所周知的不能被自由分配使用。
虚电路不使用保留号码而是用一个特定范围的随机的号码来代替。在一个TCP数据段中这些端口号指定了源和目的应用程序。
图2.5说明了TCP和UDP使用的端口号。
能够被使用的不同端口号解释如下:
·低于1024的是保留端口号,它们在RFC3232中被定义。
·1024及以上的端口号是可以自由使用的。它们被上层用来和其他主机建立会话 和被TCP数据段用在源和目的地址上。
你知道,源主机和目的主机都要开放端口,但为什么源主机要开放端口呢,我的朋友啊,你想想,源主机在与不同的主机进行不同的会话,那么多会话,如果没有一个源端口号的话,一个服务怎么能知道哪些信息是来往于哪个程序的呢?TCP和上层不象数据链路层和网络层的协议那样使用硬件和逻辑地址来弄清楚发送接受主机的地址。作为代替,它们使用端口号。如果所有的主机使用相同的端口号来请求FTP服务,很容易就可以想象,接收请求的服务器将十分困惑。
The Internet Layer Protocols
在DOS模型中,Internet layer之所以存在有两个主要的原因:路由选择和提供一个单一的网络接口给上层。
没有其它的上层或者下层协议能够提供任何关于路由选择的功能,这个复杂和重要的任务完全属于网际层。网际层的第二个义务是提供一个单一的网络接口给上层协议。如果没有这层,应用程序开发者们将需要在他们每一个程序中加入“hooks”来支持不同的网络访问协议。这可不仅仅是脖子会痛的问题,而是将导致不同的软件版本-------一个对应以太网,另一个对应令牌网,等等。为了防止这样的情况出现,IP提供了一个单一网络接口给上层协议。IP的工作就是使得不同类型的网络访问协议得以并存工作。
所有的网络大路都不通向罗马,它们通向IP,不单是所有网际层上工作的协议,也包括了其他上层的协议都是这样。千万不要忘记这点,所有通过DOS模型的路径都是要穿越IP的。下面我们介绍网际层上的协议:
·Internet Protocol (IP) 网际协议
·Internet Control Message Protocol (ICMP) 网际控制报文协议
·Address Resolution Protocol (ARP) 地址解析协议
·Reverse Address Resolution Protocol (RARP) 反向地址解析协议
Internet Protocol (IP)
网际协议Internet Protocol (IP)实际上就是网际层,其它在网际层上的协议存在的价值只不过是为了支持它罢了。IP占据了网际层的大部分版图,这使它有能力命令:“所有人向我看齐”,这在所有的互连网络中发生。它能够如此做是因为在网络上的所有机器都得有一个软件或者说逻辑的地址叫做IP地址。
IP查看每一个数据包的地址,然后使用一个路由选择表来选择最好的路径决定数据包下一步将被发送到哪里。DOS模型的最底层网络访问层的协议们不拥有IP的职能,它们仅仅处理物理连接上的问题。
在一个网络上确定一个设备需要回答两个问题:它在哪一个网络上?和它在网络上的ID是什么?第一个问题的答案是逻辑地址(比喻成街道),第二个问题的答案是硬件地址(比喻成门牌)。在网络上的所有主机都拥有一个逻辑的ID叫IP地址,这是一个逻辑的地址,它包含了有价值的编码信息而使得复杂的路由任务大大的减轻了。(关于IP的讨论参见RFC791)
IP从主机到主机层接收数据段并把数据段分片(fragment)成数据报(也可以叫数据包)。在接收端IP重新把数据报还原为数据段。每一个数据报被分配发送端和接收端的IP地址。路由器(OSI模型3层设备)接收数据报并根据数据报中的目的IP地址来做出路由选择的决定。
图2.6显示了一个IP头的内容。
下面的字段构成了一个IP头部:
·Version IP版本号。
·Header Length (HLEN) 32位的头部长度。
·ToS with IP Precedence Bits Type of Service(TOS)服务类型告诉我们数据报将怎么处理,前面的3位是优先权位。
·Total length 数据报的长度,包括了头部和数据内容。
·Identifier 唯一的IP数据报数值。
·Flags 指示了是否将发生分片。
·Frag offset 如果一个数据报太大了装不进一个数据帧就要把它分片,偏移值使分片能够正确组装回来。它同样允许不同的maximum transmission units (MTUs)最大传输单元存在于网络上。
·TTL 在一开始产生一个数据报时就要设置生存时间,它使得一个数据报在生存时间内还找不到目的地时被丢弃,以防止数据报在网络上不停的循环。
·Protocol 上层协议的端口(TCP使用端口6或者UDP使用端口17[都是HEX值,写作0X06,0X17]。同样支持网络层协议。
·Header checksum IP头的循环冗余校验。
·Source IP address 32位(bit)源IP地址。
·Destination IP address 32位目的IP地址。
·IP option 用来做网络测试,调试及其他。
·Data 上层的数据内容
图2.7说明了当网络层需要发送一个数据报到上层时怎么找传输层上的协议。
在这个例子里,协议字段告诉IP发送数据到TCP使用端口6或者发送到UDP使用端口17(都是16进制数值)。但是在数据流中不单只有要发送到上层的TCP或UDP数据,还有其它例如ICMP,ARP或者其他类型的网络层协议数据。
表2.2是一些常见的协议能够在协议字段中被指定的数值。
Internet Control Message Protocol (ICMP)
网际报文控制协议Internet Control Message Protocol (ICMP)工作在网络层,它被IP用来提供许多不同类型的服务。ICMP是一个管理协议并作为IP的信息服务提供者。它的消息象IP数据报一样传递。RFC1256是ICMP的一个附件,提供了发现到网关的路由的主机扩展的能力。
路由器周期性的通告整个网络,报告路由器网络接口的IP地址。主机监听这个网络信息来获得关于路由的最新情况。
小提示:RFC792描述了ICMP为什么必须被所有TCP/IP主机执行。
下面是一些关于ICMP的常见的事件和消息:
·Destination Unreachable 如果一个路由器不能发送一个IP数据报出去,它使用ICMP发送一个消息给发送数据报的主机通知这个情况。举个例子,如果一个路由器收到一个去往路由器不知道的网络的数据报,路由器将发送一个目的不可达的ICMP消息给发送数据报的主机。
·Buffer Full 如果一个路由器的接收进来数据报的内存缓冲器满了,它将使用ICMP发送这个消息直到缓冲器中的拥挤减少。
·Hops 每一个IP数据报在通过路由器时被分配一个确定的数字,叫跳(hops)。如果在到达目的地之前“跳”已经到了限定的数值,那么最后接收到这个数据报的路由器将把它喀嚓掉,然后这个杀手路由器使用ICMP发送一条目标死亡的消息,通知发送这个数据报的机器处理后事。
·Ping Ping (Packet Internet Groper)使用ICMP回送消息来检查在一个网络上主机的物理和逻辑连通性。
·Traceroute 通过使用ICMP超时设定,Traceroute被用来发现一个数据包遍历网络的路径。
小提示:PING和TRACEROUTE(也叫TRACE,微软的windows系统使用tracert)都能够用来检查你的网络的地址配置正确与否。ping程序使用字母表中的字母来做为数据包中数据的有效载荷,默认是100字节。
Address Resolution Protocol (ARP)
地址解析协议Address Resolution Protocol (ARP)从一个主机已知的IP地址来寻找它的硬件地址。它是这样工作的:当IP有一个数据报要发送的时候它必须先知道在网络上的目的主机的硬件地址的网络访问协议,例如以太网或者令牌网。如果IP在ARP缓存中找不到目的主机的硬件地址,它就使用ARP来寻找这个信息。
就象IP侦察一样,ARP通过在本地网络上发出一个广播来询问特定IP地址的主机来得到它的硬件地址,然后才能把IP地址翻译成硬件地址。要记住ARP是把IP地址解析成MAC地址的协议。
Reverse Address Resolution Protocol (RARP)
如果主机是一台无盘工作站时,它最初的时候是没有办法知道自己的IP地址的,不过还好它知道自己的MAC地址。反向地址解析协议Reverse Address Resolution Protocol (RARP)通过发出一个包含自己MAC地址的数据包来请求一个IP地址分配给这个MAC地址。一台指定的称作RARP服务器的机器响应这个请求并给出回答,到这里身份就确认完毕了。要记住的是,RARP是负责把MAC地址解析成IP地址的。
接下来的内容是进制转换和IP地址的构成这里我们忽略。有需要的读者请自行查阅相关中文资料。
要说明一下的是,例如255.255.255.255这样的地址我们称为本地广播地址,它面向本地网络中的全部主机广播。而192.168.255.255这种则叫做直接广播地址,使用这个地址直接向网络192.168.0.0中的主机广播。
私有IP地址(private IP address):节约了IP地址的空间,增加了安全性.使用私有IP地址的网络称为内网,与外部网络进行通信就必须靠网络地址翻译(network address translation,NAT)。
一些私有地址的范围:
1.A 类地址中:10.0.0.0 到10.255.255.255.255
2.B 类地址中:172.16.0.0 到172.31.255.255
3.C 类地址中:192.168.0.0 到192.168.255.255
还有一点就是子网划分的问题,我在我们学校的一些课本上都发现了这个错误。很明显象子网掩码为255.255.255.224的IP地址是不可能有8个子网和每子网32台主机的。因为根据IP地址的规则:
·IP地址的网络地址部分不能全部为“1”或全部为“0”
·IP地址的子网部分不能全部设置为“1”或全部为“0”
·IP地址的主机部分不能全部设置为“1”或全部为“0”
所以在子网掩码255.255.255.224中子网位只有3位,2的3次方为8,8个子网要除去全1和全0的子网,只能剩下6个。主机也是同样的道理,32台主机要减去2台。
DOD模型基本上就是一个浓缩版本的OSI模型,它由四层组成而不是OSI模型的七层:
·Process/Application layer 应用处理层
·Host-to-Host layer 主机到主机层
·Internet layer 网际层
·Network Access layer 网络访问层
图2.1显示了一个DOD模型和OSI参考模型的比较图,就象你所看到的,它们两个在概念上十分的相似,但是它们有不同的层数和不同的名称。
![](http://www.eviloctal.com/forum/attachment/10_593.jpg)
注意:当谈及IP栈上的不同的协议时,OSI参考模型和DOS模型是可以互相交换的。网际层(Internet layer)和网络层(Network layer)只不过是描述相同东西的两个不同词语,类似的有主机到主机层(Host-to-Host layer)和传输层(Transport layer)。
在DOD模型的Process/Application层上存在数量巨大的协议组合,它们结合不同的活动和功能生成焦点来对应OSI模型的上三层(应用层,表示层,会话层)。应用和处理层(Process/Application layer)定义点到点应用通信的协议并控制用户接口的规范。
主机到主机层(Host-to-Host layer)功能类似OSI模型的传输层,它定义了建立应用程序传输服务的协议。它处理问题例如建立可靠的端到端(end-to-end)的通信连接并保证无差错(error-free)的数据传送。它处理数据包的排序和维护数据的完整性。
网际层(Internet layer)相当于OSI模型的网络层,在整个网络上指定数据包的逻辑传输的关联协议。它通过指定IP地址来维护对主机的寻址,并且在多重网络中处理数据包的路由。
在DOD模型的底部,网络访问层(Network Access layer)监视着主机和网络中数据的交换。它等同于OSI模型的数据链路层和物理层。网络访问层监视硬件寻址和定义数据物理传输的协议。
DOS模型和OSI参考模型在设计,概念,和类似层上功能是这样的相似。图2.2显示了TCP/IP协议集和DOD模型上每层关联的协议。
![](http://www.eviloctal.com/forum/attachment/10_594.jpg)
The Process/Application Layer Protocols
下面我们来介绍应用和处理层上的常见协议:
·Telnet
telnet是一些可变的协议集合,它的特性是终端仿真。它允许用户在一个远程的客户机叫Telnet client上访问另外一台机器上的资源,这台机器叫做Telnet server。Telnet通过连接一个快的Telnet服务器并使得客户机好象一个终端直接连接到服务器的本地网络中(请分清终端和终端仿真)来完成它的使命。这种投射实际上是一种软件映射---一个虚拟的能够互相作用的终端。
这些仿真终端使用文字模式并能够执行精确的程序比如显示菜单等,这能够给用户机会来选择相应的选项来访问服务器上的东东。用户通过运行一个telnet软件并登陆进telnet服务器来开始一个telent会话。
小提示:为什么Telnet叫做Telnet呢?它的名字来源于“telephone network”,这是以前大多数telnet会话发生的地方,也叫电话交换网络。一般都是用来登陆古老的BBS(电子公告牌)。
·FTP
文件传输协议File Transfer Protocol (FTP)一般用来让我们传送文件,它能在任何使用FTP的两台机器之间完成传送文件的任务。但是!FTP并不单单是一个协议,它还是一个程序,象一个协议一样操作;象一个程序,它被用户使用来完成文件任务。FTP允许访问目录和文件并能完成几种类型的目录操作,例如重定向到另一个目录。FTP和Telnet合作来记录你登陆进FTP服务器的动作并提供文件传输服务。通过FTP访问一个主机只是第一步,然而,用户必须受到一个登陆认证的支配。一般是通过提供用户和密码来访问被系统管理员限制访问的内容。但是有时你可以采用用户名“anonymous”绕过这个认证,不过这样你可能有些东西不能访问。即使当用户象一个程序一样手动使用FTP,它的功能也限制在监听和操作目录,显示文件内容,和在主机间复制文件。它不能执行远程的程序文件。
另外要提一下的是,FTP使用21端口为大家所熟知,但是21端口只是用来传输FTP控制命令的,FTP使用20端口来传输数据。
·TFTP
简单文件传输协议Trivial File Transfer Protocol (TFTP)是简化了功能减少了体积的FTP,它不象FTP那样给你丰富的功能但是TFTP没有目录浏览的能力,它除了能够接收发送文件外什么都做不了。这个紧凑和微小的协议同样在数据分类上存在不足,比FTP发送更多更小的数据块,并且TFTP也没有认证机制,所以它是不安全的。一些站点支持它只不过是因为默认存在的安全风险。
·NFS
网络文件系统Network File System (NFS)是协议中的一颗宝石(原文中就是这样描述的),它专用于文件共享。它允许两种不同类型的文件系统能够互相操作。它象这样工作:支持NFS服务的软件运行在一个NT的服务器上,并且NFS客户软件运行在一个Unix主机,NFS允许NT服务器内存的一部分用来存储Unix文件,使Unix的用户能够使用NT主机上转化的文件,即使NT文件系统和Unix文件系统是不相同的----------它们有不同的文件权限,不同的文件名长度,不同的安全性等等等等。NFS能够同时使Unix的用户和NT的用户能够用它们各自的文件系统各自的访问方式来访问同样的文件,这不能不说是一个伟大的发明。
·SMTP
简单邮件传输协议Simple Mail Transfer Protocol (SMTP),通常我们把它称为E-mail,使用一个假脱机或者排队的办法来发送电子邮件。自从一个消息被发送到目的地,信息被假脱机到一个驱动器,一般都是磁盘。在目的地的服务软件时刻监视着这个消息队列,当它发觉新消息便处理发送消息到它们的目的地。一般我们用SMTP来发送邮件,用POP3来接收邮件。
·LPD
行式打印机监视协议The Line Printer Daemon (LPD)用来提供打印机的网络共享。
·X Window
设计来用于Client-Server操作,X-window是一个用户图形界面接口graphical user interface (GUI),它允许一个程序称作client运行在一台计算机上并且它通过一个窗口服务在另一台计算机上显示东西。
·SNMP
简单网络管理协议Simple Network Management Protocol (SNMP)搜集并操作有价值的网络信息。它从一个管理站通过固定的或者随机的时间间隔轮巡在网络上的设备来收集数据,要求它们揭露真实确定的信息。当一切都正常时,SNMP接收一些东西叫作baseline----定义一个健康网络的运行特性的报告。这个协议能象看门狗一样监视着网络,能快速通知管理员一些突发的事件。这些网络看门狗被称为代理程序(agents),当异常发生时,代理程序发送一个叫做trap的警告到管理站。
·DNS
域名名字服务Domain Name Service (DNS)解释主机名-------一般特指因特网地址名,例如 www.routersim.com。你不能够使用DNS,你只能够输入一些你想访问的设备的IP地址。一个IP地址能够在一个网络上识别主机。然而,DNS被设计来让我们的生活更加方便,想象一下:如果你想移动你的网页到一个不同的服务提供商时将发生什么?你的IP地址将改变并且没有人知道新的IP地址是什么。DNS允许你使用一个域名来指定一个IP地址。你能够改变IP地址当你想改变的时候,并且没有人知道发生了变化。
DNS用来解释一个正式域名fully qualified domain name (FQDN),举个例子: www.lammle.com or todd.lammle.com。一个正式域名是一个分级的结构,以能够逻辑地定位一个系统基于它们的域标记符。如果你想解释名称“todd”,你必须输入todd.lammle.com这个正式域名,或者有一个设备例如PC或者路由器添加你的后缀。举例,在一个cisco的路由器,你能够使用这样的命令:ip domain-name lammle.com来附加对lammle.com域名的每一个请求。如果你不需要作这个,你将要输入正式域名来获取DNS对名称的解释。
小提示:关于DNS的一件重要的事情是如果你能用IP地址来ping一个设备但是不能通过正式域名来访问,那肯定是你的DNS配置出了问题。
·DHCP/BootP
动态主机配置协议Dynamic Host Configuration Protocol (DHCP)分配一个IP地址给主机,不管是在一个小的还是大的网络环境中它使得你的管理更加方便和效率更高。大部分的硬件设备能够使用DHCP的服务,包括CISCO的路由器。
DHCP不同于BOOTP,BOOTP也能够分配一个IP地址给主机,但是需要你手动地把主机的硬件地址添加进BOOTP的地址表里。你可以把DHCP当作是一个动态的BOOTP。
但是要记住的是BOOTP能够引导一台主机,而DHCP不能。DHCP服务器能够提供很多 信息给一台主机,下面是一个DHCP服务器能够提供的信息列表:
·IP地址
·子网掩码
·域名
·默认网关
·DNS
·WINS信息
DHCP服务器甚至能够提供更多的信息给我们,但上面列出来的是最常见的。
The Host-to-Host Layer Protocols
主机到主机层的主要目的是屏蔽上层复杂的应用程序,它告诉上层“只需要给我你的数据流和一些说明,我将开始处理从你那里来的信息并准备发送”。
下面部分描述了这一层的两个协议:
·Transmission Control Protocol (TCP)
·User Datagram Protocol (UDP)
Transmission Control Protocol (TCP)
传输控制协议(TCP)从一个应用程序那里接受大块大块的信息并把它们分割成段(segments)。它编号并排序每一个段使得目的主机的TCP协议能够把那些段还原为本来应用程序需要的样子。当这些段发出去后,传送主机的TCP协议等待接收主机的TCP协议发送一个确认(acknowledgment)信号才继续发送,如果没有接收到确认信号则从新发送那些段。
在传送主机开始发送那些段之前,发送方的TCP协议就联系接收方的TCP协议来建立一个连接。这个连接一般被叫做虚电路(virtual circuit)。这种通信连接类型被叫做是面向连接的(connection-oriented)。在第一次握手(handshake)的时候,双方的TCP协议就已经商量好了在接收方还没有发回一个确认信号时就可以发送的信息的数量,当什么都商量好了的时候,当然,这个可靠的连接就将发生。
TCP是一个全双工,面向连接,可靠和精确的协议,但是为了完成前面所描述的这些名词和条件,除了错误检测外,都不是小任务。TCP是非常复杂的,并不用十分惊讶,通过概念描述的那些术语你可以想象它的网络开销是多么的大。并且今天的网络比过去的网络要更加可靠,这些附加的可靠性是通常并不需要的。
TCP Segment Format
上层把数据流发送到传输层上的协议以后,我将示范TCP怎么分段一个数据流并且把它发送到网际层(Internet layer),网际层随后把这些数据段封装成数据包并路由它们到网络上去。这些数据段将被传送到接收主机的Host-to-Host层上负责重建数据流并传送到上层应用的协议的手上。
图2.3显示了TCP数据段的格式,并显示了一些和TCP头不同的字段。
![](http://www.eviloctal.com/forum/attachment/10_595.jpg)
TCP头长度是20字节,或者相当于24字节的OPTIONS。
你需要理解TCP数据段格式的每一个字段的含义,数据段包括下列字段:
Source port :源主机发送数据时应用程序的端口号。
Destination port :目的主机被请求的应用程序的端口号。
Sequence number : 把数据按照正确的顺序排列或者重新传输丢失的数据或者毁坏的数据,这个处理过程叫做排序(sequencing)
Acknowledgment number :定义哪一个TCP八位位组是准备下一个传送的。
Offset :在TCP头的32位的字,它指示数据从那里开始。
Reserved :通常设置为0。
Code bits :控制功能通常用来设立和终止一个会话。
Window :确定发送者将接受的窗口机制的尺寸大小。
Checksum :因为TCP不相信低层的检查,所以使用循环冗余校验(CRC)来检查所有的东西,CRC检查TCP数据段的头部和数据。
Urgent pointer :一个有效位只有当紧急指针(Urgent pointer)出现在code bits字段时才设置,如果设置了,这个数值指示当前排序数字的偏移值。
Option :可能是0或者多位(不超过32bits)。
Data :.....数据,要指出的是它包含了上层协议的头部。
因为TCP创建了许多开销,应用程序开发者可能选择效率性而不是可靠性来减少开销,所以用户数据报协议(User Datagram Protocol)也被定义在传输层中以供选择使用。
User Datagram Protocol (UDP)
如果你拿UDP和TCP相比较,前者基本上是后者的缩小版,很多时候人们需要一个更轻薄微小的协议,就象一个瘦人在公园的凳子上,一个thin的协议不会占据太多的空间---------在这个例子中,指的是更多的网络带宽。(关于UDP协议在RFC768中有详细的描述)
在一些情形下,开发者们可以很干脆的选用UDP而不使用TCP。记住,SNMP象看门狗一样在监视着网络,间歇地发送信息和一个固定的状态更新并且提供报警功能,尤其是运行在一个大的网络中。建立,维护,和关闭每一个TCP连接的开销是远大于那一点信息的。
另一种需要UDP而不是TCP的情况是当可靠性已经在Process/Application layer处理好了,网络文件系统(NFS)可以处理自己的可靠性问题,这时使用TCP无疑是不实际和冗余的。不过最后我要说,用UDP还是TCP只有应用软件开发者们才会去考虑,而不是我们这些希望数据传输得更快的人。^_^
UDP不把数据段排序而且也不关心数据段到达目的地的顺序。它把数据发出去后就忘掉了不管它们了,它不跟踪,校验甚至连一个数据安全到达确认的消息都没有,把所有的东西都放弃掉了。正因为如此,UDP被认为是不可靠的协议,这说并不意味着UDP是无效的,这里说的不可靠仅仅指的是不可靠地处理问题而已。
UDP不创建一条虚电路,也不在传送信息之前接触目的主机,因为这样,它也被认为是无连接的协议。UDP假定应用程序们自己使用它们自己的可靠性方法,所以它不去做那些。这给了程序开发者们一个选择:当需要运行网络协议栈时,可以选择更可靠的TCP协议和传输更快的UDP协议。
UDP Segment Format
图2.4清楚的说明了UDP和TCP相比较下明显的低开销。仔细看图,你能够看出UDP不能够使用窗口机制或者提供确认在UDP头的原因吗?
![](http://www.eviloctal.com/forum/attachment/10_596.jpg)
弄懂UDP数据段中每一个字段的含义很重要。UDP数据段包括以下内容:
Source port :同TCP
Destination port :同TCP
Length of the segment :UDP头和UDP数据的长度。
CRC :检查UDP头和UDP数据的完整性。
Data :数据。
UDP和TCP一样,都不相信低层(lower layer),所以使用CRC来检查数据,要记住的是CRC被包含在FCS(Frame Check Sequence,帧校验序列)字段中,这就是为什么你在UDP数据段中只能看到FCS的信息的原因。
Key Concepts of Host-to-Host Protocols
自从你学习connection-oriented(TCP)和connectionless(UDP)协议以来,现在做一个总结是十分必要的。表
2.1显示了一些这两个协议的关键概念,你可以紧紧的记住它。
![](http://www.eviloctal.com/forum/attachment/10_600.jpg)
一个电话的比喻可以帮助你理解TCP协议怎么工作。我们都知道在你打电话给某人时,你必须首先建立一个到另外人的连接---不管他们在哪里。这就象TCP协议中的一条虚电路。如果在你们的电话交谈中你要告诉别人一些重要的消息,一般你会说:“你知道了吗?”或者是:“你听清楚了没有?”而这些就象是TCP的确认机制------它们本来就是被设计用来取得确认的。在通话的时候(尤其是有cellphone(也就是蜂窝式移动电话俗称大哥大)参加通话的时候),人们会问:“你还在那里吗?”。他们结束他们的通话时一般都会说“Goodbye”,然后把电话挂断。TCP同样有这些类型的功能。
另一方面,使用UDP就象是寄一张明信片,寄的时候你不用先通知别人收明信片,你只需要写下收件人的姓名地址和你的祝福,然后邮寄它。这和UDP的无连接方式是多么的类似啊。明信片发出去后,它上面的信息大概并不关系生死问题,所以你可以不必确认它是否被收到。同样地,UDP也不包括一个确认的功能。
Port Numbers
TCP和UDP必须使用端口号来和上层通信,因为它们需要留意同时通过网络的不同的会话。源端口号是由源主机动态分配的,并且这些号码从1024开始。1023及以下的号码已经被RFC3232定义了(或者你可以去 www.iana.org看看),这些号码被叫做保留号码,众所周知的不能被自由分配使用。
虚电路不使用保留号码而是用一个特定范围的随机的号码来代替。在一个TCP数据段中这些端口号指定了源和目的应用程序。
图2.5说明了TCP和UDP使用的端口号。
![](http://www.eviloctal.com/forum/attachment/10_597.jpg)
能够被使用的不同端口号解释如下:
·低于1024的是保留端口号,它们在RFC3232中被定义。
·1024及以上的端口号是可以自由使用的。它们被上层用来和其他主机建立会话 和被TCP数据段用在源和目的地址上。
你知道,源主机和目的主机都要开放端口,但为什么源主机要开放端口呢,我的朋友啊,你想想,源主机在与不同的主机进行不同的会话,那么多会话,如果没有一个源端口号的话,一个服务怎么能知道哪些信息是来往于哪个程序的呢?TCP和上层不象数据链路层和网络层的协议那样使用硬件和逻辑地址来弄清楚发送接受主机的地址。作为代替,它们使用端口号。如果所有的主机使用相同的端口号来请求FTP服务,很容易就可以想象,接收请求的服务器将十分困惑。
The Internet Layer Protocols
在DOS模型中,Internet layer之所以存在有两个主要的原因:路由选择和提供一个单一的网络接口给上层。
没有其它的上层或者下层协议能够提供任何关于路由选择的功能,这个复杂和重要的任务完全属于网际层。网际层的第二个义务是提供一个单一的网络接口给上层协议。如果没有这层,应用程序开发者们将需要在他们每一个程序中加入“hooks”来支持不同的网络访问协议。这可不仅仅是脖子会痛的问题,而是将导致不同的软件版本-------一个对应以太网,另一个对应令牌网,等等。为了防止这样的情况出现,IP提供了一个单一网络接口给上层协议。IP的工作就是使得不同类型的网络访问协议得以并存工作。
所有的网络大路都不通向罗马,它们通向IP,不单是所有网际层上工作的协议,也包括了其他上层的协议都是这样。千万不要忘记这点,所有通过DOS模型的路径都是要穿越IP的。下面我们介绍网际层上的协议:
·Internet Protocol (IP) 网际协议
·Internet Control Message Protocol (ICMP) 网际控制报文协议
·Address Resolution Protocol (ARP) 地址解析协议
·Reverse Address Resolution Protocol (RARP) 反向地址解析协议
Internet Protocol (IP)
网际协议Internet Protocol (IP)实际上就是网际层,其它在网际层上的协议存在的价值只不过是为了支持它罢了。IP占据了网际层的大部分版图,这使它有能力命令:“所有人向我看齐”,这在所有的互连网络中发生。它能够如此做是因为在网络上的所有机器都得有一个软件或者说逻辑的地址叫做IP地址。
IP查看每一个数据包的地址,然后使用一个路由选择表来选择最好的路径决定数据包下一步将被发送到哪里。DOS模型的最底层网络访问层的协议们不拥有IP的职能,它们仅仅处理物理连接上的问题。
在一个网络上确定一个设备需要回答两个问题:它在哪一个网络上?和它在网络上的ID是什么?第一个问题的答案是逻辑地址(比喻成街道),第二个问题的答案是硬件地址(比喻成门牌)。在网络上的所有主机都拥有一个逻辑的ID叫IP地址,这是一个逻辑的地址,它包含了有价值的编码信息而使得复杂的路由任务大大的减轻了。(关于IP的讨论参见RFC791)
IP从主机到主机层接收数据段并把数据段分片(fragment)成数据报(也可以叫数据包)。在接收端IP重新把数据报还原为数据段。每一个数据报被分配发送端和接收端的IP地址。路由器(OSI模型3层设备)接收数据报并根据数据报中的目的IP地址来做出路由选择的决定。
图2.6显示了一个IP头的内容。
![](http://www.eviloctal.com/forum/attachment/10_598.jpg)
下面的字段构成了一个IP头部:
·Version IP版本号。
·Header Length (HLEN) 32位的头部长度。
·ToS with IP Precedence Bits Type of Service(TOS)服务类型告诉我们数据报将怎么处理,前面的3位是优先权位。
·Total length 数据报的长度,包括了头部和数据内容。
·Identifier 唯一的IP数据报数值。
·Flags 指示了是否将发生分片。
·Frag offset 如果一个数据报太大了装不进一个数据帧就要把它分片,偏移值使分片能够正确组装回来。它同样允许不同的maximum transmission units (MTUs)最大传输单元存在于网络上。
·TTL 在一开始产生一个数据报时就要设置生存时间,它使得一个数据报在生存时间内还找不到目的地时被丢弃,以防止数据报在网络上不停的循环。
·Protocol 上层协议的端口(TCP使用端口6或者UDP使用端口17[都是HEX值,写作0X06,0X17]。同样支持网络层协议。
·Header checksum IP头的循环冗余校验。
·Source IP address 32位(bit)源IP地址。
·Destination IP address 32位目的IP地址。
·IP option 用来做网络测试,调试及其他。
·Data 上层的数据内容
图2.7说明了当网络层需要发送一个数据报到上层时怎么找传输层上的协议。
![](http://www.eviloctal.com/forum/attachment/10_599.jpg)
在这个例子里,协议字段告诉IP发送数据到TCP使用端口6或者发送到UDP使用端口17(都是16进制数值)。但是在数据流中不单只有要发送到上层的TCP或UDP数据,还有其它例如ICMP,ARP或者其他类型的网络层协议数据。
表2.2是一些常见的协议能够在协议字段中被指定的数值。
![](http://www.eviloctal.com/forum/attachment/10_601.jpg)
![](http://www.eviloctal.com/forum/attachment/10_602.jpg)
Internet Control Message Protocol (ICMP)
网际报文控制协议Internet Control Message Protocol (ICMP)工作在网络层,它被IP用来提供许多不同类型的服务。ICMP是一个管理协议并作为IP的信息服务提供者。它的消息象IP数据报一样传递。RFC1256是ICMP的一个附件,提供了发现到网关的路由的主机扩展的能力。
路由器周期性的通告整个网络,报告路由器网络接口的IP地址。主机监听这个网络信息来获得关于路由的最新情况。
小提示:RFC792描述了ICMP为什么必须被所有TCP/IP主机执行。
下面是一些关于ICMP的常见的事件和消息:
·Destination Unreachable 如果一个路由器不能发送一个IP数据报出去,它使用ICMP发送一个消息给发送数据报的主机通知这个情况。举个例子,如果一个路由器收到一个去往路由器不知道的网络的数据报,路由器将发送一个目的不可达的ICMP消息给发送数据报的主机。
·Buffer Full 如果一个路由器的接收进来数据报的内存缓冲器满了,它将使用ICMP发送这个消息直到缓冲器中的拥挤减少。
·Hops 每一个IP数据报在通过路由器时被分配一个确定的数字,叫跳(hops)。如果在到达目的地之前“跳”已经到了限定的数值,那么最后接收到这个数据报的路由器将把它喀嚓掉,然后这个杀手路由器使用ICMP发送一条目标死亡的消息,通知发送这个数据报的机器处理后事。
·Ping Ping (Packet Internet Groper)使用ICMP回送消息来检查在一个网络上主机的物理和逻辑连通性。
·Traceroute 通过使用ICMP超时设定,Traceroute被用来发现一个数据包遍历网络的路径。
小提示:PING和TRACEROUTE(也叫TRACE,微软的windows系统使用tracert)都能够用来检查你的网络的地址配置正确与否。ping程序使用字母表中的字母来做为数据包中数据的有效载荷,默认是100字节。
Address Resolution Protocol (ARP)
地址解析协议Address Resolution Protocol (ARP)从一个主机已知的IP地址来寻找它的硬件地址。它是这样工作的:当IP有一个数据报要发送的时候它必须先知道在网络上的目的主机的硬件地址的网络访问协议,例如以太网或者令牌网。如果IP在ARP缓存中找不到目的主机的硬件地址,它就使用ARP来寻找这个信息。
就象IP侦察一样,ARP通过在本地网络上发出一个广播来询问特定IP地址的主机来得到它的硬件地址,然后才能把IP地址翻译成硬件地址。要记住ARP是把IP地址解析成MAC地址的协议。
Reverse Address Resolution Protocol (RARP)
如果主机是一台无盘工作站时,它最初的时候是没有办法知道自己的IP地址的,不过还好它知道自己的MAC地址。反向地址解析协议Reverse Address Resolution Protocol (RARP)通过发出一个包含自己MAC地址的数据包来请求一个IP地址分配给这个MAC地址。一台指定的称作RARP服务器的机器响应这个请求并给出回答,到这里身份就确认完毕了。要记住的是,RARP是负责把MAC地址解析成IP地址的。
接下来的内容是进制转换和IP地址的构成这里我们忽略。有需要的读者请自行查阅相关中文资料。
要说明一下的是,例如255.255.255.255这样的地址我们称为本地广播地址,它面向本地网络中的全部主机广播。而192.168.255.255这种则叫做直接广播地址,使用这个地址直接向网络192.168.0.0中的主机广播。
私有IP地址(private IP address):节约了IP地址的空间,增加了安全性.使用私有IP地址的网络称为内网,与外部网络进行通信就必须靠网络地址翻译(network address translation,NAT)。
一些私有地址的范围:
1.A 类地址中:10.0.0.0 到10.255.255.255.255
2.B 类地址中:172.16.0.0 到172.31.255.255
3.C 类地址中:192.168.0.0 到192.168.255.255
还有一点就是子网划分的问题,我在我们学校的一些课本上都发现了这个错误。很明显象子网掩码为255.255.255.224的IP地址是不可能有8个子网和每子网32台主机的。因为根据IP地址的规则:
·IP地址的网络地址部分不能全部为“1”或全部为“0”
·IP地址的子网部分不能全部设置为“1”或全部为“0”
·IP地址的主机部分不能全部设置为“1”或全部为“0”
所以在子网掩码255.255.255.224中子网位只有3位,2的3次方为8,8个子网要除去全1和全0的子网,只能剩下6个。主机也是同样的道理,32台主机要减去2台。
相关热门文章
给主人留下些什么吧!~~
评论热议