逻辑之于网络(入门)

112 阅读3分钟

在网络中,基本会遇到如下拓扑

image.png

image.png

1. 实体,交互

我们在图中可以看到两个东西,即“实体”和“动作(信息交互)”。 按照基本程序设计:图中的动作对应两个阶段:if 匹配规则和匹配后执行

image.png

代码中的 if 匹配(规则),肯定是基于缓存变量的,所以在实体 A 和 B 中肯定有缓存的:网络中一般谈 2347 层,那么这缓存都是:

  • 二层:ARP 表
  • 三层:路由表
  • 四层:连接跟踪表
  • 七层:cookie

分层也对应编程中的重要概念(抽象 类 结构体)等,为了隐藏细节。 比如,七层封装在四层数据包中,四层隐藏在三层数据包中,三层隐藏在二层数据包中 下层只管封装上层数据,不必关系数据细节。

比如 三层关注 IP:源IP和目的IP,四层关注五元组:源IP和目的IP,源端口和目的端口,以及协议

二层不需要看到三层的IP就能完成数据发送(交换) 三层不需要关注端口就完成数据发送(路由转发)

每个层次之需要关注自己那一点业务,不需要解析所有数据,即可完成信息发送的方向的判定,然后执行发送动作。 上一层的发送动作,到下一层就是封包动作。按照协议层级:当前层完成封包动作后,再向下传递

这样每一层的动作抽象起来都是一样的,封装,发送。

这里强调一些路由表:

  • 基于源地址(网段)
  • 基于目标地址(网段)
  • 基于源地址和目标地址

小结: 各层实现都是基于缓存结合if匹配规则,然后执行封包,发送动作,两个字:匹配,发送

2. 包的修改

上面我们说了封装和发送。 二层交换和三层路由都不会修改包,包只会从一个地方到另一个地方。 这里延伸下包的修改,包的修改包含大致如下内容:

基本都是4层功能,基于源|目标地址,源|目标端口,协议

  • 丢包
  • 地址转换
  • 数据加密
  • 复制

2.1 丢包

比如安全组,防火墙 ACL 场景:有放通和阻止两种行为

  • 基于源地址
  • 基于目标地址
  • 基于源端口
  • 基于目标端口
  • 基于协议
  • 基于以上组合

2.2 地址转换

其实策略也是一样的,比如地址转换,需要基于匹配策略,进行地址修改,然后封包,发送 snat dnat 端口转换可以简单参考 iptables 的规则定义

防火墙上也可以做地址转换,一般要考虑配合 ACL,先放通流量,然后再修改包

2.3 加密

比如,IPSec 在路由决策后,是基于 ip xfrm policy 对内网包的目标地址进行匹配,进行数据加密,然后将内网数据包,封装为一个公网数据包,在公网上看到的只是加密后的包数据

防火墙上也可以做ipsec,一般要考虑配合 ACL,先放通流量,然后再修改包

复制

一般交换机都具备流量镜像等功能

3. 异常情况:丢包,环路

image.png

3.1 丢包

如果说从A->C: 现象看到 A 的包发出去了(traceroute,tcpdump 工具),但 C 没有收到:

  • 检查 A 互联 B 的ACL,当前路由平面,互联地址,(甚至,互联地址之后的路由平面,检查光信号,物理链路)
  • 检查 B 互联 C 的ACL,当前路由平面,互联地址,(甚至,互联地址之后的路由平面,检查光信号,物理链路)

考虑并行路由,路由无效,路由黑洞等情况

3.2 环路

环路至少对应两条(路由):两侧各有一条路由。

如果只说一条路由就说环路,那就是不知道在说啥。