一、网关
- 电脑上的网卡 相当于一个网关
- 路由器也相当于一个网关
- 网关往往是一个路由器 是一个三层转发设备 就是把MAC头和IP头取下来 然后根据里面的内容看看接下来包该往哪里转发的设备
- 路由器 他有5个网卡或者网口 每个网口的IP都和局域网的IP地址在相同的网段 都个网口都是那个局域网的网关
二、Mac 头 和 IP 头
-
Mac 头
源Mac 地址 和 目标Mac地址 协议类型 -
IP头
源IP 、目标IP 、 TTL、 协议、首部校验和 、总长度、标识 -
一台机器要想访问另一个IP地址 首先会判断 自己的和要访问的IP地址在不在同一个网段,如何判断在不在同一个网段 就是通过CIDR(无类型域间选路)和子网掩码 子网掩码和IP地址去AND操作 就是 网络号
- 如果是同一个网段 就通过ARP请求获取 MAC地址
- 如果不是同一个网段 那就要发往 网关了 网关和自己的IP地址肯定在同一个网段 例如 192.168.1.0/24 这个网段 网关往往是 192.168.1.1/24 或者 192.168.1.2/24 因为网关和我们的电脑在同一个网段 那么就像访问其他电脑一样 直接发送ARP请求 获取 MAC 地址,接下来何去何从 全看网关的了
三、静态路由
- 静态路由 就是配置的一条条规则 比如访问 IP1网站 从a网口出去 下一跳是 IP2
四、IP头 和 MAC 头 那些变 那些不变
MAC地址是一个局域网内才有效的地址,因此只要MAC地址过网关 就必定会变,因为已经换了局域网,主要区别在于 IP地址是否要变 不改变IP地址的网关是转发网关 改变IP地址的是NAT网关
- IP地址不发生改变的场景
如上图所示 当服务器A要想访问 服务器B的时候 发现A和B不在同一个网段 这是就会发送到网关 包的样式是这样的
- 源IP 192.168.1.101/24
- 目标IP 192.168.4.101/24
- 源MAC地址 A的MAC地址
- 目标MAC地址 192.168.1.1/24的MAC地址
包发到192.168.1.1/24之后 由于配置了静态路由 网关已经知道 要从192.168.56.1/24 出 下一跳是192.168.56.2/24 这是包的样式如下
- 源IP 192.168.1.101/24
- 目标IP 192.168.4.101/24
- 源MAC地址 192.168.56.1/24 的MAC地址
- 目标MAC地址 192.168.56.2/24 的MAC地址
这时另一个路由器发现源MAC地址一致 把包收进来
同样的道理 另一个路由器配置了静态路由 知道要访问192.168.4.101/24 就要从 192.168.4.1/24出 没有下一跳了 因为192.168.4.1/24和192.168.4.101/24 在同一个网段
以上过程 源IP和目标IP始终是不变的
- IP地址变化的场景 NAT(Network Address Translation)网关
不同局域网的IP地址是可以一样的 比如 局域网A中有个地址叫 192.168.1.100/24 另一个局域网B的IP地址也叫做 192.168.1.100/24 当A访问B的时候 这简直就是自己访问自己,实际上这是不可能的。这时IP地址实际上会被转成公网的IP B局域网中的192.168.1.100/24 就不再是192.168.1.100/24了 可能就变成192.168.56.10/24 了
这种场景在实际的生活中更常见 我们自己的IP地址会被转成 运营商的公网IP地址。
五、路由表
- 根据目的IP地址配置路由
一个路由表中会有多条路由规则 每一条规则至少包含 三项信息
- 目的网络 这个包想去哪
- 出口设备 将包从那个口扔出去
- 下一跳网关 下一个路由地址
-
配置策略路由
根据多个参数来配置路由
配置不同网段的IP走不同的路由表 同时路由表中下一跳也可以设置多个 还可以设置权重 -
动态路由算法 即找最短路径
距离矢量路由算法 基于 Bellman-Ford
算法的核心思想就是 每个路由器保存一张路由表 一个路由表中有多行 每一行包含两个信息 一个是要到的目标路由器 另一个是到目标路由器的距离 。这样其实每个路由器都是知道全局信息的。那么如何更新呢?每过几秒 每个路由器都将自己所知的到达所有路由器的距离告知邻居 每个路由器也能从邻居哪里得到相似的信息
问题一、好消息传的快 坏消息传的慢。如果有个新的路由器加入了这个网络,他的邻居很快就能将这个消息广播出去 很快整个网络就会知道。但是 一旦一个路由器挂了 挂的消息是没有广播的 当每个路由器发现到不了这个路由器的时候 不是感知他挂了 而是试图通过其他的路径去访问,直到尝试了所有的路径才会觉得他真的挂了。
问题二、这种算法的第二个问题就是每次更新就会通知所有的路由表 这样网络规模大了之后就会慢 所以距离矢量路由算法 的路由表 限制了网络规模 -
链路状态路由算法 基于 Dijkstra 算法
基本思路就是 当一个路由启动的时候首先发现的是邻居 想邻居sayhello,然后邻居都回复,然后计算和邻居的距离 发送一个echo 要求马上返回 除以2就是距离 然后将自己和邻居的链路状态包广播出去,发送到整个网络的每个路由。只发送更新的那部分
六、动态路由协议
-
基于链路状态路由算法的 OSPF(Open Shortest Path First,开放式最短路径优先)
由于常用在数据中心内部 用于路由决策 因而称为内部网关协议 -
基于距离矢量路由算法的BGP 外网路由协议 国家之间
每一个国家成为一个自治系统(AS) BGP分为两类 eBGP和iBGP 边界路由之间使用eBGP广播路由,内部网络也要访问其他自制系统 边界路由通过iBGP 将自己学到的路由告知内部路由 这样可以使得内部路由也能知道最佳的去外网目的地的最好的边界路由