第四章 网络层

一、网络层功能

为传输层服务,将传输层数据报封装为IP数据报,由路由器根据IP数据报的源IP和目的IP进行分组转发,实现主机到主机的传输

【数据链路层是将IP数据报分组,封装成帧,实现相邻结点间的传输,即公用一段传输介质的节点】

1、异构网络互联

异构:每个网络拓扑结构不同,物理层、数据链路层的协议不同,主机类型不同

互联设备:路由器=网关

2、路由与转发

路由:各个路由器配合,为IP数据报选择最佳的转发路径,各路由器进行路由协议,生产各自的路由表

转发:路由器根据自己的转发表,将收到的IP数据报从合适的接口转发出去(转发表是精简的路由表)

3、拥塞控制

拥塞:网络上出现过量分组,超负荷引起网络性能下降(高速路上车特别多时堵车)

拥塞控制方法:

开环控制(静态):在部署网络时就设计好预防拥塞的方法,网络开始运行就不再修改

闭环控制(动态):动态监视网络,及时发现哪里出现拥塞,将拥塞信息传给相关路由器,路由器及时调整路由表

二、IPV4

IP协议定义了IP分组,传输层的TCP和UDP报文段及网络层的ICMP、IGMP都要封装在IP分组内传输

1、IP数据报(IP分组)

a、版本

二进制的4/6,指明IPV4或IPV6

b、首部长度

以4B为单位,即如果长度为0100(4),则首部总长度为4*4B=16B

首部固定部分20B,可变部分最多40B,如果可变部分不够4B整数倍,则需要填充到4B整数倍

c、总长度

以1B为单位,整个IP数据报长度(理论上最短0B,最长65535B,但由于数据链路层对帧的数据部分有限制(如以太网帧46B~1500B),所以,如果IP数据报太长,超出了下一段链路的MTU,就需要分片)

  • 一个数据链路的帧能够承载的最大数据量称为最大传送单元 MTU(以太网是1500B)
  • 分片时,分的每一个IP数据报都需要继承原IP数据报的首部,只有数据部分会进行拆分
  • 所以每个分IP数据报都是一个独立的分组,会各自在网络中存储转发,可能会乱序到达目的主机,直到到达目的主机才会重组
  • 为了实现分片组装,就需要首部的标识、标志、片偏移字段
    • d、标识

      • 由源主机生成,各分片的标识一样,所以当接收方检查到首部的源地址和标识相同,就知道是同一个IP分组的
    • e、标志

    • 有3bit,只关心最低位(MF)和次低位(DF)
      • 最低位(more)指明后面是否还有分片,根据分片情况添加,为1是还有;次低位(don't)指明该片是否允许被分片,继承原IP数据报,为1是不能再分
      • 如果该分片不允许被分片,且超出了下一段链路数据链路层的MTU,则路由器直接丢弃,并向发送方返回ICMP报文
    • f、片偏移

      • 13bit,表示数据部分在被分片前的位置(仅看数据部分,不含首部长度),以8B为单位

g、生存时间(TTL)

IP数据报最大可通过路由数量,TTL由源主机设置,,每经过一个路由器,TTL减一,如果TTL减到0,就直接丢弃分组,向源主机发送ICMP报文

h、协议

当前IP数据报在为什么协议服务,便于接收方知道该数据报该交给上层的哪个协议处理

i、首部检验和

路由器仅检验首部,检验方法与UDP相同

若该字段全0,表示不检验首部

PS.三个长度字段,单位不同

        418,首总偏(分别以4B、1B、8B为单位)

2、IP地址

a、IP分组转发

路由器里面存储的是目的网络网络号和转发接口的映射

路由器接收到一个IP分组,解析得到其目的IP,对比目的IP的网络号,判断应该发到哪个接口

IP分组的源IP的目的IP始终不变,但是IP数据报分装成帧后,其帧的源MAC地址和目的MAC地址需要根据源IP和目的IP通过ARP协议不断变化

  • ARP协议:对同一个网络内的主机在数据链路层上进行IP地址和MAC地址转换的协议
  • 如果目的主机和IP和源主机IP网络号相同,说明在同一个网络,可以直接由ARP协议得到目的主机的MAC地址进行转发
  • 如果目的主机和IP和源主机IP网络号不相同,说明不在同一个网络,则要通过路由器转发,封装成帧的目的MAC为默认网关的IP地址对应的MAC地址

b、特殊的IP地址:均不能指派给任何一个主机使用

  • 主机号全0→网络本身,只能用于路由表,转发表
  • 主机号全1→广播地址,向目的网络整个网络(网络号相同的)广播
    • 主机号为nbit的网络,最多可支持台主机+路由器
  • 网路号全0,主机号非0→表示本网络中主机号对应的主机(不能做目的地址)
  • 网络号、主机号全0→本网络上的本主机(不能做目的地址,用于DHCP协议)
  • 网络号、主机号全1→向本网络上的主机广播(不能做源地址)
  • 网络号为127,主机号非全0或非全1→环回自检地址(不会被发上网络,会从网络层发回自己)
  • ps:网络号全0和网络号全1都表示本网络,主机号全1是广播

c、IP地址的分配

  • 网络号用户(公司或学校等)申请时统一分配的,主机号是用户自己给每台主机设定的
  • 每台主机,每个路由器接口分配的IP地址全球唯一
  • 路由器与路由器相连的接口可以不分配IP,但与其他结点相连的一定要分配
  • 同一个网络下的主机、路由器接口网络号相同
  • 每台主机接入网络时都要分配IP地址,配置默认网关
    • 默认网关指主机接入互联网要经过的路由器接口的IP地址
    • 主机接入互联网有多个路由可选时,选择其中一个

d、最初的IP地址分类:网络号+主机号=32bit

A类:8bit网络号(0开头)

B类:16bit网络号(10开头)

C类:24bit网络号(110开头)

D类:多播地址→每个主机的IP地址类似于QQ号,多播地址就类似于QQ群,多播地址符合的都能接收到信息

E类:保留

d、子网划分和子网掩码

子网划分:将分配到的IP地址段,从主机号中再取出k位作为子网号,可以分出个子网,各子网包含的IP地址块大小相等(即主机号长度相同,各子网可分配的IP地址个数相同)

  • 每个子网都是一个独立的网络,通过一个路由器接口与其他网络相接

子网掩码(提前配置好的):给网络内的各主机、路由器接口配置网络号全1,主机号全0的子网掩码,这样就能知道整个网络前缀(网络号+子网号)

  • 在进行IP分组转发时,会先判断目的IP和自己是否在一个网络,如果在同一个网络无需通过路由器转发,不在同一个网络则通过路由器转发
  • 为了得到IP的网络前缀,就需要子网掩码,将子网掩码与IP地址按位相与,则IP地址网络前缀不变,主机位全0,得到IP的网络前缀
    • 判断目的IP是否和自己在一个网络内:用自己的子网掩码和目的IP、自己的IP分别相与,得到网络前缀相同,则处于同一个网络,转发时不用经过路由器
    • 得到的网络前缀不同,则不在同一个网络,将帧转发至默认网关(路由器接口)
    • 将目的IP逐行与路由器转发表的子网掩码相与,得到的结果与目的网络号一致则从对应接口转发
    • 特殊情况:如果转发的接口与传入的接口相同,则无需再转发,说明出现了一些意外(如路由聚合后引入无效地址)

路由器配置:

配置子网掩码:支持划分子网的路由器,转发表要添加一列子网掩码,指明每个端口的子网掩码,这样接收到IP数据报时,就可以相与得到网络前缀,然后在与目的网络号相比,相同则属于同一个网络

默认子网掩码:如果目的网网络不是一个子网划分的网络,就是普通的ABC类网络,在进行了子网划分网络的路由器转发表中,仍然要对目的网络进行子网掩码的配置,配置默认子网掩码(网络位全1,主机位全0,即A类就是255.0.0.0)

默认路由(目的网络0.0.0.0 子网掩码0.0.0.0):每个子网划分的路由器中都有默认路由,当与其他项都匹配不上的时候,与默认路由一定能匹配上,然后从对应端口转发出去

补充:对于没有进行子网划分的网络,在IP分组转发时本质其实和划分了子网的一致

  • 在路由器转发IP分组时,先根据高几位去判断这是ABC哪一类网络,然后将其和路由表目的网络高8/16/24位对比是否一致,判断该从哪个接口转发(主机接收同理)
  • 在主机发送时,也是先检查目的IP与自己是否在一个网络:判断自己是哪类网络,再用网络号与目的IP的对应位数相比,一致则不经过路由器转发
  • 不一致说明不是同一个网络,将IP数据报送至默认网关,将目的地址的主机号置0后与转发表的目的网络号逐行对比,看从哪个端口转发出去

其实本质还是子网掩码,只不过子网掩码能由网络类型直接得出,所以不需要单独配置,直接对比IP地址相应高8/16/24位即可

A类:255.0.0.0

B类:255.255.0.0

B类:255.255.255.0

 

e、无分类编址CIDR(网络前缀+主机号)

原始分类方法太浪费,假设一个公司申请2000台主机的IP,用C类只有个,不够,用B类有个,远远大于实际需要的

用CIDR,可以分配网络前缀11位的CIDR地址块,减少浪费

对一个CIDR地址块可以划分为多个子网

定长子网划分:与传统分类方式划分子网方式相同,取kbit做子网号

每个子网内的IP地址个数相同,不够灵活,也会造成IP浪费

变长子网划分:划分子网时,子网号长度不一定,每个子网内包含IP地址块大小不同

在算各子网所需IP地址个数时,注意除了主机外,还有一个路由器接口要IP    

每个子网内最少也要有2bit做主机号    

路由聚合=构成超网(配合CIDR)

聚合方法:

网络前缀不同的子网,可能在同一台路由器要通过同接口一个转发,可以找到他们的共同前缀聚合成一个路由记录

路由聚合后减少了路由条目的匹配次数,但是也引入了无效的IP地址,导致原本无法匹配到的目的IP地址可以从此路由进行转发,(但是从其他路由转发不了,会匹配到默认路由再转发回来,所以如果转发的接口与传入的接口相同,则无需再转发)

最长前缀匹配原则:

当进行路由记录匹配时,可能与多个网络前缀都能匹配,此时匹配网络前缀最长的那条转发

  • 一个网络前缀有28bit,一个是27bit,IP数据报的目的IP网络前缀与两个都能匹配,则匹配28bit的
  • 默认路由的目的网络为0.0.0.0,匹配时一定能和默认路由匹配(0bit相同),如果和其他路由都不匹配就从默认路由转发

f、NAT网络地址转换(IP地址+端口号)

端口号(传输层指明):进程间通信需要用到端口号,是主机分配给进程的,用IP地址实现主机到主机的传输,用端口号实现到主机上某一进程的传输(IP地址+端口号可以确定到一台主机上的一个进程)

即使用了上述方式,IP资源也面临告急,所以NAT技术让一个局域网共享一个全球唯一的IP地址

外网IP:一个局域网与外界通信时使用的IP,全球唯一

内网IP:局域网内部的IP,只要求在本局域网内部唯一,但可能和其他局域网中的主机的IP相同

内网IP只能分配给局域网内部节点,不能分配给互联网上的结点

NAT路由器内有NAT表,指明外网和内网IP地址+端口号的映射关系

报文转发流程

  • 在传输层的TCP/UDP报文首部要写入端口号
    • 源端口号是自己在内网的端口号,目的端口号是目的进程对应的外网端口号(一个局域网的进程是看不到另外一个局域网的端口号的,只能查到公网的)
  • 在网络层IP分组的首部写入IP地址
    • 源IP地址是自己在内网的IP,目的IP是目的主机外网的IP
  • 封装成帧后传递给NAT路由表,解封查自己内网端口号和内网IP对应的外网端口号和外网IP进行转换,再层层封装
    • NAT路由表拥有封装端口号的能力,所以NAT路由器含传输层功能
  • 通过目的主机的公网IP到达接收方的NAT路由器,层层解封,得到公网目的IP和目的端口的内网目的IP和目的端口再层层封装
  • 通过内网IP和内网端口号到达内网主机的进程

ps.在NAT地址转换下,同样还是先对比目的IP和源IP网络前缀是否一致判断是否在一个网络里,如果在一个网络就不用NAT路由器进行转发(虽然在别的内网里面也可能有和源主机IP相同的IP地址,但是对于源主机来讲是看不到的,所以目的IP不可能封装别的内网的IP,因此网络前缀相同的就是同一个内网的)

g、ARP地址解析协议:在一个局域网内部查询到一个IP地址对应的MAC地址

以太网MAC帧的类型指明网络层的协议,即后面的数据部分是什么协议下的网络层数据

通常说的IP数据报是网络层协议为IPV4时的数据

当网络层协议为ARP协议,MAC帧数据部分是ARP分组

ARP表

记录IP地址和MAC地址的映射关系

每台主机、路由器都有自己的ARP表

ARP表要定期更新

ARP 过程

请求方发送ARP请求分组:我是谁,要找谁

内容:自己的IP,自己的MAC,想找的主机的IP地址

请求分组封装进MAC帧,目的地址全1(广播)(请求时不知道对方MAC地址,帧不能准确发给对方,只能用广播帧)

响应方发送ARP响应分组:我是对方要找的主机

内容:自己的IP,自己的MAC 

响应分组封装进MAC帧,目的地址为对方MAC地址

ps.响应方收到请求方的帧时解析出对方的MAC地址和IP地址的对应关系,正好就更新在了自己的ARP表中,请求方收到ARP响应分组,更新到ARP表中

h、动态主机配置协议DHCP:给刚接入网络中的主机动态分配IP地址,配置默认网关,子网掩码

DHCP是应用层的协议,使用UDP提供的服务(由于配置的是网络层的内容,所以放在了这一章)

每个子网有一个或多个DHCP服务器,负责管理分配本子网中的IP地址

DHCP工作流程:

直到第四步确认报文被成功接收前,IP都不属于新主机,它发出的源IP都要用0.0.0.0

端口号:客户端68,服务器67

发现报文

主机向服务器发送DHCP发现报文

应用层:DHCP发现报文表明自己的MAC地址

传输层:UDP封装指明端口号(规定客户端68,服务器67)

网络层:自己没有IP,所以源IP写为0.0.0.0(特殊IP地址,表示本网络的本主机);不知道DHCP服务器的IP地址,所以目的IP写为255.255.255.255

数据链路层:源MAC地址写自己,目的MAC全1 ,(不知道服务器的MAC地址,所以广播出去)

提供报文:分配IP

服务器从空闲的IP地址中选一个分配

应用层:DHCP提供报文提供一个IP地址及可以使用的时间,并告知新主机所处网络的子网掩码和默认网关IP

传输层:UDP封装指明端口号(规定客户端68,服务器67)

网络层:源IP写自己的IP,目的IP255.255.255.255,因为此时新主机还是没有IP

数据链路层:源MAC地址写自己,目的MAC写对方,在数据链路层是一个单播帧,所以只有新主机会收到分配的IP

请求报文

应用层:DHCP请求报文表明自己的MAC及要接受的IP地址(类似于确认一下自己是要分配这个IP吗)

传输层:UDP封装指明端口号(规定客户端68,服务器67)

网络层:源IP写0.0.0.0,目的IP255.255.255.255(在整个流程完成之前,这个IP都不属于新主机,所以只能写0.0.0.0)

数据链路层:源MAC地址写自己,目的MAC为广播

ps.数据报和MAC还得广播的原因:一个网络内可能不止一台DHCP服务器,每台服务器管理的IP资源不同,发出发现报文时广播给了所有服务器,每个服务器都发回了一个提供报文分配了一个IP,认为自己消耗了一个IP,但最后主机只会使用一个,所以要广播告诉所有服务器,自己用了哪个

确认报文

把提供报文再发一遍,表明自己确认就是要这样分配给主机

j、ICMP:网际控制报文协议,让主机或路由器报告差错或异常,提高IP数据报交付成功的机会

ICMP是网络层协议,但他也是使用的网络层的IP协议提供的服务

ICMP差错报告报文:目的主机或路由器向源主机报告差错

终点不可达:当前IP数据报在路由器转发中找不到目的地址,交付不过去

源点抑制:网络太忙了,处理不了此IP数据报

超时:TTL,最多只能经过16个路由器

参数问题:校验首部时发现差错

改变路由:路由重定向

ps.如果目的主机收到的就是一条ICMP报文,其中出现差错,就不用再报告回去了

ICMP询问报文:发送特定报文用以网络探索

回送请求和回答:主机向特定主机或路由器发送,以询问该主机是否还可达(因为网络中不断有主机加入和退出,所以要时不时的问一问主机是否还可达)

时间戳请求和回答:向服务器发送,询问当前时间,用以同步本主机的时间

ICMP报文格式

ICMP报文=ICMP首部 8B+IP数据报首部+IP数据报数据部分前8B(因为有网络层上层的关键内容,所以也需要记录)

将可能发生差错的IP数据报首部+IP数据报数据部分前8B封装在ICMP报文中

将ICMP报文再封装到IP数据报中,发送出去

ICMP应用:PING和traceroute

    三、IPV6

    根本解决IP地址不够的问题

    1、特点

    • 更大的地址空间:128bit
    • 扩展的地址层次结构
    • 灵活的首部格式:除了数据报的首部固定为40B外,在数据部分定义了很多的扩展首部,首部由IPV4的必须为4B的整数倍变为必须是8B的整数倍
    • 改进的选项
    • 即插即用:自动配置,不用DHCP
    • 允许协议继续扩充
    • 只允许在源主机分片,中间路由不可以,一般说IPV6不允许分片
    • 支持资源预分配

    2、IPv6优点

    与IPV4不兼容,但与其他因特网协议兼容:TCP、UDP、ICMP、DNS等

    IPV6有更大的地址空间

    简化了首部,支持选项(将IPV4首部的部分功能作为可选的部分提供),使得路由器能够更快的处理分组(路由器转发的时候就看首部)

    3、IPv6数据报格式

    IPv6在数据载荷部分有多个可选的扩展首部

    基本首部内容字段减少到8个,变化如下:

    • 目的地址和源地址长度都变为128bit
    • 取消首部长度字段
    • 取消服务类型字段
    • 将总长度字段改为有效载荷长度字段
    • TTL改为跳数限制字段
    • 协议字段改为下一个首部字段
    • 取消检验和字段
    • 取消选项字段,改为用扩展首部实现选项功能

    扩展首部:只有源站和目的站处理(因为是在有效载荷的部分,中间站只会处理基本首部)

    IPV6地址:单播、组播(交给一组计算机)、任播(在一组计算机内,任意交给一台计算机就可以)

    路由器和主机称为结点,一个结点可能有多个接口,每个接口可以分配多个IP地址

    IP地址为冒号十六进制,每十六位一组,组间用冒号分隔

    每组内前面的0可以省略,整体连续的0可以用::代替,每个IP地址只能用一次0压缩

    4、IPv6特殊地址

    全0:未指明地址

    ::1:环回地址

    FF::    :组播地址,8个

    FE80::本地链路单播地址

    5、IPV4到IPv6的过渡

    IPV4和IPV6的数据报不兼容,所以需要用双协议栈和隧道技术过渡

    双协议栈:主机有两种地址,与IPv6主机通信用IPv6地址,与IPv4主机通信用IPv4地址

    隧道技术:IPV6的数据报要进入IPV4的网络时,将IPV6数据报作为数据载荷封装成IPV4的数据报

    四、路由算法与路由协议

    五、IP多播

    如果给n台主机发送单播,则源主机需要发出n个IP数据报

    所以将n台主机作为一个多播组,则源主机只需要发出一个IP数据报到多播组就可以

    1、多播组的IP地址

    IP地址的D类地址就是用于多播组的,前四位1110(224.0.0.0~239.255.255.255)

    多播地址只能作为目的地址

    2、多播数据报

    首部协议字段为2,表明使用的是IGMP协议

    多播数据报也是尽最大努力交付,不保证一定能交付给所有成员

    组播不会有ICMP差错报文

    5、多播IP地址和MAC地址的映射

    多播分为在因特网的IP多播和局域网上MAC多播

    局域网上MAC多播是硬件实现的,所以需要进行映射

    映射不唯一是因为IP地址中有五位不会映射,这五位不同的多播地址可能会映射成同一个MAC地址,所以要在网际层进行过滤,把不是主机要接收的IP多播数据报丢弃

    6、在因特网上进行IP多播的协议

    IGMP:网际组管理协议,维护多播组的成员

    • IGMP是让连接在本地局域网的组播路由器知道是否有某个主机(实际上是进程)加入或推出了某个组播组(即只需要知道自己的局域网内是否有某多播组成员)
    • IGMP只在本网路内对组播成员进行管理,不知道组播组内有多少成员,在哪些网络上

    多播路由选择协议

    • 仅使用IGMP无法在因特网上进行多播,局域网上的多播路由器要和其他多播路由器协同工作
    • 多播路由选择协议是在多播路由器之间为每个多播组建立一个多播转发树,多播转发树连接多播源和所有拥有该多播组成员的路由器
    • IP多播数据报验多播转发树洪泛,就能被传送到所有拥有该多播组成员的路由器
    • 在多播路由器直连的局域网内,用硬件多播将IP数据报发送给多播组所有成员

    7、IGMP工作流程

    当主机加入多播组,主机向组播IP地址发送IGMP报文,声明自己要加入此组,组播路由器收到后将组成员关系转发给其他组播路由器

    本地组播路由器周期性询问本地局域网的主机,以便知道自己的网络中是否还有组成员,只要有就认为组活跃

    六、移动IP

    七、网络层设备

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值