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

[Java EE] IP 协议 | NAT 机制 | 路由选择 | MAC 地址 | 域名解析服务

Author:MTingle
major:人工智能


Build your hopes like a tower!



目录

一. 初识 IP 协议

IP 协议报头:

二. IP 协议如何管理地址

NAT机制

路由选择

三. 数据链路层(以太网): MAC地址

四. 域名解析系统


一. 初识 IP 协议

IP 协议工作在网络层,其目标是为了在复杂的网络环境中确立一条合适的路径传输,  IP 协议主要完成的工作有两方面,地址管理和路由选择.

地址管理: 是使用一套地址体系来描述互联网上每个设备的位置.

路由选择: 是指一个数据包如何从网络的某个位置传输到另一个位置.

IP 协议报头

IP 协议的版本取值有两种,4和6( IPv4 和 IPv6 ),当前主流版本是 IPv4 ,首部长度单位是 4 个字节.

8位服务类型,实际上只有四位有效,这4位是彼此冲突的,其中只有1位为1,剩下的必须为0,表示当前 IP 所处模式,他们分别为最小延时,最大吞吐量,最高可靠性( IP 协议并非像 TCP 一样提供了强可靠性,但是内部也会有一些防止丢包的考量 ),最小成本(最小硬件开销).

16位总长度,描述一个 IP 数据报的长度,包含报头和载荷,但是这并不意味着我们的 IP 收到了 64kb 的限制, IP 协议可以通过 拆包/组包 的功能突破 64kb 的限制,运输数据包,即时数据报非常大,在 IP 这一层会自动拆成多个 IP 数据报,每个数据报会携带载荷的一部分.

包拆了之后该如何组包呢?

16位标识,可以说明哪些 IP 数据报的载荷应该组装在一起.

3位标志(只有两位有效),1位表示这次的 IP 数据报是否拆包了,还有一位表示结束标记.

13位片偏移,描述了这些包的先后顺序.

8位生存时间,单位是次数,而且是整数,一个 IP 数据报,每次经过一个路由器转发,TTL -1,如果这个数值减到0,此时就说明数据包被丢包了,TTL 除了可以验证是否丢包,还可以防止某个数据在网络上被无限转发下去, TTL 一般来说是 32/64 这样的整数,足够支撑当前网络传输.

8位协议,表示的是在传输层使用的是哪个协议.

16位校验和,只针对 IP 的首部校验,载荷部分的 TCP/UDP 都自带了校验和, IP 协议就不用管了.

32位源 IP 地址,32位目的 IP 地址,表示了发件人地址和收件人地址.

二. IP 协议如何管理地址

NAT机制

IP 协议本质上就是一个 32 位整数,为了方便,就会把 IP 表示成 点分十进制 的形式,通过三个点分成四部分,每个部分表示1个字节,每个部分的取值都是 0-255.

但是,在网络飞速发展的年代,32位的IP地址不够用了!如何解决 IP 地址不够用,就成了当时一个严峻问题.下面我们来解析 IP 协议是如何解决这个问题的.

1. 动态分配 IP 地址,全世界的设备也不是同一时刻一起上网的,可以更充分的利用现有 IP ,但这只是权宜之计,不能根本上的解决问题.

2. NAT 机制( 网络地址映射 ):先把 IP 地址分成两个大类:私网 IP / 局域网 IP ,公网 IP / 广域网 IP .

IP 地址是以 10* ,172.16-172.31* , 192.168* 这三类开头的地址为私网 IP ,剩下的就是公网 IP .

由于上述设定,就产生了一个重要的限制:

1. 公网设备访问公网设备,没有任何问题,可以直接访问.

2. 局域网设备访问另一个在同一个局域网下的设备,也没有任何问题.

3. 局域网访问不在同一个局域网的设备,不允许访问.

4. 局域网访问公网设备,就与需要对局域网设备的 IP 进行地址转换.

5.公网设备不允许主动访问局域网设备.

一般一个路由器都会带有 2 个 IP 地址, LAN 口 IP 往往是一个局域网 IP , WAN 口 IP ,可能是局域网 IP ,也可能是公网 IP ,路由器的核心就是把这两个局域网连接起来.此处我们将模型简化,只考虑主机经一个路由器,把数据转入公网,最终到达了服务器: 

假设路由器的 WAN 口 IP 是5.6.7.8,这个时候,电脑上发出的数据,经这个路由器,想进一步往前转发,就会把 IP 报头中的源 IP 进行替换.经过上述替换,中间的源 IP 就被路由器修改了,改成了自己的 IP,当然,不是每一个路由器都会替换,局域网内的路由器会替换, 一旦这个数据包源 IP 变成了公网 IP ,就不会继续替换了.当这个包到达服务器后,服务器看到的 IP 就是5.6.7.8,就感知不到先前的 IP 了.

上述替换,本质上就是让一个公网 IP 能够对应到多个设备,从而起到节省 IP 地址的效果. 那么当数据需要返回时, IP 会怎么处理呢?

路由器在进行 NAT 地址转换的时候,会将此次的通讯的相关信息(替换之前的 IP ,替换之后的 IP ,服务器  IP ,源端口,目的端口)记录在表中,返回响应数据时,源 IP ,目的 IP 是反过来的.路由器通过查表,就能找到对应的表项,就能把目的 IP 还原成之前的局域网 IP .路由器收到响应之后,就可以查询,传输层中的目的端口,端口号可以用用来区分主机的不同进程,当然也可以用来区分不同主机的不同进程,客户端分配的端口号是系统随机分配的,两个主机之间的端口,大概率不相同.

若局域网中的两个设备,端口分配相同呢?此时路由器也会对端口号进行映射( NAT 也可能会修改传输层的报头,此时路由器就不是一个纯粹工作在网络层的设备,也会涉及到传输层的内容)

大部分情况下,局域网内不同设备访问的不是同一个网站,这个时候直接通过服务器 IP 就能够区分.

少数情况下,如果访问的是同一个服务器,就可以按照端口号进行区分.

极少数情况下,碰巧访问的是同一个服务器并且端口相同,就可以在路由器这边自动映射成不同的端口号,仍然能够区分. 

当前互联网就是 动态分配 + NAT相结合产生的方案.

IPv6的产生则从根本上提供了解决方案,增加了 IP 地址的个数,IPv4用四个字节表示 IP 地址,而 IPv6 用16个字节表示 IP 地址.,但是 IPv6 和 IPv4 的报头结构是不兼容的,所以目前还未启动 IPv6 进行通信.

网段划分

网段划分的产生为我们进行组网提供了便利,我们把一个 IP 地址分为两个部分: 网络号 + 主机号,我们的机器如果在同一个局域网中,网络号都是相同的,主机号则是不同的.家用宽带来说,一般我们默认前三个字节是网络号,主机号的范围就表示局域网中可以有多少个设备.

路由器的其中一个功能是 DHCP ,自动帮我们将局域网设备中的 IP 都分配好.当设备连接上路由器时,路由器会自动分配,因此同一个设备,每次连到路由器得到的 IP 是可能不同的.

如果一个局域网中,网络号和主机号都相同,则个时候是无法上网的,如果局域网中的设备,网络号和路由器的网络号不相同,也是无法上网的,两个"相邻"的局域网,网络号不能相同(一个路由器连接的两个网络,称为"相邻")

 一些特殊的的 IP 地址

127.0.0.1 环回 IP ,表示自己本机.一般可以用于测试.127* 开头的 IP 都是环回 IP .

如果某个 IP 的主机号全为 0 ,表示这个 IP 比较特殊,不能分配给某个主机.

如果某个 IP 的主机号为全 1 (二进制比特位),表示"广播地址".广播表示的是一对多的传输,这里的多指的是所有人,单播表示一对一,组播表示一对多(整体的一部分),广播表示一对多(整体所有).广播的一个典型应用场景就是:手机电脑投屏,点击投屏,手机就会在局域网中广播一个查询数据,~看哪些设备有回应,根据收到的回应,就知道 IP 为哪个的设备是能够支持投屏的.

路由选择

路由选择: 网络结构十分复杂,每个路由器都无法掌握全局信息,只能掌握一部分局部信息,此时路由器根据这些信息会给我们规划出一条路线,此为"较优解",举个例子:假如我们要从甲地前往乙地,我们找人进行问路.

1)出门,先问问 À=>坐上 336 公交车,你往南走.

2)问 B =>坐到运动公园下车,换地铁二号线.

3)问 C=>坐二号线坐到倒数第二站, 航天城.

4)问 D =>沿着这条街往南走走到下一个路口,一直往西走,走两条街左右就差不多到了.

5)问 E=>E 就说了,沿着这个路口稍微往北走一点就到了.

每一次问路,都会让我们离目标更近,最终到达目的地,路由器转发数据包的过程就与之类似,摸着石头过河,数据报中包含的"目的 IP "字段就是要问路的目标,每个路由器都对于网络环境以及他们相邻的设备情况有一些了解(路由器内部的存在一个数据结构--路由表,路由表中存在:目的 IP 网段,对应的网络接口,特殊的表项,更上层的路由器等等),此时,就可以根据他的了解告诉我们下一步往哪走.

三. 数据链路层(以太网): MAC地址

数据链路层引入了另一套地址体系,称为 "mac地址" / 物理地址, mac 和 IP 是两套独立的地址体系, IP 地址侧重于全局的转发,从起点到终点这整个转发过程,通过 IP 地址负责完成(查询路由表,通过 IP 地址), MAC 地址侧重于局部的转发,两个相邻设备之间的转发,一个电脑上连一个路由器,这就是相邻设备,一般开发中, MAC 地址用的比较少,而 IP 地址用的比较多, MAC 地址按照16进制的方式来表示,字节之间通过 - 来分割.

MAC 地址表示的范围比 IPv4 大得多,当前 MAC 地址和主机网卡一对一绑定. IP 地址很多时候是动态分配的,而 MAC 地址则是静态分配,网卡刚出的时候, MAC 地址就已经写死了,由于 MAC 地址有这样的特性,通常就会将 MAC 地址来作为你机器的身份识别.例如某些外挂只能在某个设备使用,其实就是根据 MAC 地址来进行绑定的.

1.西安->北京
源IP 西安, 目的IP 安广;
源mac 西安,目的mac 北京;

2.北京->长春
源IP 西安, 目的IP 安广;
源mac 北京,目的mac 长春;

3.长春->白城
源IP 西安, 目的IP 安广;
源mac 长春,目的mac 白城:

4.白城->安广
源IP 西安, 目的IP安广;
源mac 白城,目的mac 安广;

这两套地址体系,我们如果将他们合并成一套,分别在两个报头中使用,也是可以的.

四. 域名解析系统

域名,一串可读性更好的单词,域名解析系统可以将域名转换成对应的 IP 地址,再根据 IP 地址来找寻网络设备的位置.例如,阿b的域名就是:

在很早之前,引入了一个 hosts 文件,内部的内容就是行文本,每一行都有 IP 和 域名 ,每次访问某个域名都会进行查询,找到对应的 IP ,当今, hosts 文件仍然是有效的,只不过一般情况为空,因为随着互联网的发展,域名和服务器越来越多了,维护 hosts 文件变得十分麻烦,于是就有人搭建了一组服务器,来提供域名解析服务,hosts的内容就储存到服务器当中了,当某个主机需要访问某个域名,就可以先查询一下 域名解析服务器 (DNS 服务器),查询到的结果就是域名对应的 IP ,根据 IP 进行访问即可.

但是,全世界这么多人在上网,大家都去访问 DNS ,服务器能否抗住如此大的的请求量呢?

DNS服务器并非只有一份,而是有很多份,最开始的这一套 DNS服务器 ,我们称为 根域名服务器 ,这里面的内容是最全的,各个国家的网络运营商再根据根域名服务器的内容,搭建出"镜像服务器",网民上网时,一般就是访问附近运营商搭建的镜像DNS服务器.

搭建域名服务器时,还会根据域名进行分级管理,一级域名,二级域名,三级域名......这样就可以确保每个服务器管理的数据都不多.

相关文章:

[Java EE] IP 协议 | NAT 机制 | 路由选择 | MAC 地址 | 域名解析服务

Author:MTingle major:人工智能 Build your hopes like a tower! 目录 一. 初识 IP 协议 IP 协议报头: 二. IP 协议如何管理地址 NAT机制 路由选择 三. 数据链路层(以太网): MAC地址 四. 域名解析系统 一. 初识 IP 协议 IP 协议工作在网络层,其目标是为了在复…...

赋能特大城市水务数据安全高速运算,深圳计算科学研究院YashanDB数据库系统斩获“鼎新杯”二等奖

第三届“鼎新杯”数字化转型应用优秀案例评选结果日前正式公布,深圳计算科学研究院联合深圳市环境水务集团有限公司申报的《深圳环境水务国产数据库YashanDB,赋能特大城市水务数据安全高速运转》案例,经过5个多月的评审,从4000申报…...

RAYDATA链接PGSQL做图表

1.拖一个脚本进去 2.拖一个柱状图进去 3.双击脚本写代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Ventuz.Kernel; using Npgsql; using System.Threading; using System.Threading.Tasks;public class Script…...

UE5里的TObjectPtr TSharedPtr TWeakPtr有什么区别

在 Unreal Engine(UE)编程中,TObjectPtr、TSharedPtr 和 TWeakPtr 都是 指针类型,但它们在生命周期管理和使用场景上有不同的特点。让我们详细分析这些指针的区别和用途。 TObjectPtr TObjectPtr 是 UE5 中引入的新智能指针类型…...

前端--深入理解HTTP协议

HTTP 协议简介 HTTP(HyperText Transfer Protocol,超文本传输协议)是一个应用层协议,用于在客户端(通常是浏览器)和服务器之间传输超文本数据(如 HTML、CSS、JavaScript 等)。它是万…...

线性代数 向量

一、定义 几何定义:向量是一个有方向和大小的量,通常用箭头表示。向量的起点称为原点,终点称为向量的端点。 代数定义:向量是一个有序的数组,通常表示为列向量或行向量。 行向量就是 1*n的形式(行展开&…...

go中阶乘实现时递归及迭代方式的比较

package mainimport ("fmt""time""math/big" )// 使用递归和 big.Int 计算阶乘 func FactorialRecursive(n *big.Int) *big.Int {if n.Cmp(big.NewInt(0)) 0 {return big.NewInt(1)}return new(big.Int).Mul(n, FactorialRecursive(new(big.Int…...

Jupyter notebook中更改字体大小

文章目录 方法一:局部修改方法二:全局修改 Jupyter notebook提供了一个非常方便的跨平台交互代码编译环境,但是单元格的内的代码字体往往显示较小,不利于观看。本人查了很多方法来调整字体,后来发现既不需要更改jupyte…...

关于Ubuntu服务器的时间同步设置以及Linux什么时候开始使用swap虚拟内存

一、关于Ubuntu服务器的时间同步设置 首先我们检查一下服务器的时区设置和当前时间值,获取/etc/timezone 配置以及使用date命令查看当前时间。 rootiZ2ze7n2ynw18p6bs92fziZ:~# cat /etc/timezone Asia/Shanghai rootiZ2ze7n2ynw18p6bs92fziZ:~# date Wed Dec 21 …...

Java Stream API 详解

Java Stream API 详解 1. 什么是 Stream API? Stream API 是 Java 8 引入的一种用于处理集合(如数组、列表)的强大工具。它提供了一种声明性方式处理数据,可以简化代码并提高可读性。Stream 不是数据结构,它只是一种…...

一文了解大模型中的SDK和API

大白话聊SDK和API-知乎 1.智谱AI的SDK和API 以智谱AI为例,智谱AI的SDK是名为zhipuai的Python包,其中包含了用于访问API的接口(如api-key)。在这个框架中,API是SDK的一部分,用于实现与智谱AI服务的交互。 …...

element plus的el-select分页

摘要&#xff1a; el-select的数据比较多的时候&#xff0c;必须要分页&#xff0c;处理方案有全部数据回来&#xff0c;或者添加搜索功能&#xff0c;但是就有个问题就是编辑的时候回显问题&#xff0c;必须要保证select的数据有对应的id与name匹配回显&#xff01; <el-fo…...

STM32CubeMX【串口收发USART】

第一步&#xff0c;配置cubemx 配置好点右上角生成 第二步&#xff0c;串口方式 阻塞式发送 英文、中文正常、浮点有口 /* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();//配置完自动生成的 发送到串口助手上 while (1){/* USER CODE…...

【学术会议投稿】Java Web开发实战:从零到一构建动态网站

【会后3-4个月检索|IEEE出版】第五届人工智能与计算机工程国际学术会议&#xff08;ICAICE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a; https://ais.cn/u/nuyAF3 目录 引言 一、Java Web开发基础 1. Java Web开发简介 2. 开发环境搭建 …...

[Unity]内存优化

参考&#xff1a; Unity 内存优化 | 新诸子Unity内存优化&#xff08;来自uwa&#xff09; - weigang - 博客园Unity游戏内存优化——以TileMatch为例https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/OptimizationMemory.mdunity内存…...

FreeRTOS工程创建,创建多任务程序,基于汇编对ARM架构的简单理解

FreeRTOS工程创建 下载STM32CubeMX尽量找网盘下载&#xff08;只是建议&#xff0c;没有说官网不行&#xff09; 1.创建 STM32CubeMX 工程 &#xff08;1&#xff09;双击运行 STM32CubeMX&#xff0c;在首页面选择“Access to MCU Selector”&#xff0c;如下图所示&#xff1…...

C++STL--------list

文章目录 一、list链表的使用1、迭代器2、头插、头删3、insert任意位置插入4、erase任意位置删除5、push_back 和 pop_back()6、emplace_back尾插7、swap交换链表8、reverse逆置9、merge归并10、unique去重11、remove删除指定的值12、splice把一个链表的结点转移个另一个链表13…...

M1 Mac打开Jupyter notebook

当我成功安装了Jupyter之后&#xff0c;发现无法通过 jupyter notebook 开始工作。 最初的问题是 zsh command not found 该问题是个路径问题&#xff0c;通过添加PATH环境变量就行了&#xff0c;设置环境变量时需要注意&#xff0c;zshrc和bash_profile中都可以设置&…...

docker 仓库之harbor详解

Harbor 是一个开源的企业级容器镜像仓库&#xff0c;由 VMware 提供。它基于 Docker 分布式应用程序框架构建&#xff0c;旨在解决企业对容器镜像存储、安全性和可管理性的需求。Harbor 提供了丰富的功能&#xff0c;包括用户权限管理、镜像复制、审计日志、漏洞扫描等&#xf…...

【环境变量】windons的Path

在 Windows 操作系统中&#xff0c;“Path” 是一个重要的环境变量&#xff0c;它定义了操作系统在执行命令时搜索可执行文件的目录。简而言之&#xff0c;当你在命令行&#xff08;例如 cmd 或 PowerShell&#xff09;中输入一个命令时&#xff0c;Windows 会查看 “Path” 环…...

go语言里的切片

package mainimport "fmt"func main() {// 创建一个长度为3&#xff0c;容量为5的整数切片var numbers make([]int, 3, 8)// 打印初始状态printSlice(numbers) // 输出: len3 cap5 slice[0 0 0]// 向切片添加元素numbers append(numbers, 1, 2)// 再次打印&#xf…...

革新你的智能体验:AIStarter 3.1.1正式版现已上线【安全认证】ai应用市场,数字人,ai绘画,ai视频,大模型,工作流因有尽有

在这个日新月异的技术时代里&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的速度改变着我们的生活与工作方式。作为行业内的先锋之一&#xff0c;我们非常高兴地宣布&#xff1a;经过团队不懈努力以及严格的测试与优化后&#xff0c;AIStarter 3.1.1新版现已震撼…...

【练习17】数组中的最长连续子序列

数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 题目分析&#xff1a;排序双指针 排序后&#xff0c;判断是否连续&#xff1a;后一个数-前一个数1 排序后&#xff0c;判断是否重复&#xff1a;后一个数-前一个数0 public class Solution {public int MLS (int[] arr)…...

2024 最适合 Web 开发者的 9 款 Chrome 扩展

随着 2024 年的进展&#xff0c;Chrome 扩展程序已成为 Web 开发人员工具包中不可或缺的一部分&#xff0c;在浏览器中提供强大的功能。在这篇文章中&#xff0c;我们将探讨今年在 Web 开发社区掀起波澜的 9 大 Chrome 扩展程序。 1.Lighthouse https://chromewebstore.google…...

React综合指南(二)

https://activity.csdn.net/creatActivity?id10787 #1024程序员节&#xff5c;征文# 21、 React中的状态是什么&#xff1f;它是如何使用的&#xff1f;&#xff1f; 状态是 React 组件的核心&#xff0c;是数据的来源&#xff0c;必须尽可能简单。基本上状态是确定组件呈现…...

XML\XXE漏洞基本原理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理XXE漏洞的相应信息 XML与XXE漏洞 这个东西有许多叫法&#xff0c;XML漏洞与XXE漏洞差不多都是一个东西。 这个漏洞是出现在XMl上的&#xff0c;然后可以叫他XXE注入漏洞。 XML简介 XML是一种数据的传输…...

uniapp小程序自定义聚合点

注&#xff1a; 1.默认的聚合点可以点击自动展示子级点位&#xff0c;但是自定义的聚合点在ios上无法触发markerClusterClick的监听&#xff0c;至今未解决&#xff0c;不知啥原因 2.ios和安卓展示的点位样式还有有差别 源码附上 <template><view class"marke…...

Spring Boot在线考试系统:JavaWeb技术的应用案例

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

Linux在服务器多节点下面如何快速查找日志

背景&#xff1a;最近在查找一个核心服务的后台日志&#xff0c;发现竟然部署了十几个节点&#xff0c;而且没使用ELK来做日志处理&#xff0c;所以查找日志非常不方便&#xff0c;不可能一个服务节点一个服务地找&#xff0c;所以通过同事间互相沟通找到一个方法&#xff0c;通…...

模数转换ADC0804的应用

【实验目的】 学习如何用单片机控制ADC0804芯片进行数模转换&#xff0c;掌握数码管动态扫描显示的原理。 【实验现象】 拧动AD旁边的电位器&#xff0c;会在数码管的前三位显示0-255之间的数值。 【实验说明】 动态扫描&#xff1a;就六位数码管显示123456举例说明如下&#x…...