深入理解DNS、ICMP协议与NAT技术:网络世界的三大基石

server/2024/9/20 1:14:31/ 标签: 网络, 网络协议

小白苦学IT的博客主页⭐


 

初学者必看:Linux操作系统入门⭐


 

代码仓库:Linux代码仓库⭐


 

❤关注我一起讨论和学习Linux系统❤

前言

网络世界中,数据的传输和交互离不开各种协议和技术的支持。其中,DNS(域名系统)、ICMP(Internet控制消息协议)和NAT(网络地址转换)技术无疑是构建现代互联网基础设施的三大基石。它们各自扮演着不同的角色,共同确保了网络的高效、安全和稳定。

DNS,作为互联网的“电话簿”,负责将我们熟悉的域名(如www.example.com)转换为计算机能够理解的IP地址。没有DNS,我们将无法轻松访问互联网上的各种资源。

ICMP,则是一个用于在IP主机、路由器之间传递控制消息的网络层协议。它允许主机或路由器报告错误情况,并可以通过ping命令等工具来测试网络的连通性。ICMP协议的存在,使得我们能够及时发现和解决网络问题。

NAT技术,则是一种在IP地址日益紧张的背景下诞生的解决方案。它允许一个私有IP地址的网络通过少量的公有IP地址访问外部网络。NAT技术不仅解决了IP地址不足的问题,还提高了网络的安全性和灵活性。

在本文中,我们将深入探讨DNS、ICMP协议和NAT技术的原理、工作机制以及在实际应用中的场景。希望通过这篇博客,读者能够对这些重要的网络协议和技术有更深入的理解,从而更好地应对网络世界中的各种挑战。

DNS

DNS(Domain Name System)是域名系统,它是互联网中用于将人类可读的域名(如www.example.com)转换为计算机可读的IP地址的系统。DNS是互联网基础设施的重要组成部分,它使得人们无需记忆复杂的数字IP地址,而是可以通过容易记忆的域名来访问网站和服务。DNS是一整套从域名映射到IP的系统。

DNS的工作原理基于一个分层的域名空间,这个空间由各种不同类型的DNS记录组成,包括A记录(将域名映射到IPv4地址)、AAAA记录(将域名映射到IPv6地址)、CNAME记录(将域名映射到另一个域名)、MX记录(指定用于接收电子邮件的服务器)等。

当用户尝试访问一个域名时,其设备上的DNS解析器会向DNS服务器发送一个查询请求。DNS服务器会递归或迭代地查询整个DNS层次结构,直到找到与该域名对应的IP地址。一旦找到,DNS服务器就会将IP地址返回给用户的设备,然后用户的设备就可以使用该IP地址来访问目标网站或服务了。

DNS系统还提供了负载均衡、故障转移和安全性等高级功能。例如,通过使用多个A记录将同一个域名映射到多个IP地址,可以实现负载均衡,从而改善网站的性能和可用性。此外,DNS系统还可以使用安全协议(如DNSSEC)来防止域名劫持和其他形式的网络攻击。

DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.
于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系.

最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。

  • 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网.

这样就太麻烦了, 于是产生了DNS系统.

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系.
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.

至今, 我们的计算机上仍然保留了hosts文件. 在域名解析的过程中仍然会优先查找hosts文件的内容.

cat /etc/hosts

域名简介

域名(Domain Name)是互联网上用于标识和定位计算机或计算机组的名称,是互联网上的重要标识。它就像互联网上的门牌号码,通过域名,我们可以方便地访问和定位到互联网上的资源。

1. 域名的组成

域名通常由多个部分组成,通过点号(.)分隔。最右边的部分称为顶级域名(TLD,Top-Level Domain),如常见的.com、.net、.org等。再往左是二级域名,再往左是三级域名,以此类推。例如,在“http://www.example.com”这个域名中,“www”是主机名,“example”是二级域名,“com”是顶级域名。

2. 域名的用途

域名的主要用途是为互联网上的计算机或计算机组提供一个容易记忆和识别的名称。通过域名,用户可以轻松地访问和定位到互联网上的各种资源,如网站、电子邮件、文件传输等。同时,域名也是企业在互联网上的重要标识,有助于提升企业的品牌形象和知名度。

3. 域名的注册与管理

域名的注册和管理通常由域名注册机构(如ICANN)授权的域名注册商负责。用户可以通过域名注册商来注册自己需要的域名,并支付一定的费用。一旦域名注册成功,用户就可以使用该域名来搭建网站、设置电子邮件等。同时,用户也需要遵守相关的域名管理规定,如不得使用违法、违规的域名等。

4. 域名的重要性

在互联网时代,域名的重要性不言而喻。一个易于记忆、具有品牌特色的域名不仅可以提高用户的访问体验,还可以增加企业的曝光率和知名度。因此,很多企业和个人都会花费大量的时间和精力来挑选和注册自己满意的域名。同时,随着互联网的不断发展,域名的价值也在不断提升,成为了一种重要的互联网资产。

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.

www.baidu.com

  • com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
  • baidu: 二级域名, 公司名.
  • www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议.

ICMP协议

ICMP协议是一个 网络层协议
一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因.

ICMP功能

ICMP正是提供这种功能的协议; ICMP主要功能包括:

确认IP包是否成功到达目标地址.
通知在发送过程中IP包被丢弃的原因.
ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

ICMP的报文格式

ICMP大概分为两类报文:

  • 一类是通知出错原因
  • 一类是用于诊断查询

注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址.
ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).
ping命令会先发送一个 ICMP Echo Request给对端;
对端接收到之后, 会返回一个ICMP Echo Reply; 

NAT技术

NAT技术全称为网络地址转换(Network Address Translation),是一种在计算机网络中广泛应用的技术。它的主要作用是将内部网络的私有IP地址转换为公共IP地址,从而实现内部网络和外部网络之间的通信。

NAT技术的基本原理是,通过一个或多个NAT设备,将内部网络的私有IP地址转换为公共IP地址,从而使内部网络中的计算机能够与外部网络进行通信。NAT技术被广泛应用于现代计算机网络中,提供了一种有效管理和利用IP地址的方法。

NAT技术的实现方式主要有三种:静态转换(Static NAT)、动态转换(Dynamic NAT)和端口多路复用(OverLoad)。静态转换是指内部本地地址一对一转换成内部全局地址,相当于内部本地的每一台PC都绑定了一个全局地址。动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。端口多路复用(Port Address Translation, PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换。采用端口多路复用方式,内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。

NAT技术不仅可以解决IP地址不足的问题,还可以有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。同时,NAT技术还具有节省合法的注册地址、在地址重叠时提供解决方案、提高连接到因特网的灵活性、在网络发生变化时避免重新编址等优点。然而,NAT技术也存在一些缺点,如地址转换将增加交换延迟、导致无法进行端到端IP跟踪、导致有些应用程序无法正常运行等。

NAT技术背景

之前我们讨论了, IPv4协议中, IP地址数量不充足的问题,NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能;

  • NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
  • 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

NAT IP转换过程

  • AT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
  • NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
  • 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;

NAPT

那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

  • 无法从NAT外部向内部服务器建立连接;
  • 装换表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;

NAT和代理服务器

路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.


代理服务器看起来和NAT设备有一点像. 客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端.


代理服务器是一个网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,并对转发进行控制和登记。它可用于连接Internet与Intranet,在实际应用中发挥着极其重要的作用,除了基本的连接功能,还具备安全性、缓存、内容过滤、访问控制管理等功能。

那么NAT和代理服务器的区别有哪些呢?

  • 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
  • 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
  • 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.
  • 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

代理服务器又分为正向代理和反向代理.

现在,通过一个简单的故事来解释正向代理和反向代理的概念。

正向代理的故事

假设小明想要购买一本国外的专业书籍,但是这本书在国内的书店买不到。于是,小明找到了一个可以帮他从国外购买并邮寄到国内的代购者小李。在这个故事中,小明是客户端,代购者小李就是正向代理服务器,而国外的书店则是目标服务器。

小明向小李(正向代理)发出购书请求,小李接收到请求后,代替小明去国外的书店(目标服务器)购买书籍。书店将书寄给小李,然后小李再将书转交给小明。整个过程中,书店并不知道真正的购书者是小明,只知道是小李来购买。这就是正向代理的工作方式,它隐藏了客户端的真实身份,提供了更高的隐私和安全性。

反向代理的故事

假设有一家大型图书馆(目标服务器),里面收藏了很多珍贵的书籍。但是,由于图书馆太大,读者很难找到自己想要的书籍。于是,图书馆在门口设置了一个咨询台(反向代理服务器),咨询台的工作人员可以帮助读者快速找到他们想要的书籍。

在这个故事中,读者是客户端,咨询台是反向代理服务器,而图书馆则是目标服务器。当读者想要找书时,他们首先会询问咨询台(反向代理)。咨询台的工作人员会根据读者的需求,去图书馆里找到对应的书籍,并将其交给读者。整个过程中,读者并不需要知道书籍具体存放在图书馆的哪个位置,只需要通过咨询台(反向代理)就可以轻松找到自己想要的书籍。这就是反向代理的工作方式,它简化了客户端的访问过程,并提供了负载均衡、缓存等功能,从而提高了访问效率和安全性。


http://www.ppmy.cn/server/38884.html

相关文章

Python创建可点击网页

继完成静态网页后,引入java script制作动态交互网页,交互逻辑就两个按钮,用于学习网页编程。 from flask import Flask, render_template_string, jsonify, requestapp Flask(__name__)app.route(/) def index():# 使用内联模板渲染一个简单…

游戏辅助 -- 三种分析角色坐标方法(CE、xdbg、龙龙遍历工具)

所用工具下载地址: https://pan.quark.cn/s/d54e7cdc55e6 在上次课程中,我们成功获取了人物对象的基址:[[[0xd75db8]1C]28],而人物血量的地址则是基址再加上偏移量278。 接下来,我们需要执行以下步骤来进一步操作&a…

小巧简单实用的Linux端口转发工具Rinetd

Linux下实现端口转发有很多种方法,尤其是在可以联网的情况下,更是容易。最近在资源受限的定制系统中,找到一个方便离线安装和使用的端口转发工具Rinetd,安装包仅几十K,而且有很多版本的Linux发行系统的支持。 1、安装…

kubectl_入门_service详解

Service 我们知道 Pod 的生命周期是有限的。可以用 ReplicaSet 和Deployment 来动态的创建和销毁 Pod,每个 Pod 都有自己的 IP 地址,但是如果 Pod 重建了的话那么他的 IP 很有可能也就变化了。 这就会带来一个问题:比如我们有一些后端的 Po…

Remix框架实现 SSR

SSR SSR是一种网页渲染方式,它与传统的客户端渲染(CSR)相对,在日常的项目中我们更多是使用 CSR 的方式进行前端分离开发,渲染会在浏览器端进行。然而在SSR中,当用户请求一个网页时,服务器将生成…

Unity EventSystem入门

概述 相信在学习Unity中,一定有被UI事件困扰的时候把,当添加UICanvas的时候,Unity会为我们自动添加EventSystem,这个是为什么呢,Unity的UI事件是如何处理的呢,在使用各个UI组件的时候,一定有不…

QT外部库:zlib

前言 新建项目:pro文件中新增代码 LIBS -lz 在main.cpp函数中#include "zlib.h",如果此时运行代码提示没有找到对应的函数,那么就qt安装目录:D:\C\qt5.12.7\Tools\mingw730_64\x86_64-w64-mingw32\include(这里是博主…

ThreeJS:光线投射与3D场景交互

光线投射Raycaster 光线投射详细介绍可参考:https://en.wikipedia.org/wiki/Ray_casting, ThreeJS中,提供了Raycaster类,用于进行鼠标拾取,即:当三维场景中鼠标移动时,利用光线投射,…

每日OJ题_贪心算法三⑦_力扣991. 坏了的计算器

目录 力扣991. 坏了的计算器 解析代码 力扣991. 坏了的计算器 991. 坏了的计算器 难度 中等 在显示着数字 startValue 的坏计算器上,我们可以执行以下两种操作: 双倍(Double):将显示屏上的数字乘 2;递…

STM32使用L9110驱动电机自制小风扇

1.1 介绍: 该电机控制模块采用L9110电机控制芯片。该芯片具有两个TTL/CMOS兼容输入端子,并具有抗干扰特性:具有高电流驱动能力,两个输出端子可直接驱动直流电机,每个输出端口可提供750800mA动态电流,其峰值…

2024-05-08 postgres-查询树Query-分析

摘要: pg的词法分析和语法分析使用的技术与mysql相同,此法分析使用bison,语法分析使用了flex。之后ANSI SQL句子被转换为查询树。 Query 结构体保存了文本类型的 SQL,经过语法分析后的分析结果,Query 结构体的成员与 SOL语句的各个子句基本…

JavaScript手写专题——图片懒加载、滚动节流、防抖手写

图片懒加载场景:在一些图片量比较大的网站(比如电商网站首页,或者团购网站、小游戏首页等),如果我们尝试在用户打开页面的时候,就把所有的图片资源加载完毕,那么很可能会造成白屏、卡顿等现象&a…

Eigen中的刚体变换表达

在Eigen中,旋转矩阵、变换矩阵、欧拉角都可以表示为Eigen库中的特定类型的矩阵。 1、旋转矩阵 旋转矩阵通常用于表示三维空间中的旋转操作。在Eigen中,可以使用Eigen::Matrix3d类型来表示三维的旋转矩阵。通常,旋转矩阵是一个正交矩阵&…

【CTF-Crypto工具】Ciphey安装教程(Window+Kali存在多版本python)

嘿,这里是目录! 0. 前言1. window10环境安装ciphey【简单一点】1.1 检查环境1.2 我的环境1.3 安装[^2][^3]1.4 头铁的报错 2. vmware虚拟机,kali2024.1(自带python2.7和python3.11)【复杂亿些】2.1 检查环境2.2 我的环…

CSS和JavaScript

CSS 在html中引入CSS 我们需要先在该项目先建立css文件 html引入CSS,在<head></head>中添加<link>标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" co…

单例模式析构时持久化

#include <iostream> #include <fstream> class Singleton { private: // 私有构造函数和拷贝构造函数/赋值运算符&#xff0c;确保单例 Singleton() { // 构造函数中的初始化代码 std::cout << "Singleton created\n"; } ~Singleton()…

php之鸡肋的goto应用

php之goto代码应用 看起来高大上、用得好可以提升代码可读性、使代码看起来更加优雅 示例代码: dump(a);goto WORK;dump(b);//绕过执行goto WORK2;//绕过执行WORK:dump(c);WORK2:dump(d);FINISH:dump(e); //输出结果是a,c,d,e通过示例代码可以窥探goto的代码运行机制 此处的d…

视频降噪算法 hqdn3d 原理分析

视频降噪 视频降噪是一种处理技术&#xff0c;旨在减少视频中的噪声&#xff0c;提高画面质量。噪声可能来自多种源头&#xff0c;包括摄像机的传感器、压缩算法、传输过程中的干扰等。降噪处理对于视频监控、视频会议、电影后期制作以及任何需要高画质输出的应用场景都非常重…

Web API之DOM

DOM 一.认识DOM二.获取元素三.事件基础四.操作元素(1).改变元素内容(2).修改元素属性(str、herf、id、alt、title&#xff09;(3).修改表单属性(4).修改样式属性操作(5).小结 五.一些思想(1).排他思想(2).自定义属性的操作 六.节点操作1.认识2.节点层级关系3.创建和添加、删除、…

Google Pixel4手机刷机+Root+逆向环境详细教程

Google Pixel4手机刷机Root逆向环境配置详细教程 刷机工具下载 Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magis…