网络层

书籍:计算机网络自顶向下. TCP/IP详解

一些基本知识

网络中继系统

网络互相连接起来 要使用一些中间设备。中间设备又称为中间系统或中继(relay)系统。

  • 物理层中继系统:转发器(repeater)
  • 数据链路层中继系统:网桥或桥接器(bridge)
  • 网络层中继系统:路由器(router)
  • 网桥和路由器的混合物:桥路器(brouter)
  • 网络层以上的中继系统:网关(gateway)

IP地址与硬件地址

image-20200923221045257

单播、广播、组播

单播

单播在发送者和每一接收者之间实现点对点网络连接。如果一台发送者同时给多个接收者传输相同的数据,也必须相应的复制多份的相同数据包。如果有大量主机希望获得数据包的同一份拷贝时,将导致发送者负担沉重、延迟长、网络拥塞,为保证一定的服务质量需增加硬件和带宽。

单播优点:

  • 服务器及时响应客户机的请求

  • 服务器针对每个客户不同的请求发送不同的数据,容易实现个性化服务。

单播缺点:

  • 服务器针对每个客户机发送数据流,服务器流量=客户机数量客户机流量,在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。

  • 现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的P2P应用就已经使主干经常阻塞。而将主干扩展20倍几乎是不可能。

广播

广播是指在IP子网内广播数据包,所有在子网内部的主机都将受到这些数据包。广播意味着网络向子网每一个主机都投递一份数据包,不论这些主机是否乐于接收该数据包。所以广播的使用范围非常小,只在本地子网内有效,通过路由器和交换机网络设备控制广播传输。

无论是何种广播,它第二层目的MAC地址都是FF-FF-FF-FF-FF-FF,这样交换机也就可以往外flood广播包.区别于多播的MAC帧头是01005A+subnetid

广播的优点:

  • 网络设备简单,维护简单,布网成本低廉
  • 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。

广播缺点:

  • 无法针对每个客户的要求和时间及时提供个性化服务
  • 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。
  • 广播禁止允许在Internet宽带网上传输。

组播/多播

组播在发送者和每一接收者之间实现点对点网络连接。如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它提高了数据传送效率,减少了骨干网络出现拥塞的可能性。

组播的优点:

  • 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。具备广播所具备的优点。
  • 由于组播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入带宽的限制。IP协议允许有亿6千多万个组播,所以其提供的服务可以非常丰富。
  • 此协议和单播协议一样允许在Internet宽带网上传输。

组播的缺点:

  • 与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和QOS加以弥补。
  • 现行网络虽然都支持组播的传输,但在客户认证、QOS等方面还需要完善,这些缺点在理论上都有成熟的解决方案,只是需要逐步推广应用到现存网络当中。

计算机A与计算机B的通信过程

  • 交换机基于数据帧的MAC地址转发数据帧,路由器基于数据包的IP地址转发数据包
  • 数据包在传输过程不变,过网络设备数据帧要用新的物理层地址重新封装
  • MAC地址决定了数据帧下一跳哪个设备接受,而IP地址决定了数据包的起点和终点

image-20200923221133143

网络层4个协议之间层次

image-20200923182714918

ARP/RARP协议 (地址解析和逆地址解析)

地址解析协议 ARP

  • 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。
  • 每一个主机都设有一个 ARP 高速缓存(ARP cache),里面有所在的局域网上的各主机和路由器 的 IP 地址到硬件地址的映射表。
  • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址, 再将此硬件地址写入 MAC 帧,然后通过局域网将 该 MAC 帧发往此硬件地址。

image-20200923224510579

image-20200923224728805

使用ARP的四种典型情况:

  • 发送方是主机,要把IP数据报发送到本网络的另一个主机,此时用ARP找到目标主机的MAC地址;
  • 发送方是主机,要把IP数据报发送到另一个网络的另一个主机,此时用ARP找到本网络上一个路由器的MAC地址,剩下的工作由路由器进行;
  • 发送方是路由器,要把IP数据报发送到本网络的另一个主机,此时用ARP找到目标主机的MAC地址;
  • 发送方是路由器,要把IP数据报发送到另一个网络的另一个主机,此时用ARP找到本网络上一个路由器的MAC地址,剩下的工作由路由器进行;

ARP协议的作用

  • 将IP地址通过广播(本网段,不通过路由器),目标MAC地址是FF-FF-FF-FF-FF-FF,解析目标IP地址的MAC地址。
  • ARP是解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射关系。如果所找的主机和原主机不在同一个局域网上,那么就要通过ARP找一个位于本局域网上的某个路由器的MAC地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。
  • 从IP地址到MAC地址的解析是自动进行的,主机的用户对这种地址解析过程是不知情的。
  • 只要主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动地将该IP地址解析为链路层所需要的MAC地址。

ARP的报文格式

image-20200923225702122

硬件类型:表示硬件地址的类型,值为1表示以太网地址

协议类型:表示要映射的协议地址类型。它的值为0x0800表示IP地址类型

硬件地址长度和协议地址长度以字节为单位,对于以太网上的IP地址的ARP请求或应答来说,他们的值分别为6和4;

操作类型(op):1表示ARP请求,2表示ARP应答

发送端MAC地址:发送方设备的硬件地址;

发送端IP地址:发送方设备的IP地址;

目标MAC地址:接收方设备的硬件地址。

目标IP地址:接收方设备的IP地址。

ARP地址解析过程

主机A和B在同一个网段,主机A要向主机B发送信息。如图1-2所示,具体的地址解析过程如下:

  1. 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
  2. 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,主机会在局域网内发MAC地址广播,MAC帧的源MAC为自己,目的MAC为ff-ff-ff-ff-ff-ff(在以太网首部中)ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和空(全为0)的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
  3. 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
  4. 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

image-20200923230203386

当主机A和主机B不在同一网段时:

主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

ARP缓存/ARP欺骗

  • 为了减少网络上的通信量,主机 A 在发送 其 ARP 请求分组时,就将自己的 IP 地址 到硬件地址的映射写入 ARP 请求分组。
  • 当主机 B 收到 A 的 ARP 请求分组时,就 将主机 A 的这一地址映射写入主机 B 自己 的 ARP 高速缓存中。这对主机 B 以后向 A 发送数据报时就更方便了。
  • ARP欺骗:https://blog.csdn.net/weibo1230123/article/details/82025746

应当注意的问题

  • ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。
  • 如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局 域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组 转发给下一个网络。剩下的工作就由下一个网络来做。
  • 从IP地址到硬件地址的解析是自动进行的, 主机的用户对这种地址解析过程是不知道的。
  • 只要主机或路由器要和本网络上的另一个已 知 IP 地址的主机或路由器进行通信,ARP 协议就会自动地将该 IP 地址解析为链路层所 需要的硬件地址。

逆地址解析协议 RARP

  • 逆地址解析协议 RARP 使只知道自己硬件地址的主机能够知道其 IP 地址。
  • 这种主机往往是无盘工作站。 因此 RARP 协议目前已很少使用。

IP协议

IP数据报

  • 一个 IP 数据报由首部和数据两部分组成。
  • 首部的前一部分是固定长度,共 20 字节, 是所有 IP 数据报必须具有的。
  • 在首部的固定部分的后面是一些可选字段,其长度是可变的。

image-20200924093239586

字段说明:

  • 版本:占 4 位,指 IP 协议的版本 目前的 IP 协议版本号为 4 (即 IPv4)
  • 首部长度:占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)。因此 IP 的首部长度的最大值是 60 字节。
  • 区分服务:区分数据包发送优先级。占 8 位,用来获得更好的服务在旧标准中叫做服务类型,但实际上一直未被使用过。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般的情况下都不使用这个字段。
  • 总长度:占 16 位,指首部和数据之和的长度, 单位为字节,因此数据报的最大长度为 65535 字节。总长度必须小于最大传送单元 MTU。
  • 标识:占16位,它是一个计数器,用来产生数据报的标识。
  • 标志:占3位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。 标志字段中间的一位是 DF (Don’t Fragment) 。 只有当 DF = 0 时才允许分片。
  • 片偏移:13 位,较长的分组在分片后。 某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。

image-20200924121843675

  • 生存时间:8 位,记为 TTL (Time To Live) 数据报在网络中可通过的路由器数的最大值。
  • 协议:8 位,字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程

image-20200924123656761

  • 首部检验和:16 位,字段只检验数据报的首部 不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。 计算实例

    image-20200924123815297

  • 源IP地址和目的IP地址都各占 4 字节

  • 可变部分

    • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
    • 选项字段的长度可变,从 1 个字节到 40 个字 节不等,取决于所选择的项目。
    • 增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数 据报的开销。
    • 实际上这些选项很少被使用。

IP层转发分组的流程

数据路由:路由器在不同网段转发数据报

网络畅通的条件:能去能回;沿途的路由器必须知道到目标网络下一跳给哪个接口;沿途的路由器必须知道到源网络下一跳给哪个接口

image-20200924144603743

IP层转发分组的流程

  1. 有四个 A 类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万个主 机。
  2. 可以想像,若按目的主机号来制作路由表, 则所得出的路由表就会过于庞大。
  3. 但若按主机所在的网络地址来制作路由表, 那么每一个路由器中的路由表就只包含 4个项目。这样就可使路由表大大简化。

在路由表中,对每一条路由,最主要的是 (目的网络地址,下一跳地址)

image-20200924151200080

查找路由表

  • IP 数据报最终一定可以找到目的主机所 在目的网络上的路由器(可能要通过多次的间接交付)。
  • 只有到达最后一个路由器时,才试图向 目的主机进行直接交付。

特定主机路由

  • 这种路由是为特定的目的主机指明一个路由。
  • 采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在 需要考虑某种安全问题时采用这种特定主机路由。

默认路由(default route)

  • 路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。
  • 这种转发方式在一个网络只有很少的对外连接时是很有用的。
  • 默认路由在主机发送 IP 数据报时往往更能显示出它的好处。
  • 如果一个主机连接在一个小网络上,而这个网络只用一个路由器和因特网连接,那么在这种 情况下使用默认路由是非常合适的。

image-20200924152729430

分组转发算法

  1. 从数据报的首部提取目的主机的IP地址D,得出目 的网络地址为 N
  2. 若网络N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
  3. 若路由表中有目的地址为 D 的特定主机路由,则把 数据报传送给路由表中所指明的下一跳路由器;否 则,执行(4)。
  4. 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
  6. 报告转发分组出错。

动态路由RIP协议

内部网关协议OSPF/外部网关协议BGP

ICMP协议

一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 所以我们就需要一种协议来完成这样的功能—-ICMP协议。

  • 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。
  • ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。
  • ICMP 不是高层协议,而是 IP 层的协议。
  • ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去。

主要功能:

  • 确认IP包是否成功到达目标地址
  • 通知在发送过程中IP包被丢弃的原因

image-20200924160453695

报文格式

image-20200924153134641

ICMP报文的种类

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文

ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。

ICMP 差错报告报文

  • 终点不可达

终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。

  • 源点抑制(Source quench)

    当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。

  • 时间超过

    当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。

  • 参数问题

    当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。

  • 改变路由(重定向)(Redirect)

    改变路由(重定向)路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。

ICMP 差错报告报文的数据字段的内容

image-20200924153624800

不应发送 ICMP 差错报告报文的几种情况:

  1. 对 ICMP 差错报告报文不再发送 ICMP 差错 报告报文。
  2. 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
  3. 对具有多播地址的数据报都不发送 ICMP 差错报告报文。
  4. 对具有特殊地址(如127.0.0.0 或 0.0.0.0) 的数据报不发送 ICMP 差错报告报文。

ICMP 询问报文

  • 回送请求和回答报文

    ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的机器必须给源主机发送ICMP回送应答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。

  • 时间戳请求和回答报文

    ICMP时间戳请求允许系统向另一个系统查询当前的时间。该ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间只能提供秒级的分辨率。请求端填写发起时间,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。大多数的实现是把后面两个字段都设成相同的值。

下面的几种 ICMP 报文不再使用

  • 信息请求与回答报文
  • 掩码地址请求和回答报文
  • 路由器询问和通告报文

ICMP的应用举例

PING (Packet InterNet Groper)/pathping

  • PING 用来测试两个主机之间的连通性。
  • PING 使用了 ICMP 回送请求与回送回答报文。
  • PING 是应用层直接使用网络层 ICMP 的例 子,它没有通过运输层的 TCP 或UDP。

IGMP协议

网络地址转换 NAT

NAT详解

网络地址转换 NAT (Network Address Translation) 方法于1994年提出。

需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT 路由器,它至少有一个有效的外部全球地址$IP_G$。 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成 $IP_G$ 才能和因特网连接。

网络地址转换的过程

  1. 内部主机 X 用本地地址 $IP_X$ 和因特网上主机 Y 通信所发送的数据报必须经过 NAT 路由器。
  2. NAT 路由器将数据报的源地址 $IP_X$ 转换成全球地 址 $IP_G$ ,但目的地址 $IP_Y$ 保持不变,然后发送到 因特网。
  3. NAT 路由器收到主机 Y 发回的数据报时,知道 数据报中的源地址是 $IP_Y$ 而目的地址是$IP_G$ 。
  4. 根据 NAT 转换表,NAT 路由器将目的地址$IP_G$ 转换为 $IP_X$ ,转发给最终的内部主机 X。