IP详解(一)

一、分类的IP地址

  • 首先来说A类,A类地址的网络号字段占一个字节,但是只有7位可供使用(字段的第一位固定为0),但是可以指派的网络号是126个(即2^7-2)。
  • 减2的原因:1、IP地址中的全0表示是个保留地址,意思是“本网络”。2、网络号为127(0111 1111)保留为本地软件环回测试本主机的进程之间的通信之用。例如:若主机发送一个目的地址为环回地址的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送给任何网络。也就是说,目的地址为环回地址的IP数据报永远不会出现在任何网络上,因为网络号为127的地址根本不是一个网络地址。
  • A类地址的主机号占3个字节,因此每一个A类网络中的最大主机数是2^24 - 2。减2的原因:1、全0的主机号字段表示该IP地址是“本主机”所连接到的单个网络地址。2、全1表示“所有的”,表示该网络上的所有主机。
  • IP地址的空间总共2^32个地址,整个A类地址空间共有2^31个地址,占整个IP地址空间的一半。
  • 在来看看B类,B类的网络字段有2个字节,但前面两位(10)已经固定了。只剩下14位可以进行分配。B类的网络地址128.0.0.0是不可指派的,而可以指派的B类最小网络地址是128.1.0.0。因此B类地址可指派的网络数为2^14-1。
  • B类的最大主机数为2^16-2,减2的原因是要扣除全0和全1的主机号。主机号全0,表示的是网络地址。而全1表示的是这个网段上的所有主机。整个B类地址空间共约有2^30个地址,占整个IP地址空间的四分之一。
  • C类地址有3个字节的网络号字段,最前面的3位是(110),还有21位可以进行分配。C类网络地址192.0.0.0也是不可指派的,可以指派的C类最小网络地址是192.0.1.0,因此C类地址可指派的网络总数是2^21-1,整个C类的地址空间共约2^29个地址,占整个IP地址的八分之一。

                                                                           IP地址的指派范围

网络类别 最大可指派的网络数 第一个可指派的网络号 最后一个可指派的网络号 每个网络中的最大主机数
A 126(2^7 - 2) 1 126 16777214
B 16383(2^14 - 1 ) 128.1 191.255 65534
C 2097151(2^21 - 1) 192.0.1 223.255.255 254

                                                                                      特殊的IP地址

网络号 主机号 源地址使用 目的地址使用 代表的意思
0 0 可以 不可以 在本网络上的本主机
0 host-id 可以 不可以 在本网络上的某台主机host-id
全1 全1 不可以 可以 只在本网络上进行广播(各路由器均不转发)
net-id 全1 不可以 可以 对net-id上的所有主机进行广播
127 非全0和非全1 可以 可以 用于本地软件环回测试

特点

  • IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就有两个IP地址,其网络号必须是不同的。这种主机就是多归属主机。由于一个路由器至少要连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。
  • 按照互联网的规则,一个网络是指具有相同网络号net-id的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网具有同样的网络号,具有不同网络号的局域网必须使用路由器进行互连。

IP地址和硬件地址

  • 在局域网中,由于硬件地址已固化在网卡上的ROM中,因此常常将硬件地址称为物理地址。因为在局域网的MAC帧中的源地址和目的地址都是硬件地址,因此硬件地址又称为MAC地址。
  • 从层次上看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。

  • 在IP层抽象的互联网上只能看到IP数据报,虽然IP数据报要经过路由器R1和R2的两次转发,但在它的首部中的源地址和目的地址始终是IP1和IP2,也就是源地址和目的地址。数据报中间经过的两个路由器的IP地址并不出现在IP数据报的首部中。
  • 虽然在IP数据报首部有源IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
  • 在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化。MAC帧首部的这种变化,在上面的IP层是看不见的。
  • 尽管互连在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网却屏蔽类下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信。

那么主机或路由器怎么知道应当在MAC帧的首部填入什么样的硬件地址呢?

地址解析协议ARP

  • 由于IP协议使用ARP协议,那么ARP协议可以划到网络层,也可以划到数据链路层。
  • 地址解析协议ARP解决这个问题的方法是在主机ARP的告诉缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或者超时删除)。
  • 每一台主机都设有一个ARP告诉缓存,里面有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。那么主机怎样知道这些地址呢?
  • 举个例子:当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP缓存中查看有无主机B的IP地址。如果有,那么就在ARP缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后再通过局域网把该MAC帧发往此硬件地址。
  • 那么如果查不到,首先主机A在本局域网上广播一个ARP请求,ARP请求里面的主要内容就是“我的IP地址就是209.0.0.4”,硬件地址是 00-00-C0-15-AD-18。我想知道IP地址为209.0.0.8的主机的硬件地址。
  • 在本局域网上的所有主机上的ARP进程都收到此ARP请求。
  • 主机B的IP地址与ARP请求中要查询的IP地址一致,就收下这个ARP请求,并向主机A发送ARP响应,同时也在这个ARP响应中写入自己的硬件地址。由于其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此不理睬这个ARP请求。ARP响应的主要内容是“我的IP地址是”209.0.0.8",我的硬件地址是“08-00-2B-00-EE-0A”。
  • 请注意:虽然ARP请求是广播发送的,但是ARP响应是普通的单播,即从一个源地址到一个目的地址。
  • 然后主机A收到主机B的ARP响应后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。同时,为了减少网络上的通信量,主机B也会把主机A的IP地址到硬件地址的映射放在高速缓存中。
  • 还有一点,ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间。凡超过生存时间的项目就从高速缓存中删除掉。
  • 以上解决的是在同一局域网中的主机或路由器的IP地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网,那么就需要路由器的参与。
  • 假定主机H1和主机H2不在同一个局域网。主机H1发送给H2的IP数据报首先需要通过与主机H1连接在同一个局域网上的路由器R1来转发。因此主机H1这时需要把路由器R1的IP地址解析成硬件地址。以便把IP数据报传送给路由器R1,。以后,R1从转发表找到下一个路由器R2,同时使用ARP解析出R2的硬件地址。于是IP数据报按照硬件地址转发到路由器R2.路由器R2在转发这个IP数据报时用类似的方法解析出目的主机H2的硬件地址,是IP数据报最终交付给H2。

解决一个问题:既然在网络链路层上传送的帧最终是按硬件地址找到目的主机的,那么为什么我们还需要抽象的IP地址,而不直接使用硬件地址进行通信?这样的话可以似乎可以不用ARP协议。

  • 由于全世界存在着各式各样的网络,他们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作。因此由用户和 用户主机完成这项工作几乎是不可能的事情。但IP编址把这个复杂的问题解决了。连接互联网上的主机只需各自拥有一个唯一的IP地址,他们之间的通信就像连接爱同一个网络上一样简单方便,因为上述的调用ARP的复杂过程都是有计算机软件自动进行的,对用户来说是看不到的。

IP数据报的格式

扫描二维码关注公众号,回复: 5365869 查看本文章
  • 版本:占4位,是IP协议的版本。通信双方使用的IP协议的版本必须一致。目前最广泛使用的IP协议版本号为4(即IPv4)
  • 首部长度:占4位,可表示的最大十进制数值是15,。请注意,首部长度字段所表示数的单位是32个字(一个32位字长是4字节)。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5,而当首部长度是15时,表示首部长度达到最大值60字节。当IP数据报的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样实现IP协议时较为方便。但是首部长度限制在60字节的缺点就是不够用。但这样做希望用户能够尽量减少开销。最常用的首部长度是20字节,这时不适用任何选项。
  • 区分服务:占8位,用来获取更好的服务。这个字段在旧的标准中叫做服务类型,8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表⽰示: 最⼩小延时, 最⼤大吞吐量, 最⾼高可靠性, 最⼩小成本. 这四者相互冲突, 只能选择⼀个. 对于ssh/telnet这样的应⽤用程序, 最⼩小延时⽐比较重要; 对于ftp这样的程序, 最⼤大吞吐量⽐比较重要。但是,但是实际上一直没有怎么用过。98年将这个字段改为区分服务,只有在使用区分服务的时候时,这个字段才起作用。在一般情况下都不使用这个字段。
  • 总长度:总长度是指首部和数据之和的长度,单位是字节。占16位,因此数据报的最大长度是2^16 - 1 = 65535字节。然而实际传送这样长的数据报在现实中是很少的。
    • 在数据链路层协议中规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部长度加上数据部分)一定不能超过数据链路层所规定的MTU值。最常用的以太网就规定MTU是1500字节,若传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
    • 虽然尽可能长的IP数据报会使传输效率得到提高(因为每一个IP数据报中首部长度占数据总长度的比例就会小点),但是数据报短一点也是有好处的。每一个数据报越短,路由器转发的速度就越快。
    • 因此,IP协议规定,在互联网中所有的主机和路由器,必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节,加上最长的IP首部60字节,再加上4字节的富余量,就得到576字节。当主机发送长度超过576字节的数据报时,应该先了解一下,目的主机能否接受要发送数据报长度。否则就需要进行分片。
  • 标识:占16位,IP软件在储存器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段,但是这个标识不是”序号“,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有数据报文的标识字段中。相同的标识字段的值使分片后的各数据片最后能够正确的重装成为原来的数据报。
  • 标志:占3位,但是目前只有前两位有效
    • 标志字段中的最低位记为MF,MF=1表示后面”还有分片“的数据报。MF=0表示这已是若干个数据报片中的最后一个。
    • 标志字段中间的一位记为DF,意思是不能分片,只有当DF=0时才允许分片。
  • 片偏移:占13位,较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。也就是说,除最后一个数据报片外,每个分片的长度一定是8个字节(64位)的整数倍。
  • 生存时间:占8位,生存时间常用的英文缩写是TTL,表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报在网络中兜圈子,白白的浪费资源。
    • 最初的设计是以秒为单位,没经过一个路由器的时候,就将TTL的值减1,当TTL减为0时,就丢弃这个数据报。
    • 后来随着技术的进步,路由器处理数据报所需的时间一般都远远小于1秒,后来就把TTL字段的功能改为”跳数限制“,路由器每次转发数据报之前把TTL值减1,若TTL减到0,就丢弃这个数据报,不再转发。TTL的意义是指明数据报在网络上至多可经过多少个路由器。
    • 数据报在互联网上经过的路由器的最大值是255,若把TTL的数值设为1,就表示这个数据报只能在本局域网中传送。
  • 协议:占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给那个协议处理。
    • 常用的一些协议和相应的协议字段值如下:
    • 协议名 ICMP IGMP IP TCP EGP IGP UDP IPv6 ESP OSPF
      协议字段值 1 2 4 6 8 9 17 41 50 8
  • 首部校验和:占16位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部校验和(一些字段,如生存时间、标志、片偏移可能会发生变化)。你校验数据部分可减少计算的工作量。
    • 采用下面简单的方法,在发送方,先把IP数据报首部划分成许多16位字的序列,并把校验和字段置0.用反码算术运算把所有的16位相加后,将得到的和的反码写入校验和字段。接收方收到数据报后,将首部的所有16位字在使用反码算术运算相加一次。将得到的和取反码,即得到接收方校验和的计算结果。若首部未发生变化,则此结果必为0,于是就保留数据报。否则认为出了差错,并将此数据报丢弃。
  • 源地址:占32位
  • 目的地址:占32位。
  • 最后一个,IP 数据报首部的可变部分
    • IP数据报首部的可变部分就是一个选项字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。而有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后把用全0的填充字段补齐成为4字节的整数倍。

IP层转发分组的流程

  • 在互联网上转发分组时,是从一个路由器转发到下一个路由器。在路由表中,对每一个路由最主要的是一下两个信息:(目的网络地址,下一跳地址)。
    • 注意:一个实际的路由表还会有其他的信息。例如:标志、参考计数、使用情况以及接口等。
      • ”标志“可以设置多个字符以说明不同的意思。如U表示该路由是可用的,G表示下一跳地址是一个路由器,因而是间接交付(如不设置G,则表示直接交付),H表示该路由是到一台主机(如不设置H,则表示该路由是到一个网络)。
      • ”参考计数“是给出正在使用该路由的TCP连接数。
      • ”使用情况“显示出通过该路由的分组数
      • ”接口“是本地接口的名字,指出分组应当从哪一个接口转发。
  • 我们根据目的网络地址来确定下一跳路由器,这样做,我们得到以下的结果:
    • IP数据报最终一定可以找到目的主机所在目的网络上 的路由器(可能要通过多次的间接交付)。
    • 只有达到最后一个路由器时,才试图向目的主机进行直接交付。
      • 虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即对特定的目的主机指明一个路由。这种路由叫做特定主机路由。采用特定主机路由可使网络管理人员更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。在对网络的连接或路由表进行排错时,指明到某一台主机的特殊路由就十分有用。
      • 路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。

IP数据报没有下一跳路由器的IP地址,那么待转发的数据报又怎么能够找到下一跳路由器呢?

  • 当路由器收到一个待转发的数据报,在从路由表得到下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下一跳路由器的IP地址准换成硬件地址(必须使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。由此可见,当发送一连串的数据报时,上述的这种查找路由表、用ARP得到硬件地址、把硬件地址写入MAC帧的首部等过程,将不断地重复进行,造成一定的开销。

最后我在来归纳一下分组算法

  1. 从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
  2. 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换成具体的硬件地址,把数据报封装为MAC帧);否则就是间接交付。执行下面的3.
  3. 若路由表中目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器,否则执行4.
  4. 若路由表中有到达网络N的路由,则把数据报传送到路由表中所指明的下一跳路由器,否则执行5
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则执行6
  6. 报告转发分组出错。
  • 我们要再强调一下,路由表并没有给分组指明到那个网络的完整路径。路由表指出,到某个网络应当先到某个路由器,在到达下一跳路由器后,在继续查找其路由表,知道下一步应当到那个路由器,这样一步一步地查找下去,之后最后到达最终目的网络。
  • 可以用一个比喻,比如说,我要去机场,从家门口开车,但是没有地图,不知道应当走那条路线,好在每一个岔路口都有一个交警可以询问。因此,每到一个岔路口,就问:”到机场怎么走?“,该警察既不指明下一个岔口以后怎么走,也不指明还要经过几个岔口才能到达机场。他仅仅指出下一个岔口的方向。其回答是:”向左转“。到下一个岔口,再询问到机场应该走那个方向?回答是直行。这样,每到一个岔口,就询问下一步该如何走。这样,即使没有地图,但最终一定可以到达目的地---机场。

猜你喜欢

转载自blog.csdn.net/qq_40421919/article/details/86755285