1.2 TCP/IP
1.2.1 OSI概述
1.2.1.1为什么需要网络标准
您也许认为,在计算机之间建立通信,就是确保数据由一台计算机流向另一台计算机的问题。其实不然,由于各种计算机都不尽相同,所以它们之间的数据传输要比想象中的复杂得多。
计算机公司设计制造各种型号的计算机,以适应不同的需求,总体上都遵循一般的原理,但实现细节上必然受到人们主观思想和观念的影响。不同的计算机有各自不同的体系结构,使用不同的语言,采用不同的数据存储格式,以不同的速率进行通信。彼此间如果不兼容,通信也就非常困难。那么计算机是怎样实现通信的呢?
先来看看不同国家的商业代表是如何沟通的。他们每个人都讲不同的语言,所以需要翻译。此外,他们必须共同遵守一个协议,这个协议规定了他们以怎样的方式、规则进行讨论。否则,讨论将是毫无秩序的。只有每个成员都遵守这一协议,才能保证讨论有条不紊地进行。
同样,计算机间互相通信也需要协议以诀定按哪种方式来“说话”。问题随之而来:协议多种多样,如果各大厂商遵循不同的协议,那也就无协议可言了。如果大家能够认同一个公共协议的话,那么这个协议就成为所有人都必须遵循的标准协议。
然而,这就像让所有人都认同一种计算机体系结构一样,是不切实际的。不同的设计者的理念、思维方式、目标都不一样,因此,出现了许多不同的标准。有幸的是,一些机构致力于在飞速发展的通信领域中确立行业规范,井已经取得了巨大的成就。
1.2.1.2常见的标准化组织
(1)国际标准化组织(ISO)。ISO是一个世界性组织,包括许多国家的标准团体。它最有意义的工作在于它对开发系统的研究,定义了众所周知的 OSI(Open System Interconnect,开放系统互连参考)七层模型。
(2)电气和电子工程师协会(IEEE)。IEEE是世界上最大的专业技术团体,主要开发数据通信标准。它在通信领域最著名的研究成果要数IEEE 802局域网系列标准。
(3)互联网工程任务组(IETF)。IETF是全球互联网最具权威的技术标准化组织,分为许多工作组。IETF的主要任务是负责互联网相关技术规范的研发和制定,如路由协议、AAA、TCP/IP和IPv6核心协议、网络安全等。
(4)国际电信联盟(ITU)。ITU是联合图的一个专门机构,主管信息通信技术事务。下辖的ITU-T负责制定远程通信的相关标准,广为使用的G系列、H系列、V系列标准都出自ITU-T。
(5)美国国家标准学会(ANSI)。ANSI是一个非营利性质的民间标准化团队,同时也是ISO的一个成员。它所涉及的标准化领域非常广泛,也包括通信领域。大家熟悉的ASCII码就是由ANSI制定的。
(6)电子工业协会(EIA)。美国电子行业标准制定者之一,同时也是ANSI的成员。首要课题是设备间的电气连接和数据的物理传输。最广为人知的EIA标准是RS232。
1.2.1.3 OSI模型
OSI模型由国际标准化组织ISO制定,目的是实现各种网络协议的国际标准化,以解诀各种体系结构的网络互联问题,如图1-8所示。
图1-8 OSI模型
OSI 模型将网络的工作分为7个层次,每层完成一定的网络功能,这些功能由网络设备和协议来实现,7个层次协同完成网络通信。在一个网络中,由于分工不同,各种网络设备所对应的网络层次也是不同的。OSI各层功能见表1-2。
表1-2 OSI各层功能
1.2.1.4 OSI层次关系
OSI 定义了开放系统的层次结构、层次之间的相互关系以及各层的功能,它作为一个框架来协调和组织各层所提供的服务。网络分层将网络设备的数据转发、打包或拆包、控制信息的加载或拆出等工作,分别由不同的软硬件模块来完成,这样可以将往来通信和网络互连这一复杂的问题变得较为简单。
分层有以下优点:
(1)降低复杂度,使程序容易修改,加快了产品开发速度;
(2)层与层之间可以使用标准接口,方便工程模块化;
(3)每层使用直接下层的服务,便于记住每层功能;
(4)使网络互联变得更加灵活,创建了一个良好的互联环境。
每个层次都利用下一层提供的服务与对等层进行通信。在通信的时候,数据的发送端自上而下通过七层完成数据发送,而接收端自下而上完成数据接收,就像图1-9展示的那样。但是,井不是通信的全过程都需要经过OSI的全部7个层次,有的只需要用到下三层。比如,终端PC间QQ聊天,两端PC发送和接收数据必须使用到全部7个层次,而中间的路由器只关心数据如何传送,不关心数据格式等内容,故只需要用到下三层。总之,双方的通信是在对等层次上进行的,不能在不对称层次上进行通信。
图1-9 OSI模型的通信流程
1.2.2 TCP/IP概述
1.2.2.1 TCP/IP概念
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)实际上是一组协议的集合,因此称之为协议栈,其核心协议是TCP和IP。TCP/IP定义了电子设备如何连入互联网,以及数据如何在它们之间传输的标准。
TCP/IP 最初为ARPAnet 设计,经过十几年的研究,它被不断完善和推广,被全球各大企业和高校所接受。自1983年开始,TCP/IP逐渐成为互联网所有主机间的共同协议,作为一种必须遵循的规则被肯定和应用至今。
1.2.2.2 TCP/IP分层
TCP/IP 为四层结构,上层通过使用下层提供的服务来完成自己的功能,如图1-10所示。TCP/IP关注的是网络互联,所以它所设计的协议重点在传输层与网络层,向上支持各类应用程序,向下可对接各种数据链路层协议,这种设计思路极大地提高了TCP/IP与其他协议的兼容性,使它成了实际上的互联网互联标准。
举个例子,一个FTP的客户端,它本身归属应用层,它在与FTP服务器端通信时,需要用到TCP来建立端到端的连接,通过IP地址来定位对方,通过以太网卡和网线来进行信号传输。
1.2.2.3 TCP/IP与OSI的对比
既然OSI不是现实中的互联网互连标准,为什么我们还要去了解它呢?
因为了解OSI的分层体系以及详细的层次功能,有助于我们了解通信的基本流程,让我们知道在收发数据的过程中主机和网络设备都完成了哪些工作。后续我们要学习的各种协议,包括TCP/IP中的协议,都可以在OSI模型中找到它的定位。TCP/IP与OSI对比见表1-3。
图1-10 TCP/IP
表1-3 TCP/IP与OSI对比
1.2.3 封装与解封装
在发送端,数据由应用产生,它被封装在传输层的段中,该段再封装到网络层报文包中,网络层报文包再封装到数据链路帧,以便在所选的介质上传送。当接收端接收到数据时,是解封装过程。当数据沿着协议栈向上传递时,首先检查帧的格式,诀定网络类型;然后去掉帧的格式,检查内含的报文包,诀定传输协议,将数据送至某个传输层处理;最后将数据递交给正确的应用程序。封装与解封装流程如图1-11所示。
图1-11 封装与解封装流程
1.2.4 TCP/IP层次和协议
1.2.4.1应用层
应用层对应于OSI模型的上三层,主要是为用户提供所需的服务。这些服务是与终端用户相关的数据处理、认证、压缩等,此外应用层还负责告诉传输层哪个数据流由哪个应用程序发出。
应用层包含一些常见的协议(FTP、TFTP、SMTP、SNMP、Telnet、DNS、HTTP等),还包含大量基于TCP/IP开发的商业应用。
1.2.4.2传输层
传输层包含两个协议TCP和UDP,其主要功能如下。
(1)分割(发送时)与重组(接收时)上层应用程序产生的数据。分割后的数据附加上传输层的控制信息,这些附加的控制信息由于是加在应用层数据的前面,因此叫作头部信息。
(2)为通信双方建立端到端的连接。为了知道自己在为哪个上层的应用程序服务,以将数据准确地送达目标程序,有必要对应用程序进行标识,这个标识就是端口号。
1.端口号
没有端口号,TCP/IP就分不清数据应该送给哪一个上层应用进行处理。如果把应用层程序比喻成一个百货商场中的各个店铺,那么端口号就是这些店铺的门牌。我们要看电影,就去4F-01的影城;要喝果汁,就去3F-13的冷饮店;要买护肤品,就去1F-10化妆品柜台等。
端口号包含在传输层协议段头部当中,长度是16bit,转化为十进制后的范围是1~65 535。这些端口号由IANA(Internet Assigned Numbers Authority,Internet号码分配机构)分配管理。其中,低于255的端口号保留,用于公共应用;255~1023的端口号分配给各个公司,用于特殊应用;对于高于1023的端口号,称为临时端口号,IANA未做规定。
常见的TCP端口号有HTTP 80、FTP20/21、Telnet 23、SMTP 25等;常见的保留UDP端口号有DNS 53、BootP 67(Server)/68(Client)、TFTP 69、SNMP 161等,如图1-12所示。
端口分为源端口和目的端口。当源主机向目的主机发送数据时,目的端口表示要去找目的主机上的哪个程序,源端口代表来自于源主机的哪个进程。当目的主机回应源主机时,会把之前的源端口设为目的端口进行发送。
图1-13是主机利用端口号进行通信的过程。
对于主机A,源端口号没有特别的要求,只需保证该端口号在本机上是唯一的就可以了。一般从1023以上找出空闲的临时端口号进行分配。
图1-12端口号
图1-13源和目的端口号1
如图1-14所示,有时候会出现同一个源主机向目的主机某一应用发起多次连接,注意目的端口号始终对应目的应用程序,源端口号在同一源主机上必须不同。请思考一下,如果是不同源主机来Telnet路由器B,这些源主机的源端口号可以相同吗?为什么?
图1-14源和目的端口号2
2.TCP
TCP为上层应用程序提供可靠的、面向连接的传送服务,井且能对流量进行控制,所以它的传输质量是比较高的。
为确保更好的传输质量,TCP在段头部中加入了控制信息,让我们来看看TCP的段头部是怎样的。
如图1-15所示,TCP段头部长度至少20 byte,在某些情况下还需要使用到Option(最大40 byte),则段头长度相应增加,但总长度不会超过60 byte。下面为大家介绍TCP的数据传送流程及特点。
图1-15 TCP段头部
(1)序列号和确认号
TCP使用序列号和确认号来确保数据传输的可靠性。在发送端用序列号来标识它所发送的数据流,每发送一个数据段,序列号的值便相应增加。有了序列号,接收端就可以按顺序将各个段组装起来,还原为上层数据。如果传输过程中由于网络质量不好或者其他原因,造成有的数据段没有被接收,接收端可根据序列号发现哪些是丢失的段。注意,序列号对每字节进行计数,段头中的序列号是整段第一个字节的编号。
确认号用于接收端向发送端要求下一个预期的序列号,表示这之前的序列号对应的数据已经全部接收完毕。发送端收到确认后,发送下一个数据段,段中序列号与之前接收端发来的确认号相同。
发送端为已发送的数据段设置一个计时器,一段时间内没有收到确认,会重新发送。TCP的这种重传机制大大增加了传输的可靠性,保障了数据的完整性。
另一方面,有的时候网络会存在延迟,即有的数据段由于网络堵车,到达时间会比预期的晚很多。在堵车过程中,发送端由于收不到确认会再次发送序列号相同的数据段,这样接收端就收到两个一样的段。重复的数据对接收端来说是没用的,甚至会影响应用程序的正常使用。这时,TCP把重复序列号的数据丢弃,避免数据重复。
由于TCP是全双工发送数据的,即收发可以同时进行,所以是两端互相发送互相确认。
如果A向B发送的数据段,每段数据大小是1000 byte;B向A发送的段每段数据大小是800 byte;请问图1-16中的“???”处确认号是多少?(2)标志域
如图1-17所示,标志域包含6 bit,每个比特代表不同含义,有0、1两个取值。
图1-16序列号和确认号
图1-17 TCP中的Code bits
之前提到过,TCP是面向连接的。TCP在传输数据前,会通过三次握手先建立一个逻辑连接,在建立连接过程中协商一些传输参数,确保传输中不易出错。连接建立后开始数据传输,传完后则通过第四次握手关闭连接。
图1-18中,ACK为段头部中有无确认号的标志位,有确认时ACK=1,无则ACK=0。SYN为建立连接的指示位,SYN=1表示TCP申请建立连接,只在第三次握手时才出现;SYN=0表示不建立连接申请。FIN为关闭连接的指示位,FIN=1表示TCP申请关闭连接,只在第四次握手时才出现;FIN=0表示不关闭连接的申请。
结合前面讲的序列号和确认号,举个例子来理解TCP的工作机制。
假设打算运输一批货物到A港口,就要去和对方协商什么时候入港会有泊位,还要了解港口泊位能停泊多大吨位的船只,这便是提前建立逻辑连接。
出发前将货物按顺序编号,将第一船货物运往港口卸货。卸货完毕的空船返回发货地,装载第二船货物继续运送。一船一船顺序运出的货物编号就像序列号,空船返回就是确认号。如果在预估的时间内没有看到返回的空船,则认为运输中途可能出现了意外,会重新安排一艘船运输可能丢失的货物。
当所有货物运输完毕,双方互相确认,一次运输圆满结束。
有的读者会问,为什么建立连接是三次握手,而关闭连接需要四次?因为建立连接时还没有数据传输,收到对方申请后,主机可以在确认对方SYN的同时也发起连接申请。但数据传输开始后,TCP连接在两个方向上能同时传送数据,一个方向传完了而另一个方向可能还没有传完,因此每个方向必须单独进行关闭。一个方向的连接关闭后,另一个方向还可以继续传,直到它也传完了再进行关闭。两个方向关闭的过程不一定是接连发生的,统称为四次握手。
(3)窗口
窗口是TCP的流量控制手段。窗口大小由接收端发给发送端,表示想接收的数据大小,从而可以限制发送端的发送速率。接收端接收的数据会存入缓存中,如果发送速率过快,接收端缓存来不及存入,就会造成缓存溢出,多余的数据被丢弃;而如果发送速率过慢,又会造成传输效率太低。所以,接收端可以根据自身情况,在传输过程中随时调整窗口大小,及时通知发送端自己的接收能力。这种可以改变大小的窗口,叫作滑动窗口,调节的过程如图1-19所示。窗口的单位是字节(byte)。
图1-18 TCP工作流程
图1-19 TCP的滑动窗口
通过前面的描述,我们了解了TCP超时重传、面向连接、流量控制的工作机制,这些机制极大地提高了TCP的传输质量,同时也带来了一定的副作用,即传输的效率会打折扣。因此,那些把可靠性放在第一位的应用往往选择TCP来完成传输。
比如我们浏览网页时,可能不会特别在意网页内容是否在1~2s被刷新出来,以及所关注网页的内容能否完全展现,这便需要TCP来保障。另一个例子,在相隔数万米的两台PC之间传输文件,如果丢失任何字节都会使文件无法打开,那么基于TCP的传输协议会是好的选择。
3.UDP
UDP为上层应用程序提供不可靠的、无连接的传送服务。
图1-20为一个UDP的段头部信息,可以看到它的内容要比TCP简单得多。不可靠指的是不需要为数据编号和确认,无连接指不需要建立逻辑连接,这样它的传输效率就得到了很大提升,所以它的优点是高效传送。而较小的段头使得它的开销也小,带宽利用率比TCP要高一些。
图1-20 UDP段头部
UDP的发送方只管把应用层数据封装发送,就算完成任务,至于对方是否收到,接收能力如何,接收的顺序是否正确,统统不考虑,这样它的传输质量势必受到很大影响。应用层协议在使用UDP时,必须考虑到这些问题,如超时重传、数据编号、流量控制等,所以说UDP的传输质量由它的上层应用程序来保障。
高效的特点使 UDP 被广泛应用于实时性要求高的业务领域,如网络电话、网络电视、视频会议、机场航班信息滚动屏幕等。这些业务更加注重数据发送的连续性,在可靠性方面可以做出小小牺牲(比如打网络电话时偶尔会有一两个字听不清)。为了获取更好的UDP传送效果,一方面是尽量为UDP提供良好的网络环境,如足够的带宽、高性能的网络设备;另一方面,就要靠应用程序来提供可靠性了。
4.TCP与UDP对比
TCP与UDP对比如表1-4所示。
表1-4 TCP和UDP的对比
续表
1.2.4.3网络层
TCP/IP的网络层的主要功能是编址(IP地址)、路由、数据打包。网络层包含5个协议,其中IP是核心协议。
1.IP
如图1-21所示,IP(Internet Protocol,网际协议)赋予主机IP地址,以便完成对主机的寻址;它与各种路由协议协同工作,寻找目的网络的可达路径;同时IP还能对数据包进行分片和重组。IP不关心数据报文的内容,提供无连接的、不可靠的服务。
图1-21 IP的主要功能
接下来介绍IP的一些细节。
图1-22为一个IPv4包的格式,在左上角Version字段里会指出这是版本4的IP包,如果是IPv6,包头格式会有所不同,这里不做讨论。如未做特别说明本书所有“IP”均代表IPv4。IP包头分为两个部分固定长度部分和可选部分。固定长度部分是20 byte,每个IP包必须包含这20 byte。可选项最长32 byte,在某些特殊场景中使用,本书暂不讨论。接下来就IP包头中一些重要字段,来与大家一起了解IP的原理和应用。
(1)优先级和服务类型
优先级和服务类型(Priority & Type of Service)共8 bits,主要用于IP包传输过程中的服务质量控制。在网络中有时候会出现堵塞的现象,有可能是由带宽不足引起,也可能是设备的转发能力不足引起,总之堵塞的出现会导致某些重要业务丢包,影响业务的正常使用。比如说在看网络电视的时候,网络堵塞会造成画面延迟、出现马赛克的现象。对于这种现象,解诀方案是把不同业务分等级,让等级高的优先占用带宽得以转发。怎么为不同的业务分等级呢?就通过这个优先级和服务类型字段来实现。
如图1-23,把优先级和服务类型当中的6 bits整合起来,称为DSCP(Differentiated Services Code Point,差分服务代码点),从而得到0~63个优先级,值越高则获取网络资源的优先级越高。要将某种业务在网络中的优先等级提高,只需要赋予此业务的IP包更大的DSCP值即可,如图1-23所示。
图1-22 IPv4包的格式
图1-23 DSCP及其应用
(2)包标识
包标识(Identification)唯一标识主机发送的每个 IP 数据包,每发送一个包它的值就会加1。
(3)分片标志
首先说明一下为什么要分片。我们知道IP承载于网络接口层协议(实际上对应OSI的数据链路层协议)之上,这些协议把IP包封装成帧,每一帧允许传输的数据量是有限的,这个限制叫作MTU(Maximum Transmission Unit,最大传输单元)。MTU包括IP包头及IP包中的上层数据,不包括数据链路层帧头和帧尾。每个数据链路层协议MTU不一样,由协议自身的特性诀定。
以Ethernet(以太网)为例,常见的以太网帧如图1-24所示。
图1-24常见的以太网帧
DATA包括上层协议的报文头,比如UDP段头。如果一个IP包的DATA部分太大,使得IP报头+DATA的长度超过1 500 byte,那么IP会进行分片,使得每一片的大小在1 500 byte内。
分片标志(Flags)当中一共有3个字段,如图1-25所示。
图1-25分片标志字段
R:保留未用。
DF:即Don't Fragment(“不分片”位)。如果DF=1,表示不允许分片;默认状态下DF=0,表示可以分片。如果在需要分片的情况下DF=1,那么这个IP将被丢弃。
MF:即More Fragment(“更多的片”)。在一个IP包被分片后,MF=1的片表示后面还有其他分片;MF=0表示这一片就是多个分片中的最后一片。
(4)片偏移
片偏移(Fragment offset)为分片后,在该片偏移原始数据包开始处的位置,偏移的字节数是该值乘以8。通过这个值接收端可以按顺序将多个分片组装还原。
图1-26是一个IP分片的例子。
假设IP包要传送的DATA长度是4 000 byte,来看看IP包如何分片。注意,每一片都有自己的IP包头,同一个包的多个分片Identification值应该是一致的。
图1-26 IP包分片示例
(5)生存时间
生存时间(Time to live,TTL)的单位为hop(跳,每一跳代表一个路由器)。TTL值设置了 IP 能被路由器转发的最大次数。TTL 的初始值由源主机设置,IP 包一旦到达某个路由器,路由器将TTL减去1,TTL≠0,则转发此包,若减1后TTL=0,路由器停止转发此包。
TTL有两个用途,一是可以避免由于网络环路造成的IP包无限循环转发,占用大量网络资源的问题;二是可以通过设置TTL值来控制IP发送的范围。
图1-27中4个路由器之间存在路由环路,即IP包会在此环路上反复转发,这种情况可能是由错误的配置引起的。当IP包进入此环路后,在转发过程中,TTL值逐一减少,直到TTL=0时停止转发。
举个例子:图1-28中,视频服务器想要控制视频节目只能被家属区收看到,可以通过设置初始TTL值来实现。
(6)协议
协议(Protocol)共8 bit,用于指出被IP承载的是哪一个上层协议。如图1-29所示,每一个上层协议由唯一的协议号来标识,常见的有 TCP=17,UDP=6,ICMP=1,OSPF=89,可以看出这些上层协议不一定属于传输层。
图1-27 TTL的应用1
图1-28 TTL的应用2
图1-29 IP包头中的协议号
(7)源IP地址和目的IP地址
源IP地址(Source IP Address)代表IP包从哪里发出来,目的IP地址(Destination IP Address)表示目的地。路由器通过检查目的IP地址与自身路由表的匹配关系来诀定如何转发IP包。
如图1-30所示,IP地址有两种表达方式——十进制和二进制。在配置主机和网络设备的时候使用十进制,主要是为了方便记忆,设备自身会将十进制转换成二进制来计算。
关于IP地址的进一步介绍,请大家参考1.2.5节。
图1-30 IP地址的两种表示
2.网际控制消息协议
网际控制消息协议(Internet Control Message Protocol,ICMP)是一个在IP主机、路由器之间产生井传递控制消息的协议,这些控制消息包括各种网络差错或异常的报告,比如主机是否可达、网络连通性、路由可用性等。设备发现网络问题后,产生的 ICMP消息会被发回给数据最初的发送者,以便他了解网络状况。
ICMP 井不直接传送数据,也不能纠正网络错误,但作为一个辅助协议,它的存在仍很有必要。因为IP自身没有差错控制的机制,ICMP能帮助判断出网络错误的所在,以便快速解诀问题。
最常见的ICMP应用案例就是“Ping”和“Trace”。
“Ping”这个词源于声呐定位操作,目的是为了测试另一台主机是否可达。下面来看看Ping的实现过程。
图1-31中,A向B发起回声请求,这个ICMP包被B收到后,会产生一个ICMP的回声应答发回给A。如果A能收到这个回声应答,会反馈B的可达信息。如果A在一段时间内收不到回声应答,会反馈请求超时的信息。
图1-31 Ping流程
“Trace”主要是用来进行路径跟踪,通过它可以知道源到目的主机经过了多少跳、都是哪些设备。如果中间网络有故障,“Trace”只会列出到达这个故障点之前经过了哪些设备,从而很直观地帮助我们定位出故障点在哪里。所以“Trace”是一个非常简单易用的故障定位工具。
下面来看看“Trace”的工作过程。
如图1-32所示,源主机A首先向目的主机B发送TTL=1的“Echo request”报文,这个报文在 R1处因为TTL 递减为0而被 R1所丢弃,R1同时产生一个“Time-to-live exceeded”的ICMP报文发往源主机A,此报文的源IP地址为R1的IP。这样A便知道了去往B所经过的第一个设备的IP地址。接下来A顺序发送TTL=2、TTL=3…的“Echo request”报文,继续探知其他路由器的IP地址,直到B收到“Echo request”报文,由于它自身是此报文的目的主机,它会回应一个“Echo reply”给A,A收到这个Ping的回应,认为目标已到达,整个Tracert流程就结束了。
3.ARP
已知对方的IP地址,采用ARP(Address Resolution Protocol,地址解析协议)去获取对方MAC地址。
数据链路层协议(如以太网)有自己的寻址机制(48 bit地址),这是使用数据链路的任何网络层都必须遵从的。当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据48 bits的以太网地址来确定目的接口的。设备驱动程序从不检查IP数据报中的目的IP地址。以太网采用的地址称为MAC(Media Access Control)地址。一个MAC地址的例子:00 : D0 : D0 : 03 : 5B : EA。其中前6位十六进制数代表生产厂商,后6位十六进制数是由厂商分配的序列号,这样目的地表示唯一设备的地址,称为单播地址。如果 MAC 地址为FF:FF:FF:FF:FF:FF,称为广播地址,它表示网络内的所有主机只用作目的地址。
图1-32 Trace流程
ARP过程如下:ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机,这是一个广播请求。ARP 请求数据帧中包含目的主机的 IP 地址,其意思是“如果你是这个IP地址的拥有者,请回答你的硬件地址”。
连接到同一LAN的所有主机都接收井处理ARP广播,目的主机的ARP层收到这份广播报文后,根据目的IP地址判断出这是发送端在寻问它的MAC地址(见图1-33),于是发送一个单播ARP应答。这个ARP应答包含IP地址及对应的硬件地址。收到ARP应答后,发送端就知道接收端的MAC地址了。
图1-33 ARP工作机制
1.2.4.4网络接口层
TCP/IP的网络接口层对应OSI的数据链路层和物理层。TCP/IP只定义了网络接口层的功能,没有定义具体的协议。也就是说,网络接口层协议来自其他标准和组织,TCP/IP向下兼容,与各种下层协议协调工作。
网络接口层的主要功能如下。
(1)把二进制数据(比特流)编码后送到物理介质上(光纤、铜线、无线),让接收端能接收编码;
(2)把比特流装配成帧,以便通过链路成块地传输给接收端;
(3)对传输的帧进行差错检测;
(4)当一个链路有多个主机共享时,进行介质访问控制。
网络接口层协议很多,包括Ethernet(以太网)、PPP(Point-to-Point Protocol,点到点协议)、ATM(Asynchronous Transfer Mode,异步传输模式)、Frame Relay(帧中继)等。其中最为常见的是Ethernet。
Ethernet最初是由Xerox公司创建井由Xerox、Intel和DEC公司联合开发的局域网规范。
20世纪80年代,IEEE 802委员会以Ethernet V2为基础,推出IEEE 802.3标准,该标准定义了在局域网中采用的电缆类型和信号处理方法,其特点是采用 CSMA/CD(载波监听多路访问/冲突检测)的介质访问控制技术。人们习惯性地将IEEE 802.3称为以太网,如今的以太网标准由IEEE 802.3来描述。今天,以太网已经成为应用最为广泛的局域网技术,它采用MAC地址来标识网络设备。
1.2.5 IP地址
互联网协议地址(Internet Protocol Address),又称IP地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
计算机采用二进制的IP地址,一共32位,每8位为一组,这对于网络使用者来说无疑很难记忆。为便于书写及记忆,一个IP地址允许采用0~255之间的4个十进制数表示,数之间用句点分开。这些十进制数中的每一个都代表32位地址的一个8位位组,用“.”分开,称为点分表示法,如图1-34所示。
图1-34 IP地址
1.2.5.1 IP地址分类
按照最初的定义,IP寻址标准井没有提供地址类,后来为了便于管理才加入了地址类的概念。地址类的实现将地址空间分解为数量有限的特大型网络—A类、数量较多的中等网络—B类、数量非常多的小型网络—C类、用于组播的D类和保留的用于研究的E类,如图1-35所示。
图1-35 IP地址分类
A、B、C类为互联网中设备所使用的地址,D类为组播地址,其他尚未使用的地址保留作为研究用途。
1.2.5.2特殊IP地址
即使在A、B、C类地址当中,也有一部分IP地址有着特殊的用途,不能直接配置到主机或网络设备上使用,这一点请大家留意。表1-5记录了这些特殊IP及用途。
表1-5特殊IP地址
可分配的IPv4地址被分成公网地址和私网地址,也叫外网地址和内网地址。所谓公网地址,是指在互联网中必须唯一的地址,这些地址全球范围内不能重复。但是,如果所有的IP地址都只能使用一次,恐怕早就使用殆尽了。
为了解诀IPv4地址数量不足的问题,一部分地址被指定为私网地址,允许在企业、校园、家庭的局部范围内反复使用。
私网地址的范围如下。
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
1.2.5.3子网掩码
A、B类网络地址空间都很大,如果一次分配掉一个,很快就分配完了。而获取这么大一段地址的企业,一方面可能没有这么多主机,会造成地址的严重浪费;另一方面这么多主机在一个网络中管理,管理效率必然低下,一旦爆发病毒攻击,影响面也会很大。
就像一个军团有10万人,如果统一由军团长来管理、调度,军团长肯定忙不过来;如果按层级分成军、师、团、营、连、排、班,由相应的长官来管理,则灵活、高效许多。网络中的地址管理也是一样的,如果能在大型网络的基础上,根据需要划分一些小的子网络,则分配起来既不造成浪费,也便于管理。子网络简称为子网,子网掩码就是用来划分这些子网的工具。IP子网掩码格式如图1-36所示。
图1-36 IP子网掩码格式
用二进制表示:子网掩码与IP地址一样,也是32位二进制数。掩码的前半部分是连续的“1”,代表网络位,后半部分是连续的“0”,代表主机位,1和0不能交叉。子网掩码与IP地址配合使用,掩码中的“1”告诉我们这个IP地址中前多少位是网络位,掩码中的“0”则指出IP地址中后多少位是主机位。所以,子网掩码就可以诀定一个网络的大小,子网掩码中“0”的数量越多,网络规模就越大。
用十进制表示:为了方便记忆,子网掩码也可以用十进制数表示,与IP地址一样,每8位二进制数转换为一个十进制数。
用前缀长度表示:为了进一步简化子网掩码的表达,还可以用“/”加上网络位的位数来代表子网掩码,叫作前缀长度。比如,255.255.0.0可以表示成“/16”,255.255.255.0可表示为“/24”。请问:如果前缀长度是“/20”,对应的子网掩码是什么呢?
1.2.5.4 IP地址计算
子网掩码能告诉我们IP地址中网络位和主机位的位数,如果把其中的主机位全部置为0,便可以获取该IP地址对应的网络地址。网络地址能帮助主机和设备做出路由判断,是非常有用的。如果IP地址中主机位全为1,则该IP地址是该网络的广播地址。除去网络地址和广播地址,中间剩下的就是一个网络可分配的地址范围。
主机要计算IP地址对应的网络地址,只需要把IP地址与子网掩码做“与”操作,其结果就是IP地址的主机位全部置0,如图1-37所示。
图1-37网络地址和广播地址
接下来再看一个完整的计算案例。针对给定的IP地址和子网掩码,要求计算该IP地址对应的网络地址、广播地址及该子网可分配的IP地址范围,如图1-38所示。
图1-38 IP地址的计算过程
说明:
①,②:将IP地址与子网掩码转换成二进制,对齐。
③:在子网掩码“1”和“0”的中间画出分隔线,将IP地址的网络位和主机位分开。
④:IP地址主机位全部置0,得出网络地址。
⑤:IP地址主机位全部置1,得出广播地址。
⑥:网络地址加1,即是首个有效地址。
⑦:广播地址减1,即是最后一个有效地址。从首个有效地址到最后一个有效地址的这个范围内,都是可分配的IP地址。
⑧:将④~⑦的结果转换成十进制数。
1.2.5.5 IP地址规划
A、B、C类网络可以通过子网掩码划分成多个子网,这些子网如果还是太大,又可以进一步划分成更多的小子网。子网掩码的长度可以任意增长(即以1为单位增多)。将较大的网络划分成多个较小网络的技术,被称为VLSM(Variable Length Subnet Mask,可变长度的子网掩码)它使IP地址的规划使用变得非常灵活。
比如说,如果一个网络内有50台主机需要分配IP地址,配置怎样的子网掩码才是最合适的呢?回顾之前计算网络中有效IP地址的数量公式,得到:2n-2≥50,为了尽量节约IP地址,显然n=6最合适,所以子网掩码就是255.255.255.192。
这样的例子很常见,当网络中有大量的网络设备和计算机的时候,做出合理的IP地址规划能最大限度地利用已有的IP地址,在避免浪费的同时也利于后期维护。
下面看一个IP规划的例子。
图1-39为某公司在A省的分公司,包括6个部门,每个部门10~20人不等,要求每个部门划分为一个子网,能互相通信。总公司分配了一个网段10.33.62.0/24,要求在此基础上为分公司做IP地址规划。
图1-39 IP地址规划
首先,要了解哪些地方需要用到 IP地址。一般有以下3种用途。
(1)网络设备的管理地址。网络设备需要配置一个单独的IP,方便后续对它进行配置管理。一般在loopback接口中配置IP地址来作为管理地址,以方便记忆。
loopback接口是网络设备的一种特殊接口,其特点是永远处于有效状态,不会因为物理链路中断而导致接口上的IP地址失效,非常适用于网管。由于一个设备只需要一个网管地址,所以地址的掩码是255.255.255.255,即前缀长度“/32”。
(2)网络设备的互联地址。网络设备互联时,在对接接口上需要配置IP地址来通信。对接的接口IP地址必须在同一个子网内,子网中只需要2个有效IP地址,两端设备一边一个。此子网的掩码应该是多少呢?根据2n-2≥2,n=2最合适,所以子网掩码是255.255.255.252,即前缀长度“/30”如图1-40所示。
(3)业务地址。它包括所有主机、服务器、打印机等设备的地址。本例中就是6个部门要使用的地址。业务地址的分配要考虑以下三个要素:
① 地址数量满足需求;
② 为未来可能增加的终端做好预留;
③ 避免地址浪费。
在本例中,考虑到可能的打印机、扫描仪和未来增加人员,分配给每部门的IP要比实际需求多一些,可以考虑使用255.255.255.224,如图1-41所示。大家想想每个子网包含多少个有效地址?
图1-40接口地址
图1-41业务地址
其次,还要考虑到分配的地址要有一定的规律,要整齐,且便于记忆。地址分配的方案井不是唯一的,分配好的子网也不一定能把所有的IP地址都正好用完,那些剩余的IP地址可以留到后续网络扩大之后再使用。