网络层协议 -------- IP

目录

1.基本概念

2.IP协议格式

3.IP报文的分片和组装

4.网段划分

 5.IP地址数量限制

6.私网IP和公网IP

7.路由

8.路由器的构成 


1.基本概念

(1)为什么需要网络层

  • 异构网络互联,即跨局域网连接和资源共享;
  • 互联网络中主机标识问题;
  • 互联网中主机间路由选择问题(最佳路径);
  • 互联网中数据转发的问题(分组转发)。

                 

(2)网络层解决的问题

  • TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略,而真正负责数据在网络中传输的则传输层之下的网络层和链路层 .
  • 网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、 尽最大努力交付的数据报服务。
  • 网络层要解决的问题就是,将数据从一台主机送到另一台主机,也就是数据的路由。

(3)保证数据可靠的从一台主机送到另一台主机的前提

  • 当双方在进行基于TCP的网络通信时,要保证将数据可靠的从一台主机送到另一台主机,前提是发送方要有将数据送到对方主机的能力,要是发送方连将数据发送给对方的能力都没有,那就更不用谈可靠的将数据送给对方主机了。
  • 需要注意的是,发送方有将数据送到对方主机的能力,并不意味着发送方每次发送的数据都能够成功的发送到对方,但如果发送方连将数据发送给对方的能力都没有,那发送方基本就不可能将数据发送给对方。
  • 一旦发送方有了将数据发送给对方的能力,就算发送方某次发送的数据没有成功到达对方,此时上层TCP由于没有收到对应数据的应答,此时上层TCP会要求进行数据重发,直到数据成功发送到对方主机为止。
  • 在网络层有能力将数据送到对方主机的情况下,虽然网络层不能保证每次都能将数据成功送到对方主机,但在TCP提供的可靠性策略的保证下,最终网络层就一定能够将数据可靠的发送到对方主机。

说明:

  • 网络层解决的问题是,将数据从一台主机送到另一台主机,因此网络层解决的是主机到主机的问题。
  • 一方传输层从上方进程拿到数据后,该数据贯穿网络协议栈进行封装和解包,最终到达对方传输层,此时对方传输层也会将数据向上交给对应的进程,因此传输层解决的是进程到进程的问题。
     

(4)路由选择 

  •  数据进行的网络传输一般都是跨网络的,而路由器就是连接多个网络的硬件设备,因此数据在进行跨网络传输时一定需要经过多个路由器。
  • 数据路由就像我们旅游一样,当确定了要到达的目标主机后,就需要寻找最短的路径到达该目的地。
  • 确定数据路由的目的地后,数据就可以在网络中进行路由了,但数据在路由时无法自行进行路径选择,因为这个数据本身是“不认识路”的,因此数据在路由的过程中需要不断“找路人问路”,而这里所谓的“路人”就是网络当中的一台台路由器。
  • 网络当中的路由器是“认识路的”,它们将自己的“认路经验”都记录到路由表当中,因此路由器可以通过查路由表找到去特定点的最短路径。因此数据在路由时,会不断通过路由器来进行路径选择.

                         

(5)主机和路由

  • 主机:配有IP地址,但是不进行路由控制的设备。但实际现在几乎不存在不进行路由控制的设备了,就连你的笔记本也会进行路由控制。
  • 路由器:既配有IP地址,又能进行路由控制。实际现在主流的路由器已经不仅仅具有路由的功能了,它甚至具备某些应用层的功能。
  • 节点:主机和路由器的统称。

                

                        

                

2.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位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数,一般是64,每经过一个路由,TTL--,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环。
  • 8位协议:表示上层协议的类型。
  • 16位首部检验和:使用CRC进行校验,来鉴别数据报的首部是否损坏,但不检验数据部分。
  • 32位源IP地址和32位目的IP地址:表示发送端和接收端所对应的IP地址。
  • 选项字段:不定长,最多40字节。
     

(1)IP报头在内核当中本质就是一个位段类型,给数据封装IP报头时,实际上就是用该位段类型定义一个变量,然后填充IP报头当中的各个属性字段,最后将这个IP报头拷贝到数据的首部,至此便完成了IP报头的封装。 

(2)如何将报头和有效载荷分离

①IP分离报头与有效载荷的方法与TCP是一样的,当IP从底层获取到一个报文后,虽然IP不知道报头的具体长度,但IP报文的前20个字节是IP的基本报头,并且这20字节当中涵盖4位首部长度。

  • 当IP从底层获取到一个报文后,首先无脑读取报文的前20个字节,并从中提取出4位的首部长度,此时便获得了IP报头的大小size
  • 如果size的值大于20字节,则需要继续从报文当中读取size−20字节的数据,这部分数据就是IP报头当中的选项字段。
  • 读取完IP的基本报头和选项字段后,剩下的就是有效载荷了。

②IP就是通过这种“定长报头+自描述字段”的方式进行报头和有效载荷的分离的。但需要注意的是,IP报头当中的4位首部长度描述的基本单位与TCP报头当中的4位首部长度一样,都是以4字节为单位进行描述的,这也恰好是报文的宽度。最大报头60字节.

③TCP为什么没有总长度的字段: TCP不需要,为什么不需要?   TCP是字节流传输,TCP的各种机制都校验完了,没有问题,只需要把报头去掉,把数据放到缓冲区里面就完了.
                

(3)如何知道交付给上层的那一个协议

在IP报头当中有一个字段叫做8位协议,该字段表示的就是上层协议的类型,IP就是根据该字段判定应该将分离出来的有效载荷交付给上层的哪一个协议的。该字段是发送方的IP层从上层传输层获取到数据后填充的,比如是上层TCP交给IP层的数据,那么该数据在封装IP报头时的8位协议填充的就是TCP对应的编号。
                

(4) 32位源IP地址和32位目的IP地址

  • 数据在网络传输过程中会遇到一个个的路由器,这些路由器会帮助网络当中的数据进行路由转发,使得网络中的数据慢慢趋近于目标主机。路由器在帮助数据进行路由转发时,会提取出该数据的IP报头当中的目的IP地址,并以此作为数据路由转发的重要依据。
  • 当接收端收到了发送端发来的数据后,接收端可能也想要给发送端发送数据,因此发送端在发送数据时除了需要指明该数据的目的IP地址,还需要指明该数据的源IP地址,也就是发送端的IP地址。即便接收端收到数据后没有数据想要发送给发送端,但至少接收端需要向发送端发送一个响应报文,表明发送端发送的数据已经被接收端可靠的收到了,因此发送出去的数据除了需要指明该数据的目的IP地址,还需要指明该数据的源IP地址。

                

(5)理解socket编程:

  • 在进行socket编程的时候,当一端想要发送数据给另一端时,必须要指明对端的IP地址和端口号,也就是发送数据的目的IP地址和目的端口号。
  • 其中这里的IP地址就是给网络层的IP用的,用于数据在网络传输过程中的路由转发,而这里的端口号就是给传输层的TCP或UDP用的,用于指明该数据应该交给上层的哪一个进程。
  • 发送数据时我们不需要指明发送数据的源IP地址和源端口号,因为传输层和网络层都是在操作系统内核当中实现的,数据在进行封装时操作系统会自行填充上对应的源IP地址和源端口号

                        
(6)8位生存时间

  • 报文在网络传输过程中,可能因为某些原因导致报文无法到达目标主机,比如报文在路由时出现了环路路由的情况,或者目标主机已经异常离线了,此时这个报文就成了一个废弃的游离报文。
  • 如果没有TTL,—些生命力比较顽强的报文它可能经过长时间的转发最后才可能消散掉,这个报文可能早就被丢弃了但是卡在路由当中。
  • 必须设置TTL,.如果没有那么网络中可能存在大量的短期之内不会消散的游离报文(互联网数据中的流浪者,不知道从哪来的,也不知道发向谁),永远在流荡,那么这些数据再网络中转发时浪费资源。
  • 为了避免网络当中出现大量的游离报文,于是在IP的报头当中就出现了一个字段,叫做8位生存时间(Time To Live,TTL)。8位生存时间代表的是报文到达目的地的最大报文跳数,每当报文经过一次路由,这里的生存时间就会减一,当生存时间减为0时该报文就会被自动丢弃,此时这个报文就会在网络中消散。
     

                

                 

3.IP报文的分片和组装

(1)最大传送单元MTU

  • MAC帧作为数据链路层的协议,它会将IP传下来的数据封装成数据帧,然后发送到网络当中。但MAC帧携带的有效载荷的最大长度是有限制的,也就是说IP交给MAC帧的报文不能超过某个值,这个值就叫做最大传输单元(Maximum Transmission Unit,MTU),这个值的大小一般是1500字节。
  • MAC帧无法发送大于1500字节的数据,因此IP层向下交付的数据的长度不能超过1500字节,这里所说的数据包括IP的报头和IP的有效载荷。

        

(2) 分片和组装

① 如果IP层要传送的数据超过了1500字节,那么就需要先在IP层对该数据进行分片,然后再将分片后的数据交给下层MAC帧进行发送

                

②如果发送数据时在IP层进行了分片,那么当这些分片数据到达对端主机的IP层后就需要先进行组装,然后再将组装好的数据交付给上层传输层。

③补充

  • 数据的分片不是经常需要做的,实际在网络通信过程中不分片才是常态,因为数据分片会存在一些潜在的问题,比如分片可能会增加丢包的概率。
  • 数据的分片和组装发生在IP层,不仅源端主机可能会对数据进行分片,数据在路由过程中的路由器也可能对数据进行分片。因为不同网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU小,那么路由器就可能对IP数据报再次进行分片。
  • 分片数据的组装只会发生在目的端的IP层。
  • 在分片的数据中,每一个分片在IP层都会被添加上对应的IP报头,而传输层添加的报头只会出现在第一个分片中,因此网络中传输的数据包可能没有传输层的报头。

                 

(3)数据的分片和组装都是由IP层完成的

数据的分片和组装都是在IP层完成的,上层的传输层和下层的数据链路层并不关心。

传输层只负责为数据传送提供可靠性保证,比如当数据传送失败后,传输层的TCP协议可以组织进行数据重传。

  • 当TCP将待发送的数据交给IP后,TCP并不关心该数据是否会在IP层进行分片,即TCP并不关心数据具体的发送过程。
  • 当TCP从IP获取到数据后,TCP也不关心该数据是否在IP层经过了组装。

而数据链路层的MAC帧只负责,将数据从一个节点传送到和自己相连的下一个节点。

  • 当IP将待发送的数据交给MAC帧后,MAC帧并不知道该数据是IP经过分片后的某个分片数据,还是一个没有经过分片的数据,MAC帧只知道它一次最多只能发送MTU大小的数据,如果IP交给MAC帧大于MTU字节的数据,那MAC帧就无法进行发送。
  • 当MAC帧从网络中获取到数据后,MAC帧也不关心这个数据是否需要进行组装,MAC帧只需要将该数据的MAC帧报头去掉后直接上交给上层IP就行了,而至于该数据的组装问题则是IP需要解决的。

因此,数据的分片和组装完全是由IP协议自己完成的,传输层和数据链路层不必关心也不需要关心。
                

(4)分片的过程

①假设IP层要发送3820字节的数据,由于该数据超过了MAC帧规定的MTU,因此IP需要先将该数据进行分片,然后再将一个个的分片交给MAC帧进行发送。

②IP报头如果不携带选项字段,那么其大小就是20字节,假设IP层添加的IP报头的长度就是20字节,并按下列方式将数据分片后形成了3个分片.  每一个分片都要添加报头.

                         

③分片后的报头中填写的相关信息,13位片偏移当中记录的字节数是当前分片在原数据开始处的偏移字节数的值÷ 8得到的

                         

(5)组装的过程 

①MAC帧交给IP层的数据可能来自世界各地,这些数据可能是经过分片后发送的,也可能是没有经过分片直接发送的,因此IP必须要通过某种方式来区分收到的各个数据。

②IP报头当中有32位源IP地址,源IP地址记录了发送端所对应的IP地址,因此通过IP报头当中的32位源IP地址就可以区分来自不同主机的数据。

③IP报头中有MF和片偏移字段, MF / 片偏移 只有有一个不为0,就表示这个报文是经过分片的报文; 只有MF和片偏移同时为0表示这个报文是一个完整的IP报文. 

④将经过分片的数据各自聚合在一起,聚合在一起后就可以开始进行组装了。

  • 第一个分片报文中的13位片偏移的值一定为0,且MF = 1 (头)。
  • 最后一个分片报文中的“更多分片” MF标志位一定为0, 片偏移不为0 (尾)。
  • 对于每一个分片报文来说,当前报文的13位片偏移加上当前报文的数据字节数÷ 8所得到的值,就是下一个分片报文的所对应的13位片偏移 (中间)。
  • 根据分片报文的这三个特点就能够将分片报文合理的组装起来。

                                 

(6)分片报文丢包的问题

①分片后的报文在网络传输过程中也可能会出现丢包问题,但接收端有能力判断是否收到了全部分片报文

  • 如果分片报文中的第一个分片报文丢包了,那么接收端收到的分片报文中就找不到13位片偏移为0的分片报文。
  • 如果分片报文中的最后一个分片报文丢包了,那么接收端收到的分片报文中就找不到,“更多分片” MF标志位为0的分片报文。
  • 如果分片报文中的其它分片报文丢包了,那么接收端在进行分片报文的组装时就会找不到对应13位片偏移为特定值的分片报文。

②只有当一个报文的13位片偏移为0,并且该报文的“更多分片”标志位也为0时,该报文才会被识别成一个没有被分片的独立报文,否则该报文就会被识别成一个分片报文。

③IP对分片进行组装怎么知道中间有分片丢了,如何解决

  • 组装的时候组不到一起(99.9999%都是这种情况)
  • 即便组装在—起,TCP进行校验和的时候校验出错。

即使中间只丢了一个IP分片报文,TCP是不关心分片的,是不会把这个分片再发一份,发送方立即把整个报文重传。
                        

(7)不建议分片

①虽然传输层并不关心IP层的分片问题,但分片对传输层也是有影响的。

  • 如果一个数据在网络传输过程中没有经过分片,那么只要接收端收到了这一个报文,我们就可以认为该数据被对方可靠的收到了。
  • 而如果一个数据在网络传输过程中进行了分片,那么只有当接收端收到了全部的分片报文并将其成功组装起来,这时我们才认为该数据被对方可靠的收到了。但如果众多的分片报文当中有一个报文出现了丢包,就会导致接收端就无法将报文成功组装起来,这时接收端会将收到的分片报文全部丢弃,此时传输层TCP会因为收不到对方应答而进行超时重传。
  • 假设在网络传输时丢包的概率是万分之一,如果将数据拆分为一百份进行发送,那么此时丢包的概率就上升到了百分之一。因为只要有一个分片报文丢包了也就等同于这个报文整体丢失了,因此分片会增加传输层重传数据的概率。

②只要分片报文当中的某一个出现了丢包,此时传输层都需要将数据整体进行重传,因为传输层并不知道底层IP对数据进行了分片,当传输层发送出去的数据得不到应答时传输层就只能将数据整体进行重传,因此数据在发送时不建议进行分片。

③分片对UDP的影响是最大的,因为IP分片增加了丢包的概率,UDP报文在IP层分片中间传输丢了就是丢了,无法重传。但是TCP报文即使在传输过程中丢了,还是重传机制保证。
                        

(8)如何尽可能避免分片

  • 实际数据分片的根本原因在于传输层一次向下交付的数据太多了,导致IP无法直接将数据向下交给MAC帧,如果传输层控制好一次交给IP的数据量不要太大,那么数据在IP层自然也就不需要进行分片。
  • 因此TCP作为传输控制协议,它需要控制一次向下交付数据不能超过某一阈值,这个阈值就叫做MSS(Maximum Segment Size,最大报文段长度)。
  • 通信双方在建立TCP连接时,除了需要协商自身窗口大小等概念之外,还会协商后续通信时每一个报文段所能承载的最大报文段长度MSS。
  • MAC帧的有效载荷最大为MTU,TCP的有效载荷最大为MSS,由于TCP和IP常规情况下报头的长度都是20字节,因此一般情况下 MSS = MTU - 20 - 20,而MTU的值一般是1500字节,因此MSS的值一般就是1460字节。
  • 所以一般建议TCP将发送的数据控制在1460字节以内,此时就能够降低数据分片的可能性。之所以说是降低数据分片的可能性,是因为每个网络的链路层对应的MTU可能是不同的,如果数据在传输过程中进入到了一个MTU较小的网络,那么该数据仍然可能需要在路由器中进行分片。
     

              

                          

4.网段划分

(1)IP的构成

IP地址由网络号和主机号两部分构成:

  • 网络号:保证相互连接的两个网段具有不同的标识。
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
  • 不同的子网其实就是把网络号相同的主机放到一起。
  • 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。


                   

(2)DHCP协议

  • 实际手动管理IP地址是一个非常麻烦的事情,当子网中新增主机时需要给其分配一个IP地址,当子网当中有主机断开网络时又需要将其IP地址进行回收,便于分配给后续新增的主机使用。
  • 因此对于IP地址的分配和回收一般不会手动进行,而是采用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)技术。
  • DHCP通常被应用在大型的局域网环境中,其主要作用就是集中地址管理、分配IP地址,使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
  • DHCP是一个基于UDP的应用层协议,一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器。
  • 当我们连接WiFi时需要输入密码,本质就是因为路由器需要验证你的账号和密码,如果验证通过,那么路由器就会给你动态分配了一个IP地址,然后你就可以基于这个IP地址进行各种上网动作了。
     

(3)先找目标网络,再找目标主机

  • 当IP要将数据跨网络从一台主机发送到另一台主机时,其实不是直接将数据发送到了目标主机,而是先将数据发送到目标主机所在的网络,然后再将数据发送到目标主机。
  • 因此数据在路由时的第一目的并不是找到目标主机,而是找到目标网络所在的网络,然后再在目标网络当中找到目标主机。
  • 找主机的过程本质是排除的过程,如果一开始就以找目标主机为目的,那么在查找的过程中一次只能排除一个主机。
  • 而如果一开始先以找目标网络为目的,那么在查找过程中就能一次排除大量和目标主机不在同一网段(局域网)的主机,这样就可以大大提高检索的效率。
  • 为了提高数据路由的效率,我们对网络进行了网段划分。
     

(4)分类的IP地址

            


IP地址的指派范围: 

                                 

(5)划分子网的基本思路 

①IP地址由二级变三级

                         

② 子网举例

                                         

 ③子网掩码找出IP地址的子网部分

  • 子网掩码是一个网络或一个子网的重要属性。
  •  路由器在和相邻路由器交换路由信息时,必须把自己所在网络 或子网)的子网掩码告诉相邻路由器。
  • 路由器的路由表中的每一个项目,除了要给出目的网络地址外, 还必须同时给出该网络的子网掩码。
  • 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码

                                                

(6)无分类编址CIDR 

 ①网络前缀

                         

②地址块 

                         

③子网掩码

  • 每一个子网都有自己的子网掩码,子网掩码实际就是一个32位的正整数,通常用一串“0”来结尾。
  • 将IP地址与当前网络的子网掩码进行“按位与”操作,就能够得到当前所在网络的网络号。

        

④网络地址

                 

⑤路由聚合

                        

⑥CIDR地址划分举例

网络前缀越短,地址块所包含的地址越多

 

⑦一个数据在路由的时候,随着数据不断路由进入更小的子网,其网络号的位数是在不断变化的,准确来说其网络号的位数是在不断增加的,这也就意味着IP地址当中的主机号的位数在不断减少。最终当数据路由到达目标主机所在的网络时,就可以在该网络当中找到对应的目标主机并将数据交给该主机,此时该数据的路由也就结束了。
                

(7) 特殊的IP地址

①并不是所有的IP地址都能够作为主机的IP地址,有些IP地址本身就是具有特殊用途的。

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。

②IP地址中主机号为全0的代表的是当前局域网的网络号,IP地址中主机号为全1的代表的是广播地址,这两个IP地址都是不能作为主机的IP地址的。因此在某个局域网中最多能存在的主机个数是2^(主机号个数) - 2 

                

                        

                

 5.IP地址数量限制

(1)IP地址数量不足

①IP地址(IPv4)是一个4字节32位的正整数,因此一共有2^32个IP地址,也就是将近43亿个IP地址。但TCP/IP协议规定,每个主机都需要有一个IP地址。

  • 现在全世界人口已经有70多亿了,就算有一半的人没有智能手机,算下来也有30多亿台智能手机需要IP地址。
  • 随着科技的发展,我们使用的电脑、智能手表、智能冰箱、智能洗衣机等设备如果要入网也是需要IP地址的。
  • 另外,IP地址并不是按照主机台数来配置的,因此一个主机可能需要多个IP地址,更别谈还有很多组网的路由设备也需要IP地址,以及一些特殊的IP地址不能使用的问题。

②所以43亿个IP地址其实早就不够用了,因此才提出了CIDR的方案对已经划分好的五类网络继续进行子网划分,其目的就是为了减少IP地址的浪费,根本原因就是IP地址本来就不够了,所以不能够再浪费了。

③CIDR虽然在一定程度上缓解了IP地址不够用的问题,因为CIDR提高了IP地址的利用率,减少了浪费,但IP地址的绝对上限并没有增加。
                

(2)如何解决IP地址不足问题

  • 动态分配IP地址:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的,避免了IP地址强绑定于某一台设备。
  • NAT技术:能够让不同局域网当中同时存在两个相同的IP地址,NAT技术不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
  • IPv6:IPv6用16字节128位来表示一个IP地址,能够大大缓解IP地址不足的问题。但IPv6并不是IPv4的简单升级版,它们是互不相干的两个协议,彼此并不兼容,因此目前IPv6还没有普及。

                

                

                

6.私网IP和公网IP

(1)私网IP的种类

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的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)


①我们连接云服务器时,连接的这个IP地址就是云服务器的公网IP地址

                

②通过ifconfig命令来查看我们这台机器的私网IP,其中网络接口lo(loop)代表的是本地环回,而eth0代表的就是我这台机器的网络接口,可以看到我的私网IP地址是172.21.0.2。

                

(2)关于运营商收费

  • 我们免费使用着互联网公司提供的服务,但是实际网络通信的基础设施都是运营商搭建的,我们访问服务器的数据并不是直接发送到了对应的服务器,而是需要经过运营商建设的各种基站以及各种路由器,最终数据才能到达对应的服务器。
  • 因为运营商为我们提供了通信的基础设施,所以我们交网费实际就相当于购买入网许可一样。
  • 没有运营商提供的这些基础设施,就不会诞生所谓的互联网公司,因为互联网公司是诞生在网络通信基础之上的。
  • 即用户上网的数据首先必须经过运营商的相关网络设备,然后才能发送到互联网公司对应的服务器。因此所谓的网段划分、子网划分等工作实际都是运营商做的。

                                 

(3)数据是如何发送到服务器的

①路由器是连接两个或多个网络的硬件设备,在路由器上有两种网络接口,分别是LAN口和WAN口:

  • LAN口(Local Area Network):表示连接本地网络的端口,主要与家庭网络中的交换机、集线器或PC相连。
  • WAN口(Wide Area Network):表示连接广域网的端口,一般指互联网。
  • 将LAN口的IP地址叫做LAN口IP,也叫做子网IP; 将WAN口的IP地址也叫做外网IP。

                

②网络的整体关系

  • 世界上的公网只有一个,私网可以有很多个
  • 公网IP只会在公网上面出现,IP地址在私网(局域网)当中可能重复
  • 一般而言,一个局域网中的1号主机就是路由器

  • 不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1),子网内的主机IP地址不能重复,但是子网之间的IP地址就可以重复了。
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能会有很多级,最外层的运营商路由器的WAN口IP就是一个公网IP了。
  • 两个运营商服务器的WAN口IP不一样,在这两个局域网内即使有路由器的WAN口IP一样也不影响.
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上,这样的服务器可以在阿里云/腾讯云上进行购买。
  • 由于私网IP不能出现在公网当中,因此子网内的主机在和外网进行通信时,路由器会不断将数据包IP首部中的源IP地址替换成路由器的WAN口IP,这样逐级替换,最终数据包中的源IP地址成为一个公网IP,这种技术成为NAT(Network Address Translation,网络地址转换)。
     

(3)为什么私网IP不能出现在公网当中?

  • 不同的局域网中主机的IP地址可能是相同的,所以私网IP无法唯一标识一台主机,因此不能让私网IP出现在公网上,因为IP地址要能唯一标识公网上的一台主机。
  • 但由于IP地址不足的原因,我们不能让主机直接使用公网IP而让主机使用私网IP,因为私网IP可以重复也就意味着我们可以在不同的局域网使用相同的IP地址,缓解了IP的不足。
  • 此外,我们不能直接使用公网IP还有一个原因就是,因为我们的数据包必须要经过运营商的路由器,如果我们发送的数据直接到了公网,那也就意味着我们再也不用交网费了,这是不现实的。


(4)两个局域网当中的主机不能不跨公网进行通信

  • 两个局域网当中的主机理论上是不能不跨公网进行通信的,因为一个主机要将数据发送给另一台主机的前提是得先知道另一台主机的IP地址。
  • 即便现在这个主机知道了另一台主机的IP地址,但有可能这两台主机的IP地址是一样的,因为它们的IP地址都是私网IP地址。
  • 当这一台主机发送数据时将目的IP地址填成和自己相同的IP地址,操作系统就会认为这个数据就是要发给自己的,而不会向外进行发送了。
  • 所以数据要从一个局域网发送到另一个局域网,如果不经过公网是基本上不可能的。我们在和别人聊天的时候,也不是直接将数据从一个局域网直接发送到了另一个局域网,而是先将数据经过公网发送到了服务器,然后再由服务器将数据经过公网转发到了另一个局域网。
  • 但实际确实存在一些技术能够使数据包在发送过程中不进行公网IP的替换,而将数据正确送到目标主机,这种技术叫做内网穿透,也叫做NAT穿透。

                                 

(5)IP替换过程

手机向服务器发起请求:

  • 源IP:  192.168.1.200  目的IP:  122.77.241.3     手机->服务器
  • 源IP:   10.1.1.3           目的IP:  122.77.241.3      家用路由器->服务器
  • 源IP:   122.77.241.4   目的IP:  122.77.241.3       运营商路由器->服务器

私有IP没有出现在公网中

                                 

(6)为什么要使用NAT技术,不断地进行源lP地址替换?

  • ①保证私有IP不会出现在公网当中
  • ②不同的局域网中的IP地址可能重复,看起来的三个局域网的6台设备其实只使用了2个IP,如果接入更多的局域网那么仍然可以使用这两个IP
  • ③公网只有一个,局域网可以有多个,但是不同局域网内的IP地址可以重复,重复之后我们不怕,用NAT技术可以公网访问,这样可以使可接入网络的设备变得越来越多,解决IP地址不足的问题。

NAT技术还要进行IP转化,治标不治本,最根本还是要使用IPV6

                

                        

                

7.路由

(1)数据“问路”过程

①数据在路由的过程中,实际就是一跳一跳(Hop by Hop)“问路”的过程。所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。 

        

②IP数据包的传输过程中会遇到很多路由器,这些路由器会帮助数据包进行路由转发,每当数据包遇到一个路由器后,对应路由器都会查看该数据的目的IP地址,并告知该数据下一跳应该往哪跳。

路由器的查找结果可能有以下三种:

  • 得知该数据下一跳应该跳到哪一个子网。
  • 没有发现匹配的子网,此时路由器会将该数据转发给默认路由。
  • 得知该数据的目标网络就是当前所在的网络,此时路由器就会将该数据转给当前网络中对应的主机。

                         

(2)路由表查询的具体过程

①每个路由器内部会维护一个路由表,可以通过  route  命令查看云服务器上对应的路由表。

  • Destination代表的是目的网络地址。
  • Gateway代表的是下一跳地址。
  • Genmask代表的是子网掩码。
  • Flags中,U标志表示此条目有效(可以禁用某些条目)G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
  • Iface代表的是发送接口。 

②当IP数据包到达路由器时,路由器就会用该数据的目的IP地址,依次与路由表中的子网掩码 Genmask进行“按位与”操作,然后将结果与子网掩码对应的目的网络地址Destination进行比对,如果匹配则说明该数据包下一跳就应该跳去这个子网,此时就会将该数据包通过对应的发送接口Iface发出。

③如果将该数据包的目的IP地址与子网掩码进行“按位与”后,没有找到匹配的目的网络地址,此时路由器就会将这个数据包发送到默认路由,也就是路由表中目标网络地址中的default。可以看到默认路由对应的Flags是UG,实际就是将该数据转给了另一台路由器,让该数据在另一台路由器继续进行路由。

④数据包不断经过路由器路由后,最终就能到达目标主机所在的目标网络,此时就不再根据该数据包目的IP地址当中的网络号进行路由了,而是根据目的IP地址当中的主机号进行路由,最终根据该数据包对应的主机号就能将数据发送给目标主机了。
 

(3)路由示例

①假设某主机上的网络接口配置和路由表如下:

                

②如果要发送的数据包的目的地址是192.168.56.3
  • 跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符
  • 再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出 去;
  • 由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转 发;
③如果要发送的数据包的目的地址是202.10.1.2
  • 依次和路由表前几项进行对比, 发现都不匹配;
  • 按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器;
  • 由192.168.10.1路由器根据它的路由表决定下一跳地址

                        

                

                        

8.路由器的构成 

(1)路由器是一种具有多个输入输出端口的专用计算器,任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止.路由器的转发分组正是网络层的主要任务.

  • 路由器的构成分为两大部分:  路由选择 和  分组转发
  • 路由选择部分也叫控制部分/控制层面,核心结构是路由选择处理机。路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
  • 交换结构(switching fabric)又称为交换组织,它的作用就是根据转发表(forwarding table)对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一种网络,但这种网络完全包含在路由器乏中,因此交换结构可看成是“在路由器中的网络”。
  • 请注意“转发”和“路由选择”是有区别的在互联网中,“转发”就是路由器根据转发表把收到的 IP 数据报从路由器合适的端口转发出去。“转发”仅仅涉及一个路由器,但“路由选择”则涉及很多路由器,路由表则是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,得出整个网络的拓扑变化情况,因而能够动态地改变所选择的路由,并由此构造出整个的路由表。路由表一般仅包含从目的网络到下一跳(用 IP 地址表示)的映射,而转发表是从路由表得出的。转发表必须包含完成转发功能所必需的信息。这就是说,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些 MAC 地址信息(如下一跳的以太网地址)的映射。将转发表和路由表用不同的数据结构实现会带来一些好处,这是因为在转发分组时一转发表的结构应当使查找过程最优化,但路由表则需要对网络拓扑变化的计算最优化。路由表,总是用软件实现的,但转发表则可用特殊的硬件来实现请读者注意,在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,而可以笼统地都使用路由表
  • 路由器的输入和输出端口里面都各有三个方框,用方框中的 1, 2 和 3分别代表物理层、数据链路层和网络层的处理模块。物理层进行比特的接收。数据链路层则接照链路层协议接收传送分组的帧。在把帧的首部和尾部剥去后,分组就被送入网络层的处理模块。若接收到的分组是路由器之间交换路由信息的分组(如 RIP 或 OSPF 分组等),则把这种分组送交路由器的路由选择部分中的路由选择处理机。若接收到的是数据分组,则按照分组首部中的目的地址查找转发表,根据得出的结果,分组就经过交换结构到达合适的输出端口。一个路由器的输入端口和输出端口就做在路由器的线路接口卡上。
     

 (2)输入输出端口的处理

  •  排队产生时延
  • 网络层的处理模块中设有一个缓冲区,实际上它就是一个队列

                

(3)交换方法

  • (b)是通过总线进行交换的示意图。采用这种方式时,数据报从输入端口通过共享总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。但是,由于总线是共享的,因此在同一时间只能有一个分组在总线上传送。当分组到达输入端口时若发现总线忙(因为总线正在传送另一个分组),则被阻塞而不能通过交换结构,并在输入端口排队等待。因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制。
  • (c)画的是通过纵横交换结构进行交换。这种交换机构常称为互连网络,它有 2N 条总线,可以使 N 个输入端口和N个输出端口相连接,这取决于相应的交叉节点是使水平总线和垂直总线接通还是断开。当输入端口收到一个分组时,就将它发送到与该输入端口相连的水平总线上。若通向所要转发的输出端口的垂直总线是空闲的,则在这个节点将垂直总线与水平总线接通,然后把该分组转发到这个输出端口。例如,一个分组到达输入端口 A,应转发到输出端口 Y。这时交换结构的控制器就把总线 A 和Y的交叉节点闭合,因此分组就从输入端口 A 传送到了输出端口丫。请注意,如果与此同时还有一个分组要从输入端口 B 转发到输出端口 Z,那么也可同时进行,因为A一>Y和 B->Z 的转发是使用不同的总线的转发。
  • 这种纵横交换结构是一种无阻塞的交换结构,其特点是分组可以转发到任何一个输出端口,只要这个输出端口没有被别的分组占用。如果这个输出端口(即对应的垂直总线)已被占用(有另一个分组正在转发到同一个输出端口),那么后到达的分组就必须在输入端口排队等待。

                                                

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值