DNS、ICMP、NAT以及代理服务器

news2024/11/23 22:34:01

目录

1. DNS

1.1. DNS 背景

1.2. 域名简介

1.3. 域名解析过程

2. ICMP

2.1. ICMP 的功能

2.2. ICMP 的报文格式

2.3. ping  命令

2.4. traceroute 命令

3. NAT和代理服务器

3.1. NAT 技术

3.2. NAT IP转换过程 

3.3. NAT 技术的缺陷

3.4. 代理服务器

3.4.1. 正向代理服务器

3.4.2. 反向代理服务器

3.4.3. 正向代理服务器和反向代理服务器的异同

3.4.4. NAT 和 反向代理服务器的区别

4. 网络总结


1. DNS

DNS 全称 Domain Name System,域名系统,其是一个分层的分布式数据库系统,用于将域名解析为相应的IP地址。

1.1. DNS 背景

TCP/IP 中使用IP地址和端口号来标定全网中的特定主机和该主机上特定的进程,但是由于点分十进制的IP地址是不太方便人们记忆的,于是人们发明了一个主机名的东西,本质上就是一个字符串,并且使用 hosts 文件来保存主机名和IP地址的映射关系。

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

  • 当一个新的主机要接入网络,或者某个主机的IP变更,都需要到信息中心申请变更 hosts 文件;
  • 其他主机也要定期更新 hosts 文件才能正确上网。

可是这样太繁琐了,于是诞生了DNS系统。

  • DNS 是一个网络服务,是由特定组织维护的,DNS其中保存了每个主机的IP和主机名的映射关系;
  • 如果有新主机要接入网络,就需要将这个主机的IP和相应的域名注册到数据库中;
  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。

直到现在,用户的计算机仍然保留了 hosts 文件,在域名解析的过程中仍然会有先查找 hosts 文件的内容。

hosts 文件在 etc/ 目录下:

[Xq@again 2024_5]$ cat /etc/hosts
::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6
127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4

172.29.4.55	iZf8zehlq3f9xxevwxuqp2Z	iZf8zehlq3f9xxevwxuqp2Z

1.2. 域名简介

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

如 www.xxx.com,域名使用 . 连接:

  • www: 是一种习惯用法 (可以省略 ),之前人们在使用域名时,往往命名成类似于 ftp.xxx.xxx / www.xxx.xxx 这样的格式,来表示主机支持的协议;
  • xxx: 二级域名,一般是公司或者组织的名称;
  • com:一级域名,表示这是一个企业域名,同级的还有 "net" (网络提供商)、"org" (非营利组织)、"edu" (教育机构) 等等。

1.3. 域名解析过程

在域名解析过程中,当用户在浏览器中输入一个域名时,操作系统会发送查询到本地DNS解析器。本地解析器会首先查找自身的缓存,如果有对应的IP地址则直接返回给用户;如果没有,则向根DNS服务器发起查询。根DNS服务器会返回顶级域名服务器的IP地址,然后本地解析器继续向顶级域名服务器查询,直到找到目标域名的IP地址,并返回给用户。整个过程可能会经过多次查询和转发,直到最终获取到目标域名的IP地址为止,这样用户就可以通过域名访问相应的服务或网站。

2. ICMP

ICMP 是一个网络层协议,在TCP/IP四层协议栈中的位置:

可以看到,ICMP和IGMP属于网络层协议,但是它们两都在IP协议的上层,而我们以前学习过数据链路层,知道 ARP 和 RARP 协议也属于数据链路层,但是它们两在MAC帧的上层。

2.1. ICMP 的功能

  • 确认IP数据报是否成功到达目标主机;
  • 通知在发送过程中IP数据报被丢弃的原因;
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要用ICMPv6。

比如: 

主机A要将数据跨网络传输给主机B,因此,需要将数据通过路由器一跳一跳的将数据路由到目标主机,假设已经到达主机B所在的网络 (目标网络) 的入口路由器 (路由器c),由于此时只知道主机B的IP地址,而不知道主机B的MAC地址 (无法构成MAC数据帧 (有效载荷是IP数据报)),故路由器c向当前网段广播发送MAC数据帧 (数据帧的有效载荷是 ARP 请求报文),但由于主机B已经关机,无法对ARP请求做出响应,因此,当路由器c多次发送ARP请求报文没有得到响应时,此时路由器c就会构建一个 Destination Unreachable 的 ICMP 响应返回给主机A,此时主机A就知道数据无法发送给主机B,即目标不可达。

2.2. ICMP 的报文格式

ICMP 大概分为两类报文:

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

ICMP的常见类型如下:

       类型 (十进制数)                                                   内              容
                0                回送应答 ( Echo Reply )
                3                目标不可达 ( Destination Unreachable )
                4                原点抑制 ( Source Quench )
                5                重定向或改变路由 ( Redirect )
                8                回送请求 ( Echo Request )
                9                路由器公告 ( Router Advertisement )
                10                路由器请求 ( Router Solicitation )
                11                超时 ( Time Exceeded )
                17                地址子网请求 ( Address Mask Request )
                18                地址子网应答 ( Address Mask Reply )

2.3. ping  命令

ping 命令的底层采用的就是ICMP协议,是一个利用ICMP协议来进行网络连通性测试的工具。一般情况下,用于测试本地主机和目标主机的网络连通是否正常。具体来说:本地主机发送ICMP Echo请求消息 (Echo Request),然后等待目标主机返回Echo回应消息 (Echo Reply) 来判断主机间的网络连接状态。

比如: 

不过需要注意的是:

  • 此处 ping 的是域名,而不是URL,因为域名可以通过DNS获得IP地址,所以这里本质上还是在 ping IP地址 (目的IP);
  • 同时,ping 命令不光能检测网络的连通性,同时也会统计响应时间和TTL (IP报头的 Time To Live,IP数据报的生命周期);
  • ping 命令会向目标主机发送一个 ICMP Request;
  • 目标主机收到后,会返回一个 ICMP Reply。

如图所示:

一个小细节:有人会问一个问题,telnet 是23号端口,ssh 是22号端口,那么 ping 是什么端口呢?

因为 ping 命令是基于ICMP协议的,而ICMP协议归属于网络层 (IP的上层,传输层下面),而端口号是传输层的内容,在网络层不关心端口号这样的信息,换言之,ICMP 根本就不关心端口号;

2.4. traceroute 命令

traceroute 命令也是基于ICMP协议实现的,能够打印出本地主机到目标主机之前经历的路由器,如下:

traceroute 命令的实现原理是通过发送一系列的UDP数据报到目标主机,每个数据报将在网络中经过不同的路由器。每个数据报的TTL(Time to Live)字段会被设置为不同的值,从而在每一跳路由器上会减少该值,如果TTL值减至0,则路由器会丢弃该数据报并发送一个ICMP时间超时消息回到发送端。通过接收这些ICMP时间超时消息,traceroute命令得以确定每一跳经过的路由器,最终得到整个路由路径。

3. NAT和代理服务器

3.1. NAT 技术

NAT 技术,全称 Network Address Translation,网络地址转换,是一种网络技术,用于将私有网络内部的IP地址转换为上级网络(公共网络)可识别的IP地址。
在学习IP协议的时候,我们说过,IPv4 用32个比特位表示IP地址,其IP数量接近43亿,但在当前网络环境中,已远远不够了,因此,为了解决 IPv4 地址不足的问题,NAT 就在这样的环境中诞生了。

NAT 技术是当前网络环境中解决IP地址不足的主要手段,一般的路由器都会内置NAT功能,因此,路由器也可以称之为NAT服务器。

3.2. NAT IP转换过程 

下面我们来看看,NAT是如何转化的呢?

如下图所示:

主机A要与公网上的一台主机进行通信,主机A将数据通过路由器路由到了公网的入口路由器,此时,因为数据中的源IP是私网IP,私网IP不能出现在公网中,因此,路由器进行NAT技术,将源IP替换成当前路由器的WAN口IP,此时,源IP和目的IP都是公网IP。

服务器收到数据后,也要对数据进行响应,即要向主机A发送响应数据:

当服务器发送响应数据时,目的IP是入口路由器的WAN口IP,数据到达了NAT路由器后,路由器会将目的IP转化成当前子网中的某台主机,在NAT路由器内部,有一张自动生成的,用于地址转换的映射表,当主机A (192.168.1.199) 第一次公网服务器 (132.1553.22.3)发送数据时,就会向映射表中添加映射关系。

可是现在有一个问题,当公网中的服务器构建响应数据返回时,目的IP都是相同的,即路由器的WAN 口IP,那么此时路由器如何判定这个数据应该转发给当前子网 (192.168.1.0) 中的哪个主机呢?就如同上图一样,当数据到达路由器后,路由器怎么判定将数据转发给主机A,而不是主机B呢?

这时候就需要NATP来解决这个问题,使用 IP + Port 来建立这个映射关系。

事实上,在NAT的转换工程中,可不仅仅会替换IP地址,必要的时候,端口也会被替换;同时,除了替换工作,还会为我们根据报文请求的四元组 (源IP:源端口; 目的IP:目的端口),构建一张表,这张表是NAT转化表,用来维护它们的映射关系,如下图所示:

IP表示唯一的一台主机,端口表示该主机上唯一的一个进程,因此, 源IP + 源端口标识一个唯一的进程,进而可以在自己的内网中的唯一性。

无论从内网到外网, 还是从外网向内网,都能在各自的网络中表示唯一性, 所以,这个映射关系是:互为键值 (Key) 的。

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

而我们能理解一件事情了,不同子网的两台主机理论上是不能直接通信的,比如主机A和主机B要通信,主机A首先需要将数据发送到公网的某台主机,再通过公网的某台主机将数据返回给主机B。比如,在生活中,用户通过某个聊天软件聊天,用户首先需要登录聊天软件的客户端,通过客户端先将数据推送到服务端 (公网) ,服务端在将数据推送给其他人。

3.3. NAT 技术的缺陷

由于NAT需要依赖这张转换表,因此就有许多限制:

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

3.4. 代理服务器

代理服务器是一种位于客户端和目标服务器之间的服务器,它充当客户端和目标服务器之间的中间人,用于转发客户端的请求并获取目标服务器的响应。

代理服务器分为正向代理服务器和反向代理服务器。

3.4.1. 正向代理服务器

正向代理服务器是指位于客户端和目标服务器之间的代理服务器,用于代理客户端向目标服务器发起请求。客户端不直接与目标服务器通信,而是通过正向代理服务器转发请求,如下图所示:

在日常生活中,正向代理服务器是经常被使用的,比如学校的校园网本质上就是一个正向代理服务器,学生使用校园网时,通常需要先登录学校提供的校园网登陆网站 (当然,一般情况下,学生需要先交网费),这个动作本质上就是在正向代理服务器发起请求,校园网认证成功后 (学生的机器成功获取私网IP),学生就可以正常上网了,后序学生的所有访问都是通过学校提供的正向代理服务器向公网上的服务器发起请求,换言之,学校是可以知道学生在访问什么资源,因此,对于一些隐私内容或者敏感内容,谨慎使用校园网哦。

正向代理服务器可以帮助客户端访问被限制的内容或提高访问速度,同时也用于保护客户端的隐私,常见的使用场景包括绕过访问限制、访问跨境内容 (比如 fq) 等。正向代理服务器是网络中常见的代理方式之一,对于网络访问具有重要作用。

3.4.2. 反向代理服务器

反向代理服务器是指位于目标服务器和客户端之间的代理服务器,用于代理客户端对目标服务器的请求。客户端不直接与目标服务器通信,而是通过反向代理服务器转发请求,隐藏目标服务器的真实IP地址,如下:

通常情况下,一般大型互联网公司有自己的机房,机房中有着非常多的服务器,但是这种互联网公司对外提供的域名 (公网IP地址) 是固定的,为什么呢?

事实上,这些互联网公司对外提供的域名 (公网IP地址) 本质上是反向代理服务器的域名 (IP地址),反向代理服务器不处理客户端的请求,它只负责将客户端请求合理的分配给后台的服务器,后台服务器处理完数据后,再将响应数据返回给客户端。

反向代理服务器的好处:

  • 负载均衡:反向代理服务器可以根据一定的策略将请求分发给后台的多台服务器,从而实现负载均衡,提高整个系统的吞吐量和性能;

  • 高可用性:通过反向代理服务器,即使某台后台服务器发生故障,仍然可以将请求转发给其他健康的服务器,保证系统的可用性;

  • 安全性:反向代理服务器可以作为一个安全防火墙,屏蔽一些恶意请求和攻击,保护后台服务器的安全,提高系统的安全性;

  • 隐藏真实服务器信息:通过反向代理服务器,可以隐藏后台服务器的真实IP地址,增加系统的安全性,防止直接被攻击。

3.4.3. 正向代理服务器和反向代理服务器的异同

相同点:

正向代理服务器和反向代理服务器都是位于客户端和目标服务器之间的,都用来将客户端请求转发给目标服务器。

异同点:

  • 正向代理是代理客户端,代替客户端访问目标服务器的资源,隐藏客户端的真实IP地址;反向代理是代理目标服务器,帮助目标服务器实现负载均衡和安全防护等工作。
  • 正向代理,目标服务器认为正向代理服务器就是客户端;反向代理,客户端认为反向代理服务器就是真正的目标服务器。

3.4.4. NAT 和 反向代理服务器的区别

  • 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,而代理服务器则是更贴近具体应用,比如通过代理服务器进行fq,另外一些加速器,也是使用代理服务器;
  • 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换 (也可以替换端口号,因为当今路由器已经可以工作在传输层,甚至应用层),而代理服务器往往工作在应用层;
  • 从使用范围上讲,NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网;
  • 从部署位置上看,NAT一般集成在路由器等硬件设备上,代理服务器则是一个软件程序,需要部署在服务器上;

4. 网络总结

TCP/IP 四层协议栈如下所示:

数据链路层:

  • 数据链路层的作用:两个设备(同一种数据链路节点)之间进行转发数据;
  • 以太网帧格式;
  • 理解 MAC 地址;
  • 理解 arp 协议;
  • 理解MTU和MSS。

网络层:

  • 网络层的作用:在复杂的网络环境中确定一个合适的路径 (提供一种能力)。
  • 理解IP地址,理解IP地址和MAC地址的区别;
  • 理解IP协议格式;
  • 了解网段划分;
  • 理解如何解决IP数目不足的问题,掌握网段划分的两种方案,理解私有IP和公网IP;
  • 理解网络层的IP地址路由过程,理解一个IP数据报如何跨越网段到达最终目的地;
  • 理解IP数据报分包的原因;
  • 了解ICMP协议;
  • 了解NAT设备的工作原理。

传输层:

  • 传输层的作用:负责将数据能够从发送端传输到接收端,如果是TCP,那就可靠传输;
  • 理解端口号的概念;
  • 认识UDP协议,了解UDP协议的特点;
  • 认识TCP协议,理解TCP协议如何实现可靠性,理解TCP协议的 (连接管理过程中) 的状态转化;
  • 掌握TCP的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答等机制;
  • 理解面向字节流,理解粘包问题和解决方案;
  • 能够基于UDP实现可靠传输;
  • 理解MTU对UDP/TCP的影响,例如TCP的MSS。

应用层:

  • 应用层的作用:满足我们日常需求的网络程序,比如我们所说的业务,就是在应用层;
  • 能够根据自己的需求,设计应用层协议;
  • 了解 HTTP 和 HTTPS 协议;
  • 理解 DNS 的原理和工作流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【redis】Redis数据类型(四)Set类型

目录 Set类型介绍使用场景 Set类型数据结构set的单个元素的添加过程IntSet哈希表内存结构 常用命令SADD示例 SREM示例 SMEMBERS示例 SISMEMBER示例 SCARD示例 SMOVE示例 SPOP示例 SRANDMEMBER示例 SINTER示例 SINTERSTORE示例 SUNION示例 SUNIONSTORE示例 SDIFF示例 SDIFFSTORE…

【每日算法】理论:大模型相关 刷题:队列的应用

上期文章 【每日算法】理论:多模态系列 刷题:栈的应用 文章目录 上期文章一、上期问题二、本期理论问题1、GPT1,2,3的区别2、解决过拟合的方法3、LLM的生成原理4、对比LSTM,GRU,transformer5、zero-shot6、pre-norm和post-norm的…

vscode远程免密ssh原理与实操方法

什么是SSH SSH是一种加密协议,全称为Secure Shell,用于安全地远程登录到服务器或其他远程设备上执行命令或传输文件。它提供了一种安全的加密通信机制,使得远程登录和文件传输等操作不会被恶意攻击者窃取或篡改,确保了数据的保密…

扩展学习|本体研究进展

文献来源: 王向前,张宝隆,李慧宗.本体研究综述[J].情报杂志,2016,35(06):163-170. 一、本体的定义 本体概念被引入人工智能、知识工程等领域后被赋予了新的含义。然而不同的专家学者对本体的理解不同,所给出的定义也有所差异。 人工智能领域的学者Neches(1991)等人对…

eSIM Network搭建指南

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题,欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot).

doxygen 辅助阅读代码的神器

简介 Doxygen是一个文档生成工具,主要用于编写编程语言的软件文档。它最初是为C设计的,但后来增加了对C、C#、Java、Objective-C、Python、IDL(在某些情况下还有PHP、C#和D)的支持。Doxygen可以从一组带有文档注释的源代码文件中…

【数据结构】如何创建一棵红黑树(附动图讲解)

一、前言 二、红黑树的概念 三、红黑树的性质 四、红黑树节点的定义 五、红黑树的插入 5.1 节点的初始颜色 5.2 红黑树的调整 六、红黑树的验证 6.1 验证有序 6.2 验证红黑树性质 七、红黑树与AVL树的比较 一、前言 在前面AVL树的学习中,我们知道了如何…

golang 基础知识细节回顾

之前学习golang的速度过于快,部分内容有点囫囵吞枣的感觉,写gorm过程中有很多违反我常识的地方,我通过复习去修正了我之前认知错误和遗漏的地方。 itoa itoa自增的作用在编辑error code时候作用很大,之前编辑springboot的error c…

【Linux学习】(2)OS的简单了解|Linux的基本指令操作

前言 本文将先简单了解什么是操作系统,再讲解一些Linux的基本指令。 一、操作系统的简单了解 1、什么是操作系统(Operating System,简称OS)? OS是一款做软硬件管理的软件。软硬件的体系结构图: 硬件&…

探索高级聚类技术:使用LLM进行客户细分

在数据科学领域,客户细分是理解和分析客户群体的重要步骤。最近,我发现了一个名为“Clustering with LLM”的GitHub仓库,它由Damian Gil Gonzalez创建,专门针对这一领域提供了一些先进的聚类技术。在这篇文章中,我将概…

「 网络安全常用术语解读 」SBOM主流格式SWID详解

国际标准化组织(ISO)和国际电工委员会(International Electrotechnical Commission,IEC)发布了ISO/IEC 19770-2软件标识(Software Identification,SWID)标签标准,该标准定…

Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍

往期回顾 Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客 Qt绘图与图形视图之基本图元绘制的简单介绍-CSDN博客 Qt绘图与图形视图之自定义图元实现拖拽、拉伸、旋转功能-CSDN博客 Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍 一、基本概念 Qt模型视图代理…

前端页面平滑过渡解决方案

一、问题产生 在使用图片作为页面背景时,无法使用transtion进行平滑过渡,直接切换背景又会降低使用体验。 二、解决方式 使用clip-path对背景图片裁剪配合transtion实现平滑过渡的效果 三、效果展示 网址:ljynet.com 四、实现方式 tem…

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

32.Docker认识

Docker介绍 Docker是一个快速交付应用,运行应用的技术。 1.可以将程序、依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统。 2.运行时利用沙箱机制行程隔离容器,各个应用互不干扰。 3.启动、移除都可以通过一行命令完成&am…

算法学习系列(五十五):背包模型(三)

目录 引言一、潜水员二、背包问题求具体方案三、机器分配四、开心的今明五、金明的预算方案 引言 今天介绍的是背包模型,还是以题目的形式来介绍的。主要讲了背包问题求方案,就是由最优方案递推回去即可。还有就是一些比较经典的背包问题,其…

Spring Boot | Spring Security ( SpringBoot安全管理 )、Spring Security中 的 “自定义用户认证“

目录 : Spring Boot 安全管理 :一、Spring Security 介绍二、Spring Security 快速入门2.1 基础环境搭建 :① 创建Spring Boot 项目② 创建 html资源文件③ 编写Web控制层 2.2 开启安全管理效果测试 :④ 添加 spring-boot-starter-security 启动器⑤ 项目启动测试 三…

Windows server2016关闭ie增强

要关闭Windows Server 2016上的IE增强安全配置,请按照以下步骤操作: 打开“服务器管理器”。点击“本地服务器”。在服务器管理器中,找到“IE增强的安全配置”,点击旁边的“启用”,打开“Internet Explorer增强的安全配…

android init进程启动流程

Android系统完整的启动流程 android 系统架构图 init进程的启动流程 init进程启动服务的顺序 bool Service::Start() {// Starting a service removes it from the disabled or reset state and// immediately takes it out of the restarting state if it was in there.flags_…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(70)

1. 题目解析 题目链接:740. 删除并获得点数 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 问题分析 本题是「打家劫舍」问题的变种,但核心逻辑依然保持一致。题目要求从给定的数组nums中选择…