当前位置: 首页 > article >正文

【网络协议栈】网络层(中)公有IP与私有IP、网络层中的路由(内附手画分析图 简单易懂)

在这里插入图片描述
每日激励:“要创造自己的彩虹,就先得下那场雨。—Jack”

绪论​:
本章是网络层的最终章,它将承接之前所写到网络层中非常重要的知识继续往后,包括了什么是私有IP和公有IP、在网络层层面来看整个网络拓扑图结构、以及路由器的功能和使用,它是你了解网络世界非常重要的一把钥匙,不容错过喔~。后续我将继续往下到达数据链路层,敬请期待吧!
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。


私有IP地址和公网IP地址

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有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(或公网IP);

例(私有ip):
在这里插入图片描述
例如我的云服务器:8.xxx.xx.xxx,就是公网IP
我们用的能见到的几乎都是私有ip

注意点:

私有IP(内网IP),不能出现在公网中!
因为内网IP在不同子网中可能出现重复
对此要解决内网IP不出现在公网中的情况:
NAT技术:
任何一个内网路由器,在转发报文的时候都要将源IP替换成为路由器的WAN口IP后才在网络中传递。

所以真实网络情况:
公网 + 私网(家庭网络和运营商私网)构建的网络拓扑结构

网络拓扑结构理解图

如下:
在这里插入图片描述
上图大概意思就是:在公网上通过不断的网络号的划分,将区域不断的区分,一直到较小的区域,这样到达一个小区域后,通过路由器从公网到内网,而这个路由器上的公有IP地址就是该内网内所有IP到达公网后要转换成的IP(NAT技术)。


路由

下图也能想象成之前所写的院之间的关系其中左边的圈就相当于一个学院内的联系,而右边的大圈就相当于每个学院之间的联系
在这里插入图片描述

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

路由器的执行流程图:

在这里插入图片描述

  1. 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  2. 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器(还有可能发给缺省路由(因为该主机也不知道要发给那个路由器))
  3. 依次反复,一直到达目标IP地址

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表

路由表的使用

具体如下图:
查看当前路由表的shell指令:route -n
在这里插入图片描述
可以想象成问路的过程,得到的结果无非是下面几种结果

  1. 告诉你:下一步你该怎么走(发送给下一个路由器)
  2. 不知道:喊你去找另外一个人 (发送给缺省路由),也就是当前所有路由都不是所要去的目的(就如上图)
  3. 告诉你:你已经到达目的地了(发送给目标主机)

注:

  1. 每个路由器都有自己的路由表
  2. 在初始化时就会把同一个子网中的路由器情况写进自己的路由表
  3. TCP建立要三次握手----要求ip报文交换三次(传输层看起来简单但是在网络层中其实还挺麻烦的)

本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量计算机网络细致内容,早关注不迷路。


http://www.kler.cn/a/416822.html

相关文章:

  • Java学习教程,从入门到精通,Java异常(Exceptions)语法知识点及案例代码(45)
  • Socket编程(TCP/UDP详解)
  • C底层 函数栈帧
  • 成都睿明智科技有限公司抖音电商服务的新引擎
  • 03.ES7 04.ES8
  • Leetcode 二叉树的锯齿形层序遍历
  • 【conda】全面解析 Conda 配置文件:从完整示例到最佳实践
  • Python酷库之旅-第三方库Pandas(250)
  • 架构-微服务-服务网关
  • spring boot2.7集成OpenFeign 3.1.7
  • 服务器配环境
  • OD E卷 - 实现【正则表达式替换】
  • 使用uni-app进行开发前准备
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(5))
  • vue中如何获取public路径
  • Ubuntu 关机命令
  • 【LeetCode】每日一题 2024_11_30 判断是否可以赢得数字游戏(模拟)
  • NLP中的主题模型:LDA(Latent Dirichlet Allocation, 潜在狄利克雷分配)
  • vulnhub靶机之Fawkes
  • C#结合.NET框架快速构建和部署AI应用
  • 【超全总结】深度学习分割模型的损失函数类别及应用场景
  • sunshine和moonlight串流网络丢失帧高的问题(局域网)
  • SickOs: 1.1靶场学习小记
  • asyncio.run() 里面嵌套 asyncio.run() 可以吗?
  • 【Leetcode】3232.判断是否可以赢得数字游戏
  • APIPost内置函数的使用与学习