04 - 网络层 - IP和ARP

170 阅读6分钟

这是我参与更文挑战的第2天,活动详情查看: 更文挑战

五层的网络模型

五层模型.png

网络层

向上层提供简单灵活, 无连接的, 尽最大努力交付的数据报服务

网络在发送分组时无需先建立连接. 每个分组独立发送.

网络层不提供服务质量的承诺. 即分组可能丢失, 出错, 重复和失序.

网际协议IP

IP是网络层TCP/IP体系中最重要的协议之一

IP协议通常与ARP(地址解析协议), ICMP(网际控制报文协议), IGMP(网际组管理协议)配套使用

网络层中的协议.png

如何将异构的网络互相连接起来

可以通过中间设备将网络互相连接起来

中间设备有以下五种

  • 转发器 - 物理层中继系统
  • 网桥或桥接器 - 数据链路层中继系统
  • 路由器 - 网络层中继系统
  • 桥路器 - 网格和路由器的混合物
  • 网关 - 网络层以上的中继系统

虚拟互连网络的意义

物理网络上的异构性是客观存在的, 逻辑上网络是互连的, 在用户看来就像是一个统一的网络

当互联网上的主机间进行通信时, 就像在一个网络上一样, 而看不见各个具体网络的异构细节

IP地址的结构

IP地址的结构.png

IP地址的分类

IP地址的分类.png

IP地址的结构.png IP地址采用点分十进制记法, 可以提高可读性

32位的IP地址: 11000000 10101000 00000001 00001010

每八位转换为十进制数: 192.168.1.10

IP地址的指派范围

网络类别最大可指派网络数第一个可指派网络号最后一个可指派网络号每个网络中最大主机数
A126(2^7 -2)112616777214
B16383(2^14-1)128.1191.25565534
C2097151(2^21 - 1)192.0.1223.255.255254

IP地址的特点

  • IP地址是一种分等级的地址结构, 方便管理, 减少路由表所占用存储空间
  • IP地址标志一个主机和一条链路的接口, 一个路由器至少应当有两个不同的IP地址
  • 用转发器或网桥连接起来的局域网仍为一个网络, 具有同样的网络号
  • 所有分配到网络号的的网络, 不论范围大小, 都是平等的

ARP地址解析协议

通过IP地址, 使用ARP找出相应的硬件地址

ARP从网络层使用的IP地址, 解析出在数据链路层使用的硬件地址

每一个主机都有一个ARP高速缓存, 用来存储IP地址到硬件地址的映射表

ARP的运行过程

当主机A向本局域网中的主机B发送IP数据报时, 先在ARP高速缓存中查看有无主机B的IP地址

如果有, 取出对应的硬件地址, 并写入MAC帧, 然后通过局域网将该MAC帧发往此硬件地址

如果没有, ARP在局域网上广播一个ARP请求分组. 收到ARP响应分组后, 将IP地址到硬件地址的映射写入ARP高速缓存

如果主机A和主机B不在同一个局域网时, 要通过ARP找到一个位于本局域网的某个路由器的硬件地址, 然后把分组发送给这个路由器, 再由这个路由器把分组转发给下一个网络.

ARP高速缓存的作用

存放最近获得的IP地址到MAC地址的映射, 以减少ARP广播的数量

主机A发送ARP请求分组时, 将自己的IP地址到硬件地址的映射写入ARP请求分组

主机B收到A的ARP请求分组时, 就将分组中的地址映射写入主机B的ARP高速缓存.

###使用ARP的四种典型情况

  • 发送方是主机, 把IP数据报发送到本网络的另一个主机. 使用ARP找到目的主机的硬件地址
  • 发送方是主机, 把IP数据报发送到另一网络的一个主机. 使用ARP找到本网络上的一个路由器的硬件地址. 剩下的工作由这个路由器来完成
  • 发送方是路由器, 把IP数据报发送到本网络的另一个主机. 使用ARP找到目的主机的硬件地址.
  • 发送方是路由器, 把IP数据报发送到另一个网络的主机. 使用ARP找到本网络上的另一个路由器的地址. 剩下的工作由这个路由器来完成

IP数据报的格式

IP数据报由首部和数据现部分组成

IP数据报.png

首部的前一部分是固定长度20字, 所有IP数据报必有

首部的后一部分是可选字段, 长度是可变的

版本 - IP协议的版本, 占4位, 目前常用的版本为IPv4

首部长度 - 占4位, 可表示的最大数值为15个单位, 一个单位为4字节, 因此IP首部的最大长度为60字节

区分服务 - 占8位, 一般情况下不使用这个字段

总长度 - 占16位, 首部+数据长度, 因此数据报的最大长度为65535字节, 不能超过MTU

MTU - 最大传送单元

标识 - 占16位, 一个计数器, 用来产生数据报的标识

标志 - 占3位, 只使用了前两位

最低位是MF(More Fragment) - MF = 1表示还有分片, MF = 0表示最后一个分片

中间位是DF(Don't Fragment) - DF = 0允许分片, DF = 1不允许分片

片偏移 - 占13位, 标明某片在原分组中的相对位置, 以8个字节为偏移单位

生存时间 - 占8位, 记为TTL(Time to Live), 数据报在网络中可以通过路由器数量的最大值

协议 - 数据报携带的数据使用何种协议

首部检验和 - 占16位, 只检验数据报的首部, 不检验数据部分

源地址 - 占4字节

目的地址 - 占4字节

可变部分 - 1 - 40个字节

路由器分组转发算法

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

路由表

路由表不会指出分组到达某个网络的完整路径

路由表只能指出分组到达某个网络先到哪个路由器

到达下一跳路由器后, 查找路由表, 知道再下一跳的路由器

如此循环, 直到最后到达目的网络