【Linux网络】网络层协议:IP

[复制链接]
发表于 2026-2-11 01:28:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
        本篇博客整理了 TCP/IP 分层模子中网络层的 IP 协议,旨在让读者更加深入明确网络协议栈的计划和网络编程。

目次
一、网络层
二、IP 报头
1)报头与有用载荷的分离
2)有用载荷的上交
3)源 IP 与目标 IP
4)生存时间
三、分片与组装
1)MTU 与分片、组装
2)分片的详细过程 
3)组装的详细过程
4)分片的丢包情况
补)相干口试题
四、 IP 地点与网段分别
1)IP 地点的构成
2)IP 地点的分配和详细作用
 3)网段分别
4)IP 地点的数量限定
5)特别的 IP 地点
 6)私网 IP 和公网 IP
五、路由
1)数据路由
2)路由表查询的详细过程


一、网络层

        数据的传输离不开网络协议栈,而网络协议栈是分层的。
        在 TCP/IP 分层模子中重要包罗了应用层、传输层、网络层、数据链路层。
        举行网络通讯时,通讯双方发送的数据并不是直接从一方的应用层,直接发送到了另一方的应用层,而是必要应用层将数据继承向下交付。
        待发送的通讯数据,会先从主机的应用层拷贝至传输层,再继承向下贯穿,在网络层和链路层颠末数据封装后,通过网络发送到对方主机;而对端主机在收到数据后,也同样必要在链路层和网络层举行数据解包,并上交给传输层,再继承上交至对端的应用层。
   

          此中,网络层重要负责的题目是,将数据从一台主机送到另一台主机,即数据的路由。网络层有本领将数据送到对方主机,固然不能包管每次都能将数据乐成送达,但因传输层的 TCP 协议的可靠性战略的存在,网络层终极肯定能将数据可靠地发达。
   【ps】一端主机的传输层,从应用层中的某个进程那里拿到数据后,该数据会贯穿网络协议栈举行封装息争包,终极到达对方传输层,对端的传输层也会将数据上交给对端应用层中的某个进程,因此,传输层负责的是,数据从一个进程到另一个进程的过程。
          通讯数据履历的网络传输,一样平常是跨局域网的,多个网络之间由路由器这个硬件装备毗连起来,也就是说,  通讯数据在网络中肯定会颠末多个路由器。
   

          既然云云,怎样选择从源到目标的传输路径就非常紧张了,而这就是数据路由的过程。 
        数据路由的目标是,在确定目标主机后,探求最短的到达路径。
        确定目标主机优劣常紧张的,这直接决定了数据路由时的路径选择,也是数据能跨网络送达的根本。只有数据颠末了较为正确的路径选择,才大概逐步趋近于目标网络或目标主机。
        确定目标主机后,数据就可以在网络中举行路由了。数据自身无法举行路径选择,是不认路的,但幸亏网络中的一台台路由器可以举行路径选择,是认路的,于是数据在路由过程中,就可以不停地去找网络中的一台台路由器问路。
        路由器会将自己做好的路径选择都记录到路由表中,只要查询路由表,就可以找到去特定点的最短路径。而数据在路由时,也会通过路由器来不停举行路径选择,以渐渐靠近目标网络或目标主机。
   

  
【Tips】数据路由的有关概念
  

  • 主机:是配有IP地点、但不举行路由控制的装备(不外,随着技能的发展,如今险些不存在不举行路由控制的装备了)。
  • 路由器:是既配有IP地点、又能举行路由控制的装备(实在,如今主流的路由器也不光仅有路由的功能,乃至还具备某些应用层的功能)。
  • 节点:是主机和路由器的统称。

二、IP 报头

   【Tips】IP 协议格式
  

  

  • 4 位版本号(version):指定 IP 协议的版本(IPv4 / IPv6),对于 IPv4 来说,就是4。
  • 4 位首部长度(header length):表现 IP 报头的长度,以 4 字节为单元。
  • 8 位服务范例(Type Of Service):3 位优先权字段(已弃用)、4 位 TOS 字段、 1 位生存字段(必须置为 0)。此中,4 位 TOS 分别表现:最小延时、最大吞吐量、最高可靠性、最小资源;这四者相互辩说,只能选择一个,比如对于 ssh/telnet 如许的应用步伐,最小延时比力紧张,而对于 ftp 如许的步伐,最大吞吐量比力紧张。
  • 16 位总长度(total length):IP 报文(IP 报头+有用载荷)的总长度,用于将各个 IP 报文举行分离。
  • 16 位标识(id):唯一的标识主机发送的报文,假如数据在 IP 层举行了分片,那么每一个分片对应的 id 都是类似的。
  • 3 位标志字段:第一位生存,表现临时没有规定该字段的意义。第二位表现克制分片,表现假如报文长度凌驾 MTU,IP 模块就会抛弃该报文。第三位表现“更多分片”,假如报文没有举行分片,则该字段设置为 0,假如报文举行了分片,则除了末了一个分片报文设置为 0 以外,别的分片报文均设置为 1。
  • 13 位片偏移(framegament offset):分片相对于原始数据开始处的偏移,表现当前分片在原数据中的偏移位置,实际偏移的字节数是这个值 × 8 得到的。因此除了末了一个报文之外,其他报文的长度必须是 8 的整数倍,否则报文就不一连了。
  • 8 位生存时间(TTL,Time To Live):数据报到达目标地的最大报文跳数,一样平常是 64,每颠末一个路由,TTL 就自减 1,不停减到 0 还没到达,就抛弃了,这个字段重要是用来防止出现路由循环。
  • 8 位协议:表现上层协议的范例。
  • 16 位首部查验和:利用 CRC 举行校验,来辨别数据报的首部是否破坏,但不查验数据部门。
  • 32 位源IP地点和 32 位目标 IP 地点:表现发送端和吸取端所对应的IP地点。
  • 选项字段:不定长,最多 40 字节。

1)报头与有用载荷的分离

        IP 是通过这种“定长报头 + 自形貌字段”的方式分离报头与有用载荷的。
         IP 报头由根本报头和选项字段构成,要分离报头与有用载荷,就要先重新读取完报文中的根本报头和选项字段。IP 报文的前 20 个字节是 IP 的根本报头,此中包罗 4 位的首部长度,指明确 IP 报头的详细长度。从下层获取到一个报文后,IP 可以根据这 4 位的首部长度来报头与有用载荷。

  • IP 从下层获取到一个报文后,起首读取报文的前 20 个字节,并从中提取出 4 位的首部长度,此时得到 IP 报头的巨细 size(最大为 60 字节,最小为 20 字节)。
  • 假如 size 大于 20 字节,则继承从报文中读取 size − 20 字节的数据,即 IP 报头中的选项字段(最大为 40 字节,最小为 0 字节)。
  • 读取完 IP 的根本报头和选项字段后,剩下的就是有用载荷了。

2)有用载荷的上交

        基于 IP 协议的传输层协议不止一种,因此 IP 从下层获取到一个报文并将其解包后,必要知道应将分离后的有用载荷上交给哪一个协议,这会通过 IP 报头中的 8 位协议字段来完成。
          IP 报头中的 8 位协议字段,表现的是上层协议的范例,根据该字段就可以判定出应上交的协议。
        该字段是发送端的 IP 层从传输层获取到数据后所添补的,假设一份数据是由上层 TCP 交给 IP 的,那么其报文中的 8 位协议字段添补的就是 TCP 协议的编号。

3)源 IP 与目标 IP

        IP报头中的 32 位源 IP 地点和 32 位目标 IP 地点,分别表现的是报文的发送端 IP 地点、吸取端 IP 地点。
        数据在网络传输中会颠末一个个的路由器,来举行路由转发,以逐步趋近于目标主机。路由器在资助数据举行路由转发时,会提取出该数据 IP 报头中的目标 IP 地点,作为路由转发的紧张依据。
         当吸取端收到了发送端发来的数据后,也大概要给发送端发送数据,因此,发送端在发送数据时不光必要指明该数据的目标 IP 地点,也必要指明该数据的源 IP 地点,以便吸取端后续作出应答或发送其他紧张的数据。
        特别地,在举行网络编程时,想要一端能发送数据给另一端,必须要指明对端的 IP 地点和端标语,也就是发送数据的目标 IP 地点和目标端标语。这个需指明的目标 IP 地点,实在就是传给网络层的 IP 协议,用于数据在网络中举行路由转发的,而这个需指明的端标语,是给传输层的 TCP协议或 UDP 协议,用于指明该数据应交给应用层的哪一个进程。而由于传输层和网络层都是在操纵体系内核中实现的,因此在实际发送数据时,就无须指明发送数据的源 IP 地点和源端标语,数据在贯穿网络协议栈履历封装时,会被操纵体系添补对应的源 IP 地点和源端标语。

4)生存时间

        报文在网络传输时,大概会由某些缘故因由而送达目标主机,假如报文在路由时出现了环路路由的情况,或目标主机已经非常离线了,那么这个报文就成了一个废弃的游离报文。
        为了制止网络中出现大量的游离报文,IP报头中特别封装了一个字段,叫做 8 位生存时间,以表现报文到达目标地的最大报文跳数。每当报文颠末一次路由,其生存时间就会自减 1,当生存时间减为 0 时,该报文就会被主动抛弃,然后在网络中消散。

三、分片与组装

        IP 可以或许将数据跨网络地从一台主机送到另一台主机,网络传输期间,数据必要颠末一个个的路由器并举行路由转发,终极才气到达目标主机。
        IP 举行数据跨网络传送的条件是,必要先将数据从一个节点传送到和自己相连的下一个节点,而这实际是由网络层下数据链路层负责的。两个节点直接相连,也就意味着这两个节点在同一个局域网中,因此要探究两个相邻节点的数据传送,实际探究的就是局域网通讯的题目。
 
1)MTU 与分片、组装

        MAC 帧是数据链路层中最范例的协议,它能将 IP 传下来的数据封装成数据帧,然后发送到网络中。
        但 MAC 帧携带的有用载荷,其最大长度是有限定的,也就是说,IP 交给 MAC 帧的报文不能凌驾某个值,而这个值就是最大传输单元 MTU(Maximum Transmission Unit),一样平常为 1500 字节。
        假如 IP 向下传输的报文凌驾了 1500 字节,那么就会在 IP 层履历分片,再交给下层的 MAC 帧举行发送;假如数据在发送时,在发送端的 IP 层举行了分片,那么送达对端后,数据也必要在对端的 IP 层举行组装,再向上交付给传输层。
   

          不外,在网络通讯中,数据的分片并不是经常要做的,不分片实在才是常态。分片自己会带来一些潜伏的题目,比方大概会增长丢包的概率等。别的, 在分片的数据中,每一个分片在 IP 层都会被添加上对应的 IP 报头,而传输层添加的报头只会出如今第一个分片中,因此网络中传输的数据包大概没有传输层的报头。
   【ps】数据的分片和组装都由 IP 层完成
          数据的分片和组装都是在 IP 层完成的,上层的传输层和下层的链路层实在并不关心。
          假设传输层的协议为 TCP 。TCP 将待发送的数据交给 IP 后,并不关心该数据是否会在 IP 层举行分片,换句话说,TCP 并不关心数据详细的发送过程;而当 TCP 从 IP 获取到数据后,也不关心该数据是否在 IP 层颠末了组装。
        假设链路层的协议为 MAC 帧。 MAC 帧只负责,将数据从一个节点传送到和自己相连的下一个节点。当 IP 将待发送的数据交给 MAC 帧后,MAC 帧并不知道该数据是 IP 颠末分片后的某个分片数据、还是一个没有颠末分片的数据,它只知道自己一次最多只能发送 MTU 巨细的数据,假如 IP 交给自己的数据大于 MTU 字节 ,那自己就无法举行发送。而当 MAC 帧从网络中获取到数据后,也不关心这个数据是否必要举行组装,只必要将该数据的MAC帧报头去掉后,直接上交给上层 IP 。
          总得来说,数据的总量和可发送量并不由 IP 层决定的,总量是由 TCP 层决定的,可发送量是由 MAC 层决定的,IP 夹在 TCP 和 MAC 之间,当 TCP 的数据总量凌驾 MAC 的可发送量,就必要自行决定是否举行数据分片。而 TCP 层和 MAC 层完全不关心 IP 层举行了分片,这就实现了高度解耦。
  
【ps】不光源端主机大概会对数据举行分片,网络中的路由器也大概对数据举行分片。这是由于,差异局域网中的 MTU 是不一样的,假如传输路径上,某个网络的 MTU 比源端网络的小,那么该网络中的路由器就大概对 IP 数据报再次举行分片。
  
2)分片的详细过程 

        假设,IP 层要发送 4500 字节的数据。由于该数据凌驾了 MAC 帧规定的 MTU,即 1500 字节,因此 IP 必要先将该数据举行分片,然后再将一个个的分片交给 MAC 帧举行发送。4500 字节的数据,至少必要分为四个分片报文举行发送。
        另假设,IP 层添加的 IP 报头不携带选项字段,其长度为 20 字节,且 IP 层将数据分片以下四个分片报文:
   

          在对数据举行分片时,必要记录分片的信息,以便分片报文到达对端的 IP 层后被组装起来。
        IP报头中的 16 位标识、3 位标志和 13 位片偏移,就记录了数据分片的有关信息。
   

  

  • 16 位标识:唯一标识主机发送的报文,假如数据在 IP 层举行了分片,那么每一个分片报文的 16 位标识是类似的。
  • 3 位标志:第一位生存,表现临时没有规定该字段的意义。第二位表现克制分片,表现假如报文长度凌驾 MTU,IP 模块就会抛弃该报文。第三位表现“更多分片”,假如报文没有举行分片,则该字段设置为 0,假如报文举行了分片,则除了末了一个分片报文设置为 0 以外,别的分片报文均设置为 1 。
  • 13 位片偏移:分片相对于原始数据开始处的偏移,表现当前分片在原数据中的偏移位置,实际偏移的字节数是这个值 × 8 得到的。因此除了末了一个报文之外,其他报文的长度必须是 8 的整数倍,否则报文就不一连了。
        由于四个分片报文是在同一台主机的 IP 层被分片的,因此它们的16位标识应是一样的。假设四个分片报文的 16 位标识都是 123,则这四个报文对应的 16 位标识、3 位标志中的“更多分片”和13 位片偏移分别如下: 
   

  
3)组装的详细过程

        MAC 帧会将从网络中获取的数据上交给 IP 层。但这些数据大概来自天下各地,大概是颠末分片后发送的,也大概是没有颠末分片直接发送的,因此,IP 必须要通过某种方式来区分收到的各个数据。
        通过 IP 报头中,记录了发送端的 IP 地点的 32 位源 IP 地点,可以区分数据来自哪一台主句。
        而通过 IP 报头中的 16 位标识,可以判定哪些报文是没有颠末分片的独立报文,哪些报文是颠末分片后的分片报文。详细来说,未分片数据的 16 位标识都是差异的,而由同一个数据分片得到的各个分片报文,其所对应的 16 位标识都是类似的。
        由此,通过 IP 报头中的 32 位源 IP 地点和 16 位标识,就可以将颠末分片的数据各自聚合在一起举行组装。
        由同一个数据分片得到的各个分片报文,有以下相通的特点:


  • 第一个分片报文中,13 位片偏移的值肯定为 0。
  • 末了一个分片报文中,“更多分片”标志位肯定为 0。
  • 对于每一个分片报文来说,( 当前报文的 13 位片偏移 + 当前报文的数据字节数 ) ÷ 8  = 下一个分片报文的 13 位片偏移。
        根据分片报文的这三个相通的特点,就可以或许将分片报文公道的组装起来——先找到分片报文中 13 位片偏移为 0 的分片报文,提取出其 IP 报头中的 16 位总长度字段,并通过盘算得出下一个分片报文的 13 位片偏移,然后重复此方式,依次将各个分片报文按次序拼接起来,直到拼接到一个“更多分片”标志位为 0 的分片报文为止。

4)分片的丢包情况

        分片后的报文在网络传输时,也大概出现丢包题目,不外,吸取端有本领判定是否收到了全部的分片报文。
        现假设某组分片报文对应的 16 位标识值为 x,分片报文丢包的情况可以大抵分为以下三种:


  • 若第一个分片报文丢包了,则在吸取端收到的分片报文中,就找不到对应16位标识为 x、13 位片偏移为 0 的分片报文。
  • 若末了一个分片报文丢包了,则在吸取端收到的分片报文中,就找不到对应16为标识为 x、“更多分片”标志位为 0 的分片报文。
  • 若别的分片报文丢包了,则吸取端在举行组装时,就会找不到那些 13 位片偏移为特定值的分片报文。
  【ps】吸取端可以或许通过 13 位片偏移,辨别未分片报文和末了一个分片报文
         固然未分片报文的“更多分片”标志位为 0,末了一个分片报文的“更多分片”标志位也为0,但吸取端可以或许通过 13 位片偏移,辨认出它是末了一个分片报文——未分片报文的 13 位片偏移为 0,而末了一个分片报文 的13位片偏移不为 0。 
  
【补】可以分片,但不发起
          固然传输层并不关心 IP 层怎样分片,但并不是说分片对传输层就没有影响了,详细与传输层中包管传输可靠性的 TCP 协议有关。
          假如一个数据在网络传输时,没有颠末分片,那么只要吸取端收到了这一个报文,就可以以为该数据被可靠地收到了。而假如一个数据举行了分片,那么只有吸取端收到了全部的分片报文,并将其乐成组装,才可以以为该数据被可靠地收到了。
          然而浩繁的分片报文中,难免会有一个报文出现丢包,此时吸取端无法将报文乐成组装起来,进而导致吸取端会将收到的分片报文全部抛弃,使得发送端的 TCP 因收不到对端的应答而要求超时重传,且必要将数据团体举行重传。
        假设在网络传输时,丢包的概率是万分之一,那么将数据拆分为一百份举行发送,就会使丢包的概率上升到百分之一,进而增长传输层重传数据的概率。
        因此,为了包管数据传输的服从,并不发起数据在发送时举行分片。
  
【补】TCP 少量多次地发送,可低落数据分片的概率
          数据分片的根本缘故因由其着实于,传输层一次性向下交付的数据太多了,导致 IP 无法直接将数据向下交给 MAC 帧。假如传输层控制好一次性向下交付的数据量,那么 IP 自然也就不必要对数据举行分片。
          传输层中的 TCP 协议,之以是被称为传输控制协议,是由于它可以控制一次向下交付数据不凌驾某一阈值,即 MSS(Maximum Segment Size,最大报文段长度)。
        通讯双方在创建 TCP 毗连时,除了必要协商自身窗口巨细等概念之外,还会协商在后续通讯时,每一个报文段所能承载的最大报文段长度 MSS。
        MAC 帧的有用载荷最大为 MTU,TCP 的有用载荷最大为MSS,由于 TCP 和 IP 在一样平常情况下的报头长度都是 20 字节,因此一样平常情况下 MSS = MTU - 40,也就是说,MSS 的值一样平常为 1460 字节。
           TCP 一样平常会将发送的数据控制在 1460 字节以内,以低落数据分片的大概性,也只能说是“低落”。这是由于,差异局域网的链路层,MTU 大概差异,假如数据在传输过程中,进入到了一个 MTU 较小的网络,那么该数据仍大概被该网络中的路由器举行分片。
  
补)相干口试题

   Q:对端IP层收到数据报后怎么知道这是一个被分片了的数据报?
          数据链路层不关心 IP 层是否分片了,它只管发,以是对端的 IP 层收到数据报后,必要知道这是一个被分片了的报文。
          假如更多分片标志位(第三个标志位)是 1,则阐明该数据报被分片了;假如更多分片是 0,但 13 位片偏移值大于 0,也阐明该数据报被分片了。
  
Q:对于同一个报文的全部分片,对端是怎样辨认出来的?
          由于16位标识符的存在,对端收到的数据报中,标识符类似的数据报组合起来就是一个完备的数据报。
  
Q:怎么判定哪一个数据报是第一个分片,哪一个是末了一个分片?
          更多分片标志位是 1,片偏移量是0,阐明这是第一个分片;更多分片标志位是0,片偏移量大于0,阐明这是末了一个分片。
  
Q:怎么分辨哪个分片在前,哪个分片在后?
  将全部分片的片偏移量按照升序排序,就可以知道哪个分片在前,哪个分片在后。
  
Q:怎么判定分片有没有收全或丢失?
          当前分片的起始位置+自身数据长度,假如即是下一个分片中的片偏移量,阐明这两个分片是挨着的,如次反复判定,便能判定出是否收全了,只要有一次判定结果不相当,那么就阐明有数据片丢了。
  
Q:怎么包管对端组装起来的报文是正确的?
          IP协议有16位首部校验和,校验通过会分发给上层TCP协议。
          TCP协议也有校验和,可以判定出数据是否是正确的。
  
四、 IP 地点与网段分别

1)IP 地点的构成

        IP地点由网络号和主机号两部门构成:


  • 网络号:用于区分网络。包管相互毗连的两个网段具有差异的标识。
  • 主机号:用于区分主机。同一网段内,主机之间具有类似的网络号,但必须有差异的主机号。
          比方以下一台路由器毗连了两个网段。对于网络标识来讲,同一网段内主机的网络标识是类似的,差异网段内主机的网络标识是差异的;对于主机标识来讲,同一网段内主机的主机标识是差异的,差异网段内主机的主机标识是可以类似的。
  

          网络号类似的主机放到一起就构成了一个子网,网络号差异的主机之间就构成了多个差异的子网。
          假如在子网中新增一台主机,则这台主机的主机号在子网中是唯一的,而网络号和这个子网的网络号同等。
  
2)IP 地点的分配和详细作用

        当子网中每新增一台主机时,都必要为其分配一个 IP 地点,而当子网中每有一台主机断开网络时,又必要将它的 IP 地点采取,便于分配给新增的主机利用。这使得手动管理 IP 地点非常贫苦,而究竟上对于 IP 地点的分配和采取一样平常不会手动举行,而是采取 DHCP(Dynamic Host Configuration Protocol,动态主机设置协议)技能。
        DHCP 是一个基于 UDP 的应用层协议,通常被应用在大型的局域网情况中,其重要作用就是会合地点管理、分配 IP 地点,不光能使网络情况中的主机动态地得到 IP 地点、Gateway 地点、DNS 服务器地点等信息,还能提升地点的利用率。
        别的,一样平常的路由器也都带有 DHCP 功能,因此路由器实在也可以看作是一个 DHCP 服务器。比方毗连 WiFi 时,,路由器必要验证账号和暗码,验证通事后,路由器就会动态分配一个IP地点,通过这个 IP 地点就可以举行各种上网运动。
   【Tips】IP 地点的分配和采取一样平常依赖于应用层的 DHCP 协议。
          IP 地点作为信标,在数据跨网络传输中起着至关紧张的作用。但实在,IP 协议将数据跨网络地从一台主机发送到另一台主机,并不是直接将数据送达目标主机的,而是先将数据送达目标主机地点的网络,再送达目标主机的。
        也就是说,数据在路由时的第一目标,并不是找到目标主机,而是找到目标网络地点的网络,然后再在目标网络中找到目标主机。
        数据在路由时之以是不一开始就以找目标主机为目标,是由于如许服从太低了。找目标主机的过程本质是打扫的过程,假如一开始就以找目标主机为目标,那么在查找的过程中,一次只能打扫一个主机,而假如一开始先以找目标网络为目标,那么就能一次打扫大量和目标主机不在同一网段的主机,如许就可以大大进步检索的服从。
   【Tips】数据在路由时,会先找目标网络,再找目标主机。
          而为了进步数据路由的服从,前人对网络举行了网段分别。

 3)网段分别

        已往曾经提出一种分别网络号和主机号的方案,将全部 IP 地点按取值范围给分为五类。
   

  

  • A 类:0.0.0.0 到 127.255.255.255。
  • B 类:128.0.0.0 到 191.255.255.255。
  • C 类:192.0.0.0 到 223.255.255.255。
  • D 类:224.0.0.0 到 239.255.255.255。
  • E 类:240.0.0.0 到 247.255.255.255。
        依此方案,要判定一个 IP 地点属于哪一类,只必要遍历 IP 地点的前 5 个比特位,此中第几个比特位开始出现 0 值,那么这个 IP 地点就对应地属于哪一类地点。
        但随着网络的飞速发展,这种分别方案很快就显现了范围性。
        由于 A 类地点的网络号只占 7个比特位,因此 A 类地点可申请的网络只有  2 ^ 7 个,这使得大多数构造,比方一些学校、公司、实行室等,只好选择申请 B 类地点。而 B 类地点的主机号占 16 个比特位,于是理论上一个 B 类网络中答应有 65536 台主机。但在实际网络架设中,一样平常一个局域网中不会存在这么多主机,假如存在,也就意味着,大量的 IP 地点会被浪费掉。
        为了制止大量 IP 地点被浪费,厥后又提出了新的分别方案,被称为 CIDR(Classless Interdomain Routing,无类域间路由)。
         CIDR 并没有完全扬弃原先的方案,而是基于原有的五类网络的,继承举行子网分别,这也就意味着,必要借用主机号中的多少位来充当网络号,而为了区分 IP 地点中的网络号和主机号,又引入了子网掩码(subnet mask)的概念。
        子网掩码是一个 32 位的正整数,通常用一串 “0” 来末端。每一个子网都有自己的子网掩码,将 IP 地点与当前网络的子网掩码举行“按位与”操纵,就可以或许得到当前网络的网络号。
        随着一个网络被更细粒度地分别成一个个更小的子网,子网中 IP 地点对应的主机号也越来越短,使得子网中可用 IP 地点的个数也就越来越少,由此就制止了大量 IP 地点被浪费的情况。
        假设在某一子网中,将IP地点的前 24 位作为网络号,则该网络对应的子网掩码的前 24 位就为都 1,剩下的 8 位都为 0,将其用点分十进制表现就是 255.255.255.0。该子网中有一台主机,其 IP 地点是 192.168.128.10,将这个IP地点与该网络的子网掩码举行“按位与”操纵后,就得到了 192.168.128.0,即这个子网的网络号。
        在用子网掩码与子网中主机的 IP 地点举行“按位与”操纵时,本质就是生存了主机 IP 地点中前24 位的原貌,将剩下的 8 位的值清 0 了而已,换句话说,是将主机号清 0 了,于是“按位与”的结果就是该网络的网络号。
   【Tips】CIDR 下, IP 地点与 ^ 子网掩码 = 网络号
          别的,子网分别是能举行多次的,分别出来的子网还可以继承举行子网分别。因此,一个数据在路由时,随着数据不停路由进入更小的子网,其网络号的位数也是在不停变革的,更正确地说,其网络号的位数是不停在增长的。这也就意味着,IP 地点中的主机号,其位数在不停镌汰。于是,当数据路由到达目标主机地点的网络时,就可以在该网络中找到对应的目标主机,并顺遂将数据交给该主机。

4)IP 地点的数量限定

        由于 IP 地点(以 IPv4 为例)是一个 4 字节、32 位的正整数,因此共有 2 ^ 32 个 IP 地点,也就是将近 43 亿个IP地点。
        TCP/IP 协议规定,每个主机都必要有一个 IP 地点。
         但如今不光电脑必要 IP 地点,另有其他装备也必要 IP 地点。比方也可以上网的智能手机,如今全天下生齿已经有 70 多亿了,就算只有一半人拥有智能手机,算下来也有 30 多亿了,而它们都必要一个唯一的 IP 地点。随着科技的发展,另有智能手表、智能冰箱、智能洗衣机等装备,它们假如要入网,就也必要 IP 地点。别的,一个主机大概还必要多个 IP 地点,更别谈另有许多组网的路由装备,也必要IP地点。
        以是,43 亿个 IP 地点实在早就不敷用了,因此才提出了 CIDR。
        CIDR 对已经分别好的五类网络继承举行子网分别,其目标既是为了镌汰 IP 地点的浪费,也是办理 IP 地点不敷用的题目。固然这简直在肯定水平上缓解了 IP 地点不敷用的题目,但 IP 地点的绝对上限并没有增长。
   【补】办理 IP 地点不敷的其他方案
  

  • 动态分配 IP 地点:只给接入网络的装备分配 IP 地点。由此,同一个 MAC 地点的装备,每次接入互联网中,得到的IP地点不肯定是类似的,这就制止了 IP 地点强绑定于某一台装备。
  • NAT 技能:让差异局域网中同时存在两个类似的IP地点。NAT 技能不光能办理 IP 地点不敷的题目,而且还可以或许有用地制止来自网络外部的攻击,潜伏并掩护网络内部的盘算机。
  • IPv6:IPv6 用 16 字节 128 位来表现一个 IP 地点,可以或许大大缓解 IP 地点不敷的题目。不外,IPv6 并不是 IPv4 的简朴升级版,它们实在是互不干系的两个协议,相互并不兼容,而如今 IPv6 尚未遍及。

5)特别的 IP 地点

        实在,并非全部的 IP 地点都可以或许作为主机的 IP 地点,有些 IP 地点自己是具有特别用途的。


  • 将 IP 地点中的主机地点全部设为 0,就成为了网络号,代表这个局域网。
  • 将 IP 地点中的主机地点全部设为 1,就成为了广播地点,用于给同一个链路中相互毗连的全部主机发送数据包。 
  • 特别的,127.* 的 IP 地点用于本机环回(loop back)测试,通常是 127.0.0.1。
        主机号为全 0 代表的是当前局域网的网络号,主机号为全 1 代表的是广播地点,这两个 IP 地点都不能作为主机的 IP 地点。也就是说,在某个局域网中,最多能存在的主机个数实在是 2 ^ 主机号位数 - 2 。
   【补】本机环回
          本机环回时,数据不会被入网卡,也就不会发送到网络中。
          本机环回的目标是,将数据自顶向下贯穿协议栈,履历一轮数据封装的过程,然后再自底向上贯穿协议栈,举行一轮数据的解包和分用,以测试本地的网络功能是否正常。
          当数据到达 IP 层必要继承向下交付时,假如是环回步伐,那么 IP 输出函数会将该数据放入到 IP 输入队列当中,然后再由IP输入函数读取上去。而 IP 输入函数读取的本应该是链路层交付上来的数据,因此,该数据后续就会被看成从网络中读取的一样对待,各层协议都会对该数据依次举行解包和分用。
        假如不是环回步伐的话,就会判定该数据的目标 IP 地点是否为广播或多播地点,大概是否与本主机的 IP 地点类似。是,则也会将该数据放入到 IP 输入队列中,等候 IP 输入函数将其读走。只有步伐不是环回步伐,且也不是广播或多播、或发给本主机的数据,才会用ARP 获取该数据目标主机的以太网地点,并举行数据发送的操纵。
  

  
 6)私网 IP 和公网 IP

        假如一个构造内部组建局域网,IP 地点只用于局域网内的通讯,而不直接连入广域网中,则称这个 IP 地点是私有的。
   【Tips】私有 IP 和公网 IP
         RFC 1918 规定了用于组建局域网的私有 IP 地点,对于以下在地点首部的点分十进制表现:
  

  • 10.*,前 8 位是网络号,共 16,777,216 个地点。
  • 172.16.* 到 172.31.*,前 12 位是网络号,共 1,048,576 个地点。
  • 192.168.*,前 16 位是网络号,共 65,536 个地点。
        在以上这些范围中的,都称为私网 IP,别的的则称为公网 IP,或全局 IP。
    【补】NAT 技能将数据送达服务器
          在毗连两个或多个网络的路由器上,有两种网络接口:
  

  • LAN 口(Local Area Network):表现毗连本地网络的端口,重要与家庭网络中的互换机、集线器或 PC 相连。
  • WAN 口(Wide Area Network):表现毗连广域网的端口(一样平常指互联网)。
        此中,LAN 口的 IP 地点叫做 LAN 口 IP,或子网 IP,而 WAN 口的 IP 地点叫做 WAN 口IP,或外网 IP。
          自用的电脑、家用路由器、运营商路由器、广域网以及我们要访问的服务器之间具有如下关系:
  

  • 差异的路由器的子网 IP ,实在都是一样的(通常是 192.168.1.1),子网内的主机的 IP 地点不能重复,但子网之间的 IP 地点可以重复。
  • 每一个家用路由器,也是运营商路由器的子网中的一个节点,如许的运营商路由器大概会有许多级,最外层的运营商路由器的 WAN 口 IP 就是一个公网 IP 了。
  • 假如渴望自己实现的服务器步伐,可以或许在公网上被访问到,就必要把步伐摆设在一台具有外网 IP 的服务器上。

           私网 IP 不能出如今公网中。这是由于,差异的局域网中主机的 IP 地点大概是类似的,私网 IP 在广域网中无法唯一标识一台主机,也就不能让私网 IP 出如今公网上;且 IP 地点自然不敷,也就不能让主机直接利用公网 IP,而得让主机利用可重复的私网 IP,在差异的局域网中利用类似的 IP 地点,以缓解 IP 地点的不敷;运营商要收取网费,数据包必须要颠末运营商的路由器才气发送到公网,而不能直接发送到公网。
          差异局域网中的主机密举行通讯,必须跨公网。这是由于,一个主机密将数据发送给另一台主机,条件是得先知道另一台主机的 IP 地点,但即便知道了,也有大概两台主机的 IP 地点是一样的,且都是私网 IP 地点,假如一台主机发送数据时,将目标 IP 地点填成和自己类似的IP地点,体系就会以为这个数据就是要发给自己的,就不会向外举行发送了。也就是说,数据要从一个局域网到另一个局域网,不大概不颠末公网。
          于是,子网内的主机在和外网举行通讯时,路由器会不停将数据包的 IP 报头中的源IP地点,更换成路由器的 WAN 口 IP,云云逐级更换,终极数据包中的源IP 地点会变成一个公网 IP,这种技能就称为 NAT(Network Address Translation,网络地点转换)。
          但实际上也存在一些技能,可以或许使数据包在发送过程中不举行公网 IP 的更换,而将数据正确地送到目标主机。这种技能叫做内网穿透,或 NAT 穿透。
   
五、路由

1)数据路由

        数据在网络传输中,会履历路由,也就是路径选择,从而到达目标主机。
        数据路由的过程,实在就是一跳一跳(Hop by Hop)“问路”的过程。所谓“一跳”,就是数据链路层中的一个区间,详细在以太网中指,从源 MAC 地点到目标 MAC 地点之间的帧传输区间。
   

          数据在网络传输中,会遇到许多路由器,这些路由器会资助数据举行路由转发。每收到一个数据包,路由器都会查询路由表,找到该数据的目标 IP 地点,并告知该数据下一跳应该往哪跳。
   【Tips】路由器查询路由表的大概结果
  

  • 得知该数据下一跳应该跳到哪一个子网。
  • 没有发现匹配的子网,此时路由器会将该数据转发给默认路由。
  • 得知该数据的目标网络就是当前地点的网络,此时路由器就会将该数据转给当前网络中对应的主机。
 
2)路由表查询的详细过程

        每个路由器内部会维护一张路由表。
           指令 route 可以检察云服务器上对应的路由表。
  

          此中表项的寄义为:
  

  • Destination:代表的是目标网络地点。
  • Gateway:代表的是下一跳地点。
  • Genmask:代表的是子网掩码。
  • Flags:U 标志表现此条目有用(可以禁用某些条目),G 标志表现此条目标下一跳地点是某个路由器的地点。没有 G 标志的条目,表现目标网络地点是与本机接口直接相连的网络,不必经路由器转发。
  • Iface:代表的是发送接口。
        当 IP 数据包到达路由器时,路由器就会用此中的目标IP地点,依次与路由表中的子网掩码 Genmask 举行“按位与”操纵,然后将结果与子网掩码所对应的目标网络地点 Destination 举行比对,假如匹配,则阐明该数据包下一跳就应该跳去这个子网,然后就会将该数据包,通过对应的发送接口 Iface 发出;假如没有找到匹配的目标网络地点,路由器就会将这个数据包发送到默认路由,也就是目标网络地点一项下的 default,可以看到,默认路由对应的 Flags 是 UG,实际就是将该数据转给了另一台路由器,让该数据在另一台路由器继承举行路由。
        数据包根据自己持有的目标 IP 地点中的网络号,不停颠末路由器的路由后,终极会到达目标主机地点的目标网络,然后再根据目标 IP 地点中的主机号举行路由,终极会到达目标主机。
   【补】路由表天生算法
          路由可分为静态路由和动态路由:
  

  • 静态路由:是指由网络管理员手工设置路由信息。
  • 动态路由:是指路由器可以或许通过算法主动创建自己的路由表,且能根据实际情况举行调解。
        此中,相干天生算法有:隔断向量算法、LS 算法、Dijkstra 算法等。
  
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表