2.2.2 相关知识:TCP/IP协议
1.TCP/IP层次结构
TCP/IP是transmission control protocol/internet protocol(传输控制协议/网际协议)的缩写。美国国防部高级研究计划局DARPA为了实现异种网络之间的互连与互通,大力资助互联网技术的开发,于1977年到1979年推出TCP/IP体系结构和协议。到20世纪90年代初期,Internet已逐渐流行开来,并得到了广泛的支持和应用。而OSI正在制定,OSI所定义的网络体系结构虽然从理论上比较完整,是国际公认的标准,但是由于其实现起来过分复杂,而且OSI标准的制定周期较长,导致世界上没有哪个产家生产出符合OSI标准的商品化产品。因此TCP/IP是目前异种网络通信使用的唯一协议体系,适用于连接多种机型,多种操作系统,既可用于局域网,又可用于广域网,许多厂商的计算机操作系统和网络操作系统产品都采用或含有TCP/IP协议。TCP/IP协议已成为目前事实上的国际标准和工业标准。
TCP/IP协议在硬件基础上分为四个层次,自下而上依次是:网络接口层、网络层、传输层和应用层。它与前面讨论的OSI参考模型有着很大的区别,TCP/IP与OSI的对应关系见图1-17。
(1)网络接口层:TCP/IP与各种网络的接口称为网络接口层,与OSI数据链路层和物理层相当,是最底层的网际协议软件。它负责接收数据报,并把数据报发送到指定网络上。实际上,TCP/IP体系结构中并没有真正描述这一部分的内容,只是指出其主机必须使用某种协议与网络连接,以便能传递IP分组。
(2)网络层:网络层与OSI网络层相当,是整个TCP/IP体系结构的关键部分,它解决两个不同IP地址的计算机之间的通信问题。该层最主要的协议就是无连接的网际协议IP。
(3)传输层:对应于OSI的传输层,它的功能是使源端和目标端主机上的对等实体可以进行会话。传输层有两个端到端的协议:面向连接的传输控制协议TCP(transmission control protocol)和面向无连接的用户数据报协议UDP(user datagram protocol)。TCP提供了一种可靠的数据传输服务,具有流量控制、拥塞控制、按序递交等特点。而UDP的服务是不可靠的,但其协议开销小,在流媒体系统中使用较多。
(4)应用层:TCP/IP高层协议大致与OSI参考模型的会话层、表示层和应用层对应,它们之间没有严格的层次划分,这些协议已被广泛地使用。在这一层中有许多著名协议,如远程登录协议TELNET(telecommunication network)、文件传输协议FTP(file transfer protocol)、简单邮件传输协议SMTP(simple mail transfer protocol)和域名服务DNS(domain name service)等。
分层的概念在实际应用中非常重要,在进行网络设置和排除故障时,若对网络层次理解得很透,将对工作有很大帮助。例如,设置路由是网络层IP协议的事,要查找MAC地址是链路层ARP的事,常用的ping命令是由ICMP协议来做的。
2.TCP/IP协议族
TCP/IP是一个协议族,它包括许多协议,如图2-4所示。该图显示了各层协议的关系,理解它们之间的关系对下面的协议分析非常重要。
图2-4 TCP/IP协议模块关系
3.TCP/IP各层协议
(1)网络接口层:它是TCP/IP赖以存在的各种通信网和TCP/IP之间的接口,这些通信网包括多种广域网,如ARPANET、MILNET和X.25公用数据网;还包括各种局域网,如ethernet、IEEE的各种标准局域网等。IP层提供了专门的功能,解决与各种网络物理地址的转换。
一般情况下,各物理网络可以使用自己的数据链路层协议和物理层协议,不需要在数据链路层上设置专门的TCP/IP协议。但是,当使用串行线路连接主机与网络,或连接网络与网络时,如用户使用电话线和modem接入或两个相距较远的网络通过数据专线互连时,则需要在数据链路层运行专门的SLIP(serial line IP)协议的PPP(point to point protocol)协议。
1)SLIP协议:SLIP提供在串行通信线路上封装IP分组的简单方法,以使远程用户通过电话线和modem能方便地接入TCP/IP网络。
SLIP是一种简单的组帧方式,使用时还存在一些问题。首先,SLIP不支持在连接过程中的动态IP地址分配,通信双方必须事先告知对方IP地址,这给没有固定IP地址的个人用户上Internet带来了很大不便;其次,SLIP帧中无协议类型字段,因此它只能支持IP协议;再有,SLIP帧中无校验字段,因此链路层上无法检测出传输差错,必须由上层实体或具有纠错能力的modem来解决传输差错问题。
2)PPP协议:为了解决SLIP存在的问题,在串行通信应用中又开发了PPP协议。PPP协议是一种有效的点-点通信协议,它由串行通信线路上的组帧方式,用于建立、配制、测试和拆除数据链路的链路控制协议LCP及一组用以支持不同网络层协议的网络控制协议NCP三部分组成。
由于PPP帧中设置了校验字段,所以PPP在链路层上具有差错检验的功能。PPP中的LCP协议提供了通信双方进行参数协商的手段,并且提供了一组NCP协议,使得PPP可以支持多种网络层协议,如IP、IPX、OSI等。另外,支持IP的NCP提供了在建立连接时动态分配IP地址的功能,解决了个人用户上Internet的问题。
(2)网络层:
1)IP协议:IP协议位于网络层,是Internet中最重要的协议。IP是不可靠的无连接数据报协议,提供尽力而为的传输服务,也就是说,IP仅提供最好的传输服务但不保证IP数据报能成功地到达目的地。
IP协议有两个特点:①不可靠(unreliable):它不能保证IP数据报能成功地到达目的地,IP仅提供最好的传输服务。如果发生某种错误,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。②无连接(connectionless):这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可能选择不同的路线,因此B可能在A到达之前先到达。
IP协议的主要功能包括数据报的传输、数据报的路由选择和拥塞控制。IP协议用统一的IP数据报格式在帧格式不同的物理网络之间传递数据。IP数据报非常简单,就是在数据块(称为净荷)的前面加上一个报头。IP数据报中的数据(包括报头中的数据)以32位(4个字节或4个8位组)的方式来组织。图2-5展示了IP数据报头字段的排列,所有IP数据报头最小长度是20 B(byte,字节,记为B,代表8个比特),如果有其他选项的话,报头可能会更长。
图2-5 IP数据报头部格式
现将图2-5中各字段简介如下。
•版本(version):占4 bit(比特)。用来表明IP协议实现的版本号,当前一般为IPv4,即0100。
•报头长度(internet header length,IHL):占4 bit。是头部占32 bit的数字,包括可选项。普通IP数据报(没有任何选项),该字段的值是5,即160 bit=20 B。此字段最大值为60 B。
•服务类型(type of service,TOS):占8 bit。其中前3 bit为优先权子字段(precedence,现已被忽略)。第8 bit保留未用。第4至第7 bit分别代表延迟、吞吐量、可靠性和花费。当它们取值为1时分别代表要求最小时延、最大吞吐量、最高可靠性和最小费用。这4 bit的服务类型中只能置其中1 bit为1,可以全为0,若全为0则表示一般服务。服务类型字段声明了数据报被网络系统传输时可以被怎样处理。例如,TELNET协议可能要求有最小的延迟,FTP协议(数据)可能要求有最大吞吐量,SNMP协议可能要求有最高可靠性,NNTP(network news transfer protocol,网络新闻传输协议)可能要求最小费用,而ICMP协议可能无特殊要求(4 bit全为0)。实际上,大部分主机会忽略这个字段,但一些动态路由协议如OSPF(open shortest path first protocol)、IS-IS(intermediate system to intermediate system protocol)可以根据这些字段的值进行路由决策。
•数据报长度:占16 bit。指明整个数据报的长度(以字节为单位)。最大长度为65 535 B。
•数据报ID:占16 bit。用来唯一地标识主机发送的每一份数据报。通常每发一份报文,它的值会加1。
•标志位:占3 bit。标志一份数据报是否要求分段。
•段偏移:占13 bit。如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。
•生存期(time to live,TTL):占8 bit。用来设置数据报最多可以经过的路由器数。由发送数据的源主机设置,通常为32、64、128等。每经过一个路由器,其值减1,直到0时该数据报被丢弃。
•协议:占8 bit。指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2)、TCP(6)、UDP(17)等。
•校验和:占16 bit。内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每16 bit进行二进制反码求和(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)。
•源IP地址、目标IP地址:各占32 bit。用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。
•IP可选项:占32 bit。用来定义一些任选项,如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32 bit的整数倍,如果不足,必须填充0以达到此长度要求。
理解数据报的转移过程意味着要理解IP寻址方案和IP数据报头字段。发送数据报的IP主机为数据报建立的IP报头中包含自己的地址作为源地址,并包含目的主机IP地址。当这个数据报沿着网络协议栈到达链路层后,链路层必须确定向“同一个本地网络”上哪一台主机发送。换句话说,即便目的地在另一个网络上,数据报也必须发送给与发送方主机在同一个网络上的主机。
发送主机将检查目的地址。如果在同一个IP网络和子网上,该主机将使用地址解析协议(ARP)向本地网络发送广播,并把IP地址映射到链路层(如以太网)地址,然后将该数据报封装到数据链路层帧中并直接发送到目的地。但是,如果目的地在不同的网络或子网上,发送者必须确定向何处发送数据,使之可以转发到正确的网络。这就是路由器的作用。发送方主机了解本地主机,也了解路由器。一般来说,一个子网上有一个或两个路由器用来转发包。发送主机把IP数据报(由初始地址发出,目的地址为最终目的地)封装在链路层帧中,该帧直接发给默认路由器,由此路由器把该帧拆开并检查IP数据报头。
路由器还会检查目的地址以确定它是否属于路由器直接连接的任一本地网络。如果是,路由器将使用ARP确定目的地的数据链路层地址,然后把该数据报封装在数据链路层帧中发送。如果不属于该路由器直接连接的任何网络,则将数据报转发给另一个路由器。继续此过程,直到数据报到达其目的网络为止。
图2-6展示了IP路由过程。图中包含两个不同机构,它们均连接在Internet上,且各自有三个网络。每个网络连接到一个路由器上,每个路由器同时连接三个网络和Internet。当主机X向主机Y发送数据时,该数据将首先被发送到网络A上以到达路由器A。当路由器A收到该数据报后,此路由器将该数据报拆开,确定其目的地不在与自己连接的任何网络(A、B或C)上。然后此路由器将该数据报转发到另一个路由器上(在本例中位于Internet中某处),该路由器将继续通过Internet转发数据报直至到达路由器B为止。一旦路由器B收到该数据报,该路由器拆包后发现其目的地址在自己的一个本地网络上,于是这个路由器使用ARP来查询网络以确定正确的数据链路层地址并将数据发送至该主机。
每个路由器都修改包中的生存期和头检验和。如果在发送者和接收者之间数据报必须分段,中间路由器还要修改数据报ID和分段偏移值。在原始数据报过大而无法穿越一个中间网络的时候,这种情况就可能发生。
图2-6 IP路由过程
2)互联网控制报文协议ICMP:IP协议是一种不可靠的协议,无法进行差错控制,因此需要借助ICMP协议。ICMP协议用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。在网络中经常会用到ICMP协议,只不过我们觉察不到而已。比如经常使用的用于检查网络通不通的ping命令,这个ping的过程实际上就是ICMP协议工作的过程。还有其他网络命令如跟踪路由的tracert命令也是基于ICMP协议的。
ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334 050次之多,占整个攻击总数的90%以上。可见,ICMP的重要性绝不可以忽视。比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64 KB这一规定,向主机发起ping of death(死亡之ping)攻击。ping of death攻击的原理是:如果ICMP数据包的尺寸超过64 KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。
3)地址转换协议ARP:在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互联网地址是在国际范围标识主机的一种逻辑地址。为了让报文在物理网上传送,必须知道彼此的物理地址。这样就存在把互联网地址变换为物理地址的地址转换问题。以以太网(ethernet)环境为例,为了正确地向目的站传送报文,必须把目的站的32位IP地址转换成48位以太网目的地址DA。这就需要在网络层有一组服务将IP地址转换为相应的物理网络地址,这组协议即是ARP。
在进行报文发送时,如果源网络层给的报文只有IP地址,而没有对应的以太网地址,则网络层广播ARP请求以获取目的站信息,而目的站必须回答该ARP请求。这样源站点可以收到以太网48位地址,并将地址放入相应的高速缓存(cache)。下一次源站点对同一目的站点的地址转换可直接引用高速缓存中的地址内容。地址转换协议ARP使主机可以找出同一物理网络中任一个物理主机的物理地址,只需给出目的主机的IP地址即可。这样,网络的物理编址可以对网络层服务透明。
在互联网环境下,为了将报文送到另一个网络的主机,数据报先定向发送方所在网络IP路由器。因此,发送主机首先必须确定路由器的物理地址,然后依次将数据发往接收端。除基本ARP机制外,有时还需在路由器上设置代理ARP,其目的是由IP路由器代替目的站对发送方的ARP请求做出响应。
4)反向地址转换协议RARP:反向地址转换协议用于一种特殊情况,如果站点初始化以后,只有自己的物理地址而没有IP地址,则它可以通过RARP协议,发出广播请求,征求自己的IP地址,而RARP服务器则负责回答。这样,无IP地址的站点可以通过RARP协议取得自己的IP地址,这个地址在下一次系统重新开始以前都有效,不用连续广播请求。RARP广泛用于获取无盘工作站的IP地址。
(3)传输层:TCP/IP在这一层提供了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP),另外还有一些别的协议,如用于传送数字化语音的NVP协议。
1)传输控制协议TCP:TCP提供的是一种可靠的数据流服务。当传送受差错干扰的数据,或基础网络故障,或网络负荷太重而使网际基本传输系统(无连接报文递交系统)不能正常工作时,就需要通过其他协议来保证通信的可靠。TCP就是这样的协议,它对应于OSI模型的传输层,在IP协议的基础上,提供端到端的面向连接的可靠传输。
TCP采用“带重传的肯定确认”技术来实现传输的可靠性。简单的“带重传的肯定确认”是指与发送方通信的接收者,每接收一次数据,就送回一个确认报文,发送者对每个发出去的报文都留一份记录,等到收到确认之后再发出下一报文分组。发送者发出一个报文分组时,启动一个计时器,若计时器计数完毕,确认还未到达,则发送者重新发送该报文分组。
简单的确认重传严重浪费带宽,TCP还采用一种称之为“滑动窗口”的流量控制机制来提高网络的吞吐量,窗口的范围决定了发送方发送的但未被接收方确认的数据报的数量。每当接收方正确收到一则报文时,窗口便向前滑动,这种机制使网络中未被确认的数据报数量增加,提高了网络的吞吐量。
TCP通信建立在面向连接的基础上,实现了一种“虚电路”的概念。双方通信之前,先建立一条连接,然后双方就可以在其上发送数据流。这种数据交换方式能提高效率,但事先建立连接和事后拆除连接需要开销。TCP连接的建立采用三次握手的过程,整个过程由发送方请求连接、接收方确认连接、发送方再发送一则关于确认的确认三个过程组成。
TCP协议的主要功能如下。
•传输中的差错控制:在发送端,TCP发出分组后等待从接收端传来的确认信息,如果超时没有收到确认信息就重发分组。在接收端,TCP对每一个收到的分组进行完整性检测,若分组完整无差错就向发送端返回一个已正确接收该分组的信息,否则丢弃该分组。TCP用这样的方式保证数据传输的可靠性。
•分组排序:在网络传输数据的过程中,可能会出现同一分组被重复传输,这时接收端的TCP协议只接收第一个正确到达的副本,而对其他重复分组自动丢弃。TCP接收到所有分组后,再按其原来顺序组装成一条完整信息。
•流量控制:当网络因繁忙导致频繁超时,TCP协议采用合适的机制来控制向外发送的数据量。
2)用户数据报协议UDP:用户数据报协议是对IP协议组的扩充,它增加了一种机制,发送方使用这种机制可以区分一台计算机上的多个接收者。每个UDP报文除了包含某用户进程发送的数据外,还有报文目的端口的编号和报文源端口的编号。UDP的这种扩充,使得在两个用户进程之间递送数据报成为可能。
UDP是依靠IP协议来传送报文的,因而它的服务和IP一样是不可靠的。这种服务不用确认,不对报文排序,也不进行流量控制,UDP报文有时会出现丢失、重复、失序等现象。
(4)应用层:
1)文件传输协议FTP:文件传输协议是网际提供的用于访问远程机器的一个协议,它使用户可以在本地机与远程机之间进行有关文件的操作。FTP工作时建立两条TCP连接,一条用于传送文件,另一条用于传送控制。
FTP采用客户机/服务器模式,它包含客户机FTP和服务器FTP。客户机FTP启动传送过程,而服务器对其做出应答。客户机FTP大多有一个交互式界面,使有权客户可以灵活地向远地传文件或从远地取文件。
2)远程登录TELNET:TELNET的连接是一个TCP连接,用于传送具有TELNET控制信息的数据。它提供了与终端设备或终端进程交互的标准方法,支持终端到终端的连接及进程到进程分布式计算的通信。
3)域名服务DNS:DNS是一个域名服务的协议,提供域名到IP地址的转换,允许对域名资源进行分散管理。DNS最初设计的目的是使邮件发送方知道邮件接收主机及邮件发送主机的IP地址,后来发展成为服务于其他许多目标的协议。
4)简单邮件传送协议SMTP:互联网标准中的电子邮件是一个简单的基于文件的协议,用于可靠、有效的数据传输。SMTP作为应用层的服务,并不关心它下面采用的是何种传输服务,它可能通过网络在TCP连接上传送邮件,或者简单地在同一机器的进程之间通过进程通信的通道来传送邮件。这样,邮件传输就独立于传输子系统,可在TCP/IP环境、OSI传输层或X.25协议环境中传输邮件。
邮件发送之前必须协商好发送者、接收者。SMTP服务进程同意为接收方发送邮件时,它将邮件直接交给接收方用户或将邮件逐个经过网络连接器,直到邮件交给接收方用户。在邮件传输过程中,所经过的路由被记录下来。这样,当邮件不能正常传输时可按原路由找到发送者。
在当前的UNIX版本中,已将TCP/IP协议融入其中,使之成为UNIX操作系统的一个部分。DOS上也推出了相应的TCP/IP软件产品。SUN公司则将TCP/IP广泛推向商务系统,它在所在的工作站系统中都预先安装了TCP/IP网络软件及网络硬件,使网络和计算机成为一体,同时也使TCP/IP网络软件及其客户机/服务器的工作方式为广大用户所接受。
4.IP地址
(1)IP地址概述:所有Internet上的计算机都必须有一个Internet上唯一的编号作为其在Internet的标识,这个编号称为IP地址。每个数据报中包含发送方的IP地址和接收方的IP地址。IP地址是一个32位的二进制数,即由4个字节构成,为方便起见,通常将其表示为w.x.y.z的形式。其中w、x、y、z分别为一个0~255的十进制整数,对应二进制表示法中的一个字节。这样的表示叫作点分十进制。
例如,某台机器的IP地址为:11001011 01110010 01000001 00000011,则写成点分十进制表示形式是:203.114.65.3。
整个Internet由很多独立的网络互连而成,每个独立的网络,就是一个子网,包含若干台计算机。根据这个模式,Internet的设计人员用两级层次模式构造IP地址,类似电话号码。电话号码的前面一部分是区号,后面一部分是某部电话的客户号,如0378-3865138,0378是开封的区号,3865138则是一个单独的客户号码。IP地址的32个二进制位也被分为两个部分,即网络地址和主机地址,网络地址就像电话的区号,标明主机所在的子网,主机地址则在子网内部区分具体的主机。
IP地址的取得方式,简单地说是大的组织先向Internet的NIC(network information center)申请若干IP地址,然后将其向下级组织分配,下级组织再向更下一级的组织分配IP地址。各子网的网络管理员将取得的IP地址指定给子网中的各台计算机。
(2)IP地址的分类:为了便于对IP地址进行管理,同时还考虑到网络的差异很大,有的网络拥有很多主机,而有的网络上的主机则很少,因此因特网的IP地址分为五类,即A类到E类。D类地址是多播地址,主要留给因特网体系结构委员会IAB使用。E类地址保留为今后使用。目前大量使用的IP地址仅A类至C类三种,如图2-7所示。
图2-7 IP地址的分类
1)A类地址:A类IP地址的最高位为0,其前8位为网络地址,是在申请地址时由管理机构设定的,后24位为主机地址,可以由网络管理员分配给本机构子网的各主机。一个A类地址最多可容纳224(约1 600万)台主机,全世界最多可有27=128个A类地址。当然这两个“最多”是纯从数学上讲的,事实上不可能达到,因为一个网络中有些地址另有特殊用途,不能分配给具体的主机和网络。
用A类地址组建的网络称为A类网络。
2)B类地址:B类IP地址的前16位为网络地址,且前两位为10,后16位为主机地址。B类地址的第一个十进制整数值的范围为128~191。一个B类网络最多可容纳216即65 536台主机,全世界最多可有214(约1.6万)个B类地址。
3)C类地址:C类IP地址的前24位为网络地址,且前三位为110,后8位为主机地址。C类地址的第一个十进制整数值的范围为192~223。一个C类网络最多可容纳28-2即254台主机。全世界共有221(约209万)个C类地址。例如,218.198.57.190和202.102.224.68均为C类IP地址。
不同类型的IP地址分配给不同规模的网络,能充分利用32位长度的地址空间。
(3)特殊IP地址:并不是所有的IP地址都能分配给主机,有些IP地址具有特定的含义,因而不能分配给主机。
1)回送地址:指前8位为01111111(十进制的127)的IP地址,这个地址用于网络软件测试和用于本机进程间通信。无论什么程序,如果它向回送地址发送数据,TCP/IP协议软件立即将数据返回,不做任何网络传输。这个规定使得A类地址127.0.0.0不能分配给网络,减少了254个可用的IP地址。
2)子网地址:主机地址全为0的IP地址为子网地址,代表当前所在的子网。
例如,当提到网络150.24.0.0时,指的是整个子网,150.24.0.0这个地址不会分配给网络中的任何一台主机。
3)广播地址:主机地址全为1的IP地址为广播地址,向广播地址发送信息就是向子网中的每个成员发送信息。例如,在A类网络16.0.0.0中向地址16.255.255.255发出一条信息时,网络中的每台计算机都将接收到该信息。
另外,如果需要在本网内广播,但又不知道子网地址,可以用地址255.255.255.255代替本网广播地址。
(4)子网掩码:每个独立的子网有一个子网掩码。分组中含有目的计算机的IP地址,如何判断目的计算机与源计算机是在同一子网中,还是应将分组送往路由器由它向外发送呢?这时要用到子网掩码。子网掩码的表示形式与IP地址相似。如果一个子网的网络地址占n位[当然它的主机地址就是(32-n)位],则该子网的子网掩码的前n位为1,后(32-n)位为0。IP协议正是根据主机的IP地址、目的IP地址以及子网掩码进行相应运算来判断源IP地址与目的IP地址是否在同一子网内的。
IP协议首先将主机自己的IP地址与子网掩码做“与”运算,再用运算结果同目的地址做“异或”运算,如果子网掩码的前n位为1,而运算结果的前n位全为0,IP软件就会认为该目的地址与主机在同一子网内,否则认为目的地址与主机不在同一子网内。例如,所有A类网络的子网掩码一定是255.0.0.0,所有C类网络的子网掩码一定是255.255.255.0。
5.协议端口
协议中规定了从某个端口来的数据如何处理,通过区分端口我们可以扩展自己的外部接受类型,和鼠标、键盘发生不同反应相似,但是端口不是物理概念,而是软件概念。
(1)端口分类:
1)公认端口(well known ports):0~1023,它们紧密绑定于一些服务。通常这些端口的通信明确表明了某种服务的协议。例如,80端口实际上总是HTTP通信。由于内部功能已经确定,不能再做其他事情,所以很少被黑客木马利用,但是可以被扫描,可以被人利用服务进行攻击。
2)注册端口(registered ports):1024~49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其他目的。例如,许多系统处理动态端口从1024左右开始。
3)动态和/或私有端口(dynamic and/or private ports):49152~65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外,SUN的RPC端口从32768开始。
如果根据所提供的服务方式的不同,端口又可分为“TCP协议端口”和“UDP协议端口”两种,因为计算机之间相互通信一般采用这两种通信协议。前面所介绍的“连接方式”是一种直接与接收方进行的连接,发送信息以后,可以确认信息是否到达,这种方式大多采用TCP协议;另一种是不直接与接收方进行连接,只管把信息放在网上发出去,而不管信息是否到达,也就是前面所介绍的“无连接方式”。这种方式大多采用UDP协议,IP协议也是一种无连接方式。对应使用以上这两种通信协议的服务所提供的端口,也就分为“TCP协议端口”和“UDP协议端口”。
(2)常见TCP端口:
1)FTP:定义了文件传输协议,使用21端口。常说某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
2)TELNET:它是一种用于远程登录的端口,用户可以以自己的身份连接到远程计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
3)SMTP:定义了简单邮件传送协议,现在很多邮件服务器用的都是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有SMTP端口设置这一项,服务器开放的是25号端口。
4)POP3:它是和SMTP对应的,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也就是说,只要你有相应的使用POP3协议的程序(如Foxmail或Outlook),就可以不以Web方式登录进邮箱界面,直接用邮件程序就可以收到邮件(如163邮箱就没有必要先进入网易网站,再进入自己的邮箱来收信)。
(3)常见UDP端口:
1)HTTP:这是大家用得最多的协议,它就是常说的“超文本传输协议”。上网浏览网页时,就得在提供网页资源的计算机上打开80号端口以提供服务。常说的“WWW服务”、“Web服务器”用的就是这个端口。
2)DNS:用于域名解析服务,这种服务在Windows NT系统中用得最多。因特网上的每一台计算机都有一个网络地址与之对应,这个地址是常说的IP地址,它以纯数字+“.”的形式表示。然而这却不便记忆,于是出现了域名,访问计算机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53号端口。
3)SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
4)OICQ:OICQ程序既接受服务,又提供服务,这样两个聊天的人才是平等的。OICQ用的是无连接的协议,也就是说它用的是UDP协议。OICQ服务器使用8000号端口,侦听是否有信息到来,客户端使用4000号端口,向外发送信息。如果上述两个端口正在使用(有很多人同时和几个好友聊天),就顺序往上加。
6.新一代因特网协议
(1)IPv4的局限性:IP第4版作为网络的基础设施广泛地应用在Internet和难以计数的小型专用网络上,这就是著名的IPv4。IPv4是一个令人难以置信的成功的协议,它可以把数十个或数百个网络上的数以百计或数以千计的主机连接在一起,并已经在全球Internet上成功地连接了数以千万计的主机。
在当前计算机工业飞速发展的步伐下,指出IPv4的局限性和缺点如同指出小汽车和卡车的内燃机是有缺陷的动力源一样。IP的确是一个非常强壮的协议,并已经证明了它能够连接小至几个结点,大至Internet上难以计数的主机。为交通工具选择动力源时,只要能像汽油机或柴油机一样提供动力,任何人都可以使用包括电能、太阳能或是风能作为上路的动力而不会影响别人,与此不同的是,IP的升级将对所有使用IP的人产生重大影响。TCP/IP的工程师和设计人员早在20世纪80年代初期就意识到了升级的需求,因为当时已经发现IP地址空间随着Internet的发展只能支持很短的时间。IP必须升级的原因以及可以同时改进之处包括如下几方面。
1)地址空间的局限性:IP地址空间的危机由来已久,并正是升级的主要动力。
2)性能:尽管IP表现得不错,一些源自20年甚至更早以前的设计还能够进一步改进。
3)安全性:安全性一直被认为是由网络层以上的层负责,但它现在已经成为IP的下一个版本可以发挥作用的地方。
4)自动配置:对于IPv4结点的配置一直比较复杂,而网络管理员与用户则更喜欢“即插即用”,即将计算机连接在网络上就可以使用。IP主机移动性的增强也要求当主机在不同网络间移动和使用不同的网络接入点时能提供更好的配置支持。
(2)IPv6:IPv6中的变化体现在以下五个重要方面。
•扩展地址。
•简化头格式。
•增强对于扩展和选项的支持。
•流标记。
•身份验证和保密。
IP的这些改变对IAB于1991年制定的IPv6发展方向中的绝大部分都有所改进。IPv6的扩展地址意味着IP可以继续增长而无须考虑资源的匮乏,该地址结构对于提高路由效率有所帮助;对于包头的简化减少了路由器上所需的处理过程,从而提高了选路的效率;同时,改进对头扩展和选项的支持意味着可以在几乎不影响普通数据包和特殊数据包选路的前提下适应更多的特殊需求;流标记办法为更加高效地处理包流提供了一种机制,这种办法对于实时应用尤其有用;身份验证和保密方面的改进使得IPv6更加适用于那些要求对敏感信息和资源特别对待的商业应用。
1)扩展地址:IPv6的地址结构中除了把32位地址空间扩展到了128位外,还对IP主机可能获得的不同类型地址作了一些调整,IPv6中取消了广播地址而代之以任意点播地址。IPv4中用于指定一个网络接口的单播地址和用于指定由一个或多个主机侦听的组播地址基本不变。
2)简化头格式:IPv6中包括总长为40 B的8个字段(其中两个是源地址和目的地址)。它与IPv4包头的不同在于,IPv4中包含至少12个不同字段,且长度在没有选项时为20 B,但在包含选项时可达60 B。IPv6使用了固定格式的包头并减少了需要检查和处理的字段的数量,这将使得选路的效率更高。
包头的简化使得IP的某些工作方式发生了变化。一方面,所有包头长度统一,因此不再需要包头长度字段。此外,通过修改包分段的规则可以在包头中去掉一些字段。IPv6中的分段只能由源结点进行:该包所经过的中间路由器不能再进行任何分段。最后,去掉IP头校验和不会影响可靠性,这主要是因为头校验和将由更高层协议(UDP和TCP)负责。
3)对扩展和选项支持的改进:在IPv4中可以在IP头的尾部加入选项,与此不同,IPv6中把选项加在单独的扩展头中。通过这种方法,选项头只有在必要的时候才需要检查和处理。
为便于说明,考虑以下两种不同类型的扩展部分:分段头和选路头。IPv6中的分段只发生在源结点上,因此需要考虑分段扩展头的结点只有源结点和目的结点。源结点负责分段并创建扩展头,该扩展头将放在IPv6头和下一个高层协议头之间。目的结点接收该包并使用扩展头进行重装。所有中间结点都可以安全地忽略该分段扩展头,这样就提高了包选路的效率。
另一种选择方案中,逐跳(hop-by-hop)选项扩展头要求包的路径上的每一个结点都处理该头字段。这种情况下,每个路由器必须在处理IPv6包头的同时也处理逐跳选项。第一个逐跳选项被定义用于超长IP包(巨型净荷)。包含巨型净荷的包需要受到特别对待,因为并不是所有链路都有能力处理那样长的传输单元,且路由器希望尽量避免把它们发送到不能处理的网络上。因此,这就需要在包经过的每个结点上都对选项进行检查。
4)流标记:在IPv4中,对所有包大致同等对待,这意味着每个包都是由中间路由器按照自己的方式来处理的。路由器并不跟踪任意两台主机间发送的包,因此不能“记住”如何对将来的包进行处理。IPv6实现了流概念,其定义如RFC 1883中所述:流指的是从一个特定源发向一个特定(单播或者是组播)目的地的包序列,源点希望中间路由器对这些包进行特殊处理。
路由器需要对流进行跟踪并保持一定的信息,这些信息在流中的每个包中都是不变的。这种方法使路由器可以对流中的包进行高效处理。对流中的包的处理可以与其他包不同,但无论如何,对于它们的处理更快,因为路由器无须对每个包头重新处理。
5)身份验证和保密:RFC 1825(IP的安全性体系结构)描述了IP的安全性体系结构,包括IPv4和IPv6。它发表于1995年8月,目前正在进行修改和更新。1998年3月发表了一个更新版Internet草案。IP安全性的基本结构仍然很坚固,且已经进行了一些显著的改变和补充。
IPv6使用了两种安全性扩展:IP身份验证头(AH)首先由RFC 1826(IP身份验证头)描述,而IP封装安全性净荷(ESP)首先在RFC 1827[IP封装安全性净荷(ESP)]中描述。报文摘要功能通过对包的安全可靠性的检查和计算来提供身份验证功能。发送方计算报文摘要并把结果插入到身份验证头中,接收方根据收到的报文摘要重新进行计算,并把计算结果与AH头中的数值进行比较。如果两个数值相等,接收方可以确认数据在传输过程中没有被改变;如果不相等,接收方可以推测出数据或者在传输过程中遭到了破坏,或者被某些人进行了故意的修改。
封装安全性提供机制,可以用来加密IP包的净荷,或者在加密整个IP包后以隧道方式在Internet上传输。其中的区别在于,如果只对包的净荷进行加密的话,包中的其他部分(包头)将公开传输。这意味着破译者可以由此确定发送主机、接收主机以及其他与该包相关的信息。使用ESP对IP进行隧道传输意味着对整个IP包进行加密,并由作为安全性网关操作的系统将其封装在另一IP包中。通过这种方法,被加密的IP包中的所有细节均被隐藏起来。这种技术是创建虚拟专用网(VPN)的基础,它允许各机构使用Internet作为其专用骨干网络来共享敏感信息。
(3)IPv4与IPv6的比较:在IPv4中,所有包头以32位为单位,即基本的长度单位是4 B。在IPv6中,包头以64位为单位,且包头的总长度是40 B。图2-8中显示了IPv6头的格式。
图2-8 IPv6头部格式
IPv6协议对其包头定义了以下字段。
1)版本:长度为4位,对于IPv6,该字段必须为6。
2)业务流类别:长度为8位,指明为该包提供了某种“区分服务”。RFC 1883中最初定义该字段只有4位,并命名为“优先级字段”,后来该字段的名字改为“类别”,在最新的IPv6 Internet草案中,称之为“业务流类别”。该字段的定义独立于IPv6,目前尚未在任何RFC中定义。该字段的默认值是全0。
3)流标签:长度为20位,用于标识属于同一业务流的包。一个结点可以同时作为多个业务流的发送源。流标签和源结点地址唯一标识了一个业务流。在RFC 1883中这个字段最初被设计为24位,但当类别字段的长度增加到8位后,流标签字段被迫减小长度来作为补偿。
4)净荷长度:长度为16位,其中包括包净荷的字节长度,即IPv6头后的包中包含的字节数。这意味着在计算净荷长度时包含了IPv6扩展头的长度。
5)下一个头:这个字段指出了IPv6头后所跟的头字段中的协议类型。与IPv6协议字段类似,下一个头字段可以用来指出高层是TCP还是UDP,但它也可以用来指明IPv6扩展头的存在。
6)跳极限:长度为8位。每当一个结点对包进行一次转发之后,这个字段就会被减1。如果该字段达到0,这个包就将被丢弃。IPv4中有一个具有类似功能的生存期字段,但与IPv4不同,人们不愿意在IPv6中由协议定义一个关于包生存时间的上限。这意味着对过期包进行超时判断的功能可以由高层协议完成。
7)源IP地址:长度为128位,指出了IPv6包的发送方地址。
8)目标IP地址:长度为128位,指出了IPv6包的接收方地址。这个地址可以是一个单播、组播或任意点播地址。如果使用了选路扩展头(其中定义了一个包必须经过的特殊路由),其目的地址可以是其中某一个中间结点的地址而不必是最终地址。
IPv4头字段中有一些与IPv6头类似,但其中真正完全保持不变的只有第一个字段,即版本字段,因为在同一条线路上传输时,必须保证IPv4和IPv6的兼容性。下一个字段,即包头长度,则与IPv6无关,因为IPv6头是固定长度,IPv4中需要这个字段是因为它的包头可能在20 B到40 B间变化。
服务类型字段与IPv6的流类别字段相似,但TOS的位置比该字段要靠后一些,而且在具体实现中也没有广泛应用。下一个字段是数据报长度,后来发展成了IPv6中的净荷长度。IPv6的净荷长度中包含了扩展头,而IPv4数据报长度字段中则指明包含包头在内的整个数据报的长度。这样一来,在IPv4中,路由器可以通过将数据报长度减去包头长度来计算包的净荷长度,而在IPv6中则无须这种计算。
后面的三个字段是数据报ID、分段标志和分段偏移值,它们都用于IPv4数据报的分段。由于IPv6中由源结点取代中间路由器来进行分段(后面将有更多关于分段的内容),这些字段在IPv6中变得不重要,并被IPv6从包头中去掉了。而生存期字段,正如上面所述,变成了跳极限字段。生存期字段最初表示的是一个包穿越Internet时以秒为单位的存在时间的上限。如果生存期计数值变为0,该包将被丢弃。其原因是包可能会存在于循环路由中,如果没有方法让它消失,它可能会一直选路(或者直到网络崩溃为止)。在最初的规范中要求路由器根据转发包的时间与收到包的时间的差值(以秒为单位)来减小生存期的值。在实际情况中,大部分路由器都设计为每次对该值减1,而不是计算路由器上真正的处理时间。
协议字段,如前所述,指出在IPv4包中封装的高层协议类型。各协议对应的数值在最新版本的RFC(现在是RFC 1700)中可以查到。这个字段后来发展成为IPv6中的下一个头字段,其中定义了下一个头是一个扩展头字段还是另一层的协议头。
由于如TCP和UDP等高层协议均计算头的校验和,IPv4头校验显得有些多余,因此这个字段在IPv6中已消失。对于那些真的需要对内容进行身份验证的应用,IPv6中提供了身份验证头。