Linux网络-IP协议(下)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: Linux网络-IP协议(下)

四、IP地址数量限制


  • 概念及介绍:
  1. IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址
  2. 实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿,另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址
  3. CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用


  • 三种解决方式:
  1. 动态分配IP地址:只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的
  2. NAT技术:能够让不同局域网当中同时存在两个相同的IP地址,NAT技术不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机
  3. IPv6:IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址,目前IPv6还没有普及


五、私有和公网IP地址


  • 私有IP地址范围:

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的IP地址都可以,但是RFC1918规定了用于组建局域网的私有IP地址

  1. 10.* ,前8位是网络号,共16,777,216个地址
  2. 172.16.到172.31.,前12位是网络号,共1,048,576个地址
  3. 192.168.*,前16位是网络号,共65,536个地址

包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)


  • 示图:

image-20220723160209692.png

  • 说明:
  1. 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP)
  2. 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中
  3. 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是不同子网的IP地址就可以重复了
  4. 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,最外层的运营商路由器, WAN口IP就是一个公网IP了
  5. 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换)
  6. 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买


  • 运营商的作用:
  1. 实际网络通信的基础设施都是运营商搭建的,我们访问服务器的数据并不是直接发送到了对应的服务器,而是需要经过运营商建设的各种基站以及各种路由器,最终数据才能到达对应的服务器
  2. 用户上网的数据首先必须经过运营商的相关网络设备,然后才能发送到互联网公司对应的服务器,而所谓的网段划分、子网划分等工作实际都是运营商做的


NAT技术

  • 什么是NAT:

NAT(Network Address Translator,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术,NAT实际上是为解决IPv4地址短缺而开发的技术


  • NAT工作机制:
  1. 以 10.0.0.10 的主机与 163.221.120.9 的主机进行通信为例讲解 NAT 的工作机制。利用 NAT,途中的 NAT 路由器将发送源地址从 10.0.0.10 转换为全局的 IP 地址(202.244.174.37)再发送数据
  2. 反之,当响应数据从 163.221.120.9 发送过来时,目标地址(202.244.174.37)先被转换成私有 IP 地址 10.0.0.10 以后再被转发


  • 示图:

image-20220723171659974.png

  • 注意:
  1. 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关
  2. NAT 路由器在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换
  3. 网络访问只能先由私网侧发起,公网无法主动访问私网主机(不存在替换会话,无法找到对应的私网主机)
  4. NAT 路由器的存在对通信双方是保持透明的
  5. NAT 路由器为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来


  • NAT类型:

NAT 有 3 中类型:静态NAT,动态NAT,端口复用NAPT


  1. 静态NAT

内部本地地址一对一转换成内部全局地址,相当内部本地的每一台PC都绑定了一个全局地址。一般用于在内网中对外提供服务的服务器

  1. 动态NAT

在内部本地地址转换的时候,在地址池中选择一个空闲的,没有正在被使用的地址,来进行转换,一般选择的是在地址池定义中排在前面的地址,当数据传输或者访问完成时就会放回地址池中,以供内部本地的其他主机使用,但是,如果这个地址正在被使用的时候,是不能被另外的主机拿来进行地址转换的

  1. 端口复用NAPT

面对私网内部数量庞大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪个内部主机。此时,需要 NAT 设备根据传输层信息或其他上层协议去区分不同的会话,并且可能要对上层协议的标识进行转换,比如 TCP 或 UDP 端口号。这样 NAT 网关就可以将不同的内部连接访问映射到同一公网IP的不同传输层端口,通过这种方式实现公网IP的复用和解复用。这种方式也被称为端口转换PAT、NAPT或IP伪装,但更多时候直接被称为NAT,因为它是最典型的一种应用模式


  • 如下图所示:

以私网 10.0.0.10 和 10.0.0.11 的主机与外网 163.221.120.9 的主机进行通信为例讲解 NAPT 的工作机制

image-20220723173716232.png

  • 解释:
  1. 主机 163.221.120.9 的端口号是 80,私网中有 2 个客户端 10.0.0.10 和 10.0.0.11 同时进行通信,并且这 2 个客户端的本地端口都是 1025。此时,仅仅转换 IP 地址为全局地址 202.244.174.37 ,会令转换后的数字完全一致
  2. 因此,为了区分这 2 个会话,只要将 10.0.0.11 的端口号转换为 1026 就可以解决问题。NAPT 路由器通过生成转换表,就可以正确地转换地址跟端口的组合,使客户端A、B能同时与服务器之间进行通信
  3. 利用端口号的唯一性实现了公网 IP 到私网 IP 的转换,理论上最多可以让 65535 台主机共用一个公网 IP 地址


  • NAT技术的优缺点:
  1. 优点

节省合法的公有 IP 地址(最大的优点)

当网络发生变化时,避免重新编址

对外隐藏内部地址,增加网络安全性(网络访问只能先由私网侧发起,公网无法主动访问私网主机)


  1. 缺点

无法从NAT 的外部向内部服务器建立连接(NAT穿越)

转换表的生成和转换操作都会产生一定的开销

通信过程中一旦 NAT 遇到异常需重新启动时,所有的 TCP 连接都将被重置。即使备置两台 NAT 做容灾备份,TCP 连接还是会被断开


六、路由


  • 概念及介绍:
  1. 数据的发送和转发就是在复杂的网络结构中, 找出一条通往终点的路线
  2. 路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程
  3. 数据在路由的过程中,实际就是一跳一跳(Hop by Hop)“问路”的过程。所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间


  • 示图:

image-20220723160247285.png

  • 说明:
  1. IP数据包的传输过程也和问路一样
  2. 当IP数据包, 到达路由器时, 路由器会先查看目的IP
  3. 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器
  4. 依次反复, 一直到达目标IP地址
  5. 而判定当前这个数据包该发送位置就是依靠每个节点内部维护一个路由表


  • 路由器的查找结果处理行为:
  1. 得知该数据下一跳应该跳到哪一个子网,转发给下一个子网
  2. 没有发现匹配的子网,此时路由器会将该数据转发给默认路由
  3. 目标网络就是当前所在的网络,此时路由器就会将该数据转给当前网络中对应的主机


  • 路由表查询的具体过程:

每个路由器内部会维护一个路由表,我们可以通过route命令查看云服务器上对应的路由表


  • 示图:

image-20220723175009324.png

  • 解释:
  1. Flags中,U标志表示此条目有效(可以禁用某些条目)G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发
  2. 当IP数据包到达路由器时,路由器就会用该数据的目的IP地址,依次与路由表中的子网掩码 Genmask进行“按位与”操作,然后将结果与子网掩码对应的目的网络地址Destination进行比对,如果匹配则说明该数据包下一跳就应该跳去这个子网,此时就会将该数据包通过对应的发送接口Iface发出(Iface代表的是发送接口)
  3. 如果将该数据包的目的IP地址与子网掩码进行“按位与”后,没有找到匹配的目的网络地址,此时路由器就会将这个数据包发送到默认路由,也就是路由表中目标网络地址中的default。可以看到默认路由对应的Flags是UG,实际就是将该数据转给了另一台路由器,让该数据在另一台路由器继续进行路由


  • 路由表生成算法:
  1. 静态路由:是指由网络管理员手工配置路由信息
  2. 动态路由:是指路由器能够通过算法自动建立自己的路由表,并且能够根据实际情况进行调整
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
基于阿里云,构建一个企业web应用上云经典架构,让IT从业者体验企业级架构的实战训练。
相关文章
|
5天前
|
缓存 安全 前端开发
探索HTTP协议:网络通信的基石
探索HTTP协议:网络通信的基石
|
4天前
|
运维 网络协议 Linux
Docker网络_docker 网络,来看看这份超全面的《Linux运维面试题及解析》
Docker网络_docker 网络,来看看这份超全面的《Linux运维面试题及解析》
|
6天前
|
运维 监控 安全
网络管理(包括网络管理的功能,管理系统及相关协议:SNMP,CMIS/CMIP)
网络管理(包括网络管理的功能,管理系统及相关协议:SNMP,CMIS/CMIP)
14 1
|
6天前
|
算法 网络协议 数据建模
【计算机网络】—— IP协议及动态路由算法(下)
【计算机网络】—— IP协议及动态路由算法(下)
12 0
|
6天前
|
算法 网络协议 数据建模
【计算机网络】—— IP协议及动态路由算法(上)
【计算机网络】—— IP协议及动态路由算法(上)
12 0
|
6天前
|
网络协议 Java 网络安全
【计算机网络】—— Socket通信编程与传输协议分析
【计算机网络】—— Socket通信编程与传输协议分析
15 0
|
6天前
|
移动开发 网络协议 网络安全
【网络安全 | 网络协议】一文讲清HTTP协议
【网络安全 | 网络协议】一文讲清HTTP协议
23 0
|
6天前
|
网络协议 Linux 网络架构
|
6天前
|
域名解析 网络协议 Linux
linux网络配置详解
linux网络配置详解
24 0