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

目录

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 的原理和工作流程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

界面组件DevExpress Blazor UI v23.2 - 网格、工具栏功能全新升级

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 DevExpress Blazor控件目前已经升级…

通信接口——时钟和信号

前言 所有接口只要抓住三个核心点就能分清:时钟同步和异步,时钟的来源,信号的传输方向。 一、时钟同步和异步 接口之间的交互方式存在多种形式,如果按照是否有公共时钟CLK的参与,可以分为同步传输和异步传输。 同步&…

【Gateway】网关集成Knife4j—swagger接口文档

文章目录 前言一、相关配置1.网关gateway配置①.网关增加配置 pom文件②.网关增加配置 SwaggerHandler③.网关增加配置 SwaggerResourceConfig④.网关增加配置 SwaggerConfig 2.网关过滤器 二、接口文档使用1.访问文档2.查看文档 总结 前言 在日常开发中是需要前后端联调的&am…

Liunx磁盘管理(上)

Liunx磁盘管理(中)-CSDN博客 目录 一.硬盘类型 机械硬盘(HDD) 固态硬盘(SSD) 二.插拔方式 1. 热插拔(Hot Swapping) 2. 冷插拔(Cold Swapping) 3. 模块…

C++仿函数周边及包装器

我最近开了几个专栏,诚信互三! > |||《算法专栏》::刷题教程来自网站《代码随想录》。||| > |||《C专栏》::记录我学习C的经历,看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

FileCodeBox-Lite:轻量级文件分享解决方案

在数字时代,文件分享是一个常见的需求,无论是个人用户还是企业团队。FileCodeBox-Lite提供了一个简单、高效且安全的文件分享解决方案。以下是对FileCodeBox-Lite项目的详细介绍。 项目简介 FileCodeBox-Lite是一个轻量级的文件分享系统,…

机器学习-06-聚类算法总结

聚类总结 1.聚类 机器学习 任务 聚类 无label的 分类 label是离散的 回归 label是连续的 2.聚类算法-kmeans 划分聚类 思想: D中选取k个作为初始质心 repeat 计算所有点与质心的距离,分到近的质心簇 更新簇之间的质心 until 质心不改 不足&#xff…

AI新篇章:全面解读ChatGPT3.5与GPT4.0的革命性融合

MidTool(kk.zlrxjh.top),一个集成了多种先进人工智能技术的助手,融合了ChatGPT3.5、GPT4.0、DALLE 3和Midjourney等多个智能服务,提供多功能体验。下面是对这些技术的简要概述: **ChatGPT3.5**:…

dockerfile 搭建lamp 实验模拟

一 实验目的 二 实验 环境 1, 实验环境 192.168.217.88一台机器安装docker 并做mysql nginx php 三台容器 2, 大致框架 3, php php:Nginx服务器不能处理动态页面,需要由 Nginx 把动态请求交给 php-fpm 进程进行解析 php有三…

LeetCode 131 —— 分割回文串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先,按照 LeetCode 5——最长回文子串 中的思路,我们先求出 d p dp dp,这样我们就知道了所有的子串是否是回文子串。 然后,我们进行一个 dfs 搜索,起…

Linux用户权限管理与文件权限设定

一、相关概念 1、用户与角色分类 超级用户:拥有对系统的最高管理权限,默认是root用户。 普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如www用户、ftp用户等。 虚拟用户:也叫“…

JavaScript+B/S版云LIS系统源码ASP.NET CORE 3.1 MVC云LIS系统如何实现样本追踪的预警功能?医院云LIS检验系统源码

JavaScriptB/S版云LIS系统源码ASP.NET CORE 3.1 MVC云LIS系统如何实现样本追踪的预警功能?医院云LIS检验系统源码 实验室信息管理系统(Trasen Laboratory Information Management System)是一套专业的医疗实验室信息管理软件,包含…

【C++】深入理解string类

一、熟悉string类 1.1 string类的由来: C语音中的字符串需要我们自己管理底层空间,容易内存泄露。而C是面向对象语音,所以它把字符串封装成一个string类。 C中对于string的定义为:typedef basic_string string; 也就是说C中的str…

Linux 进程间通信之匿名管道

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux知识分享⏪   🚚代码仓库:Linux代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝 目录 前言 一. 进程间通信介绍 1.进程间通…

富唯智能案例|双3D相机引导衔架抓取铝型材

随着制造业的快速发展和自动化水平的不断提升,铝型材的自动化抓取和加工成为行业内的一大技术难题。铝型材因其轻便、耐腐蚀、易加工等特点,广泛应用于建筑、汽车、电子等领域。然而,铝型材的形状多样、尺寸不一,以及生产线上的高…

4G小车的公网直播推流

一直想做一个小车, 可以通过4G推流, 没想到现在很多云服务提供商, SRS云服务器已经可以一键搭建了. 硬件方面, 就是一个1126驮着一个3516, 1126负责4G连接, 转流到Intenet, 3516负责vi_venc_rtsp 思路如下, 我的1126的摄像头一直没能横过来, 所以就不用1126的摄像头了, 先用35…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享 后端配置 …

项目管理-项目管理科学基础

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 1.项目管理科学基础--主要内容 项目管理科学基础,以下讲解两方面的内容:工程经济学、运筹学。 2.具体知识点 2…

使用Postman对@RequestPart和HttpServletRequest组合传参方式

使用Postman对RequestPart和HttpServletRequest组合传参方式 方法代码如下: /*** 发布*/ApiOperation("发布")ApiImplicitParams({ApiImplicitParam(name "req", value "json格式", dataType "Map", dataTypeClass Ma…

Docker-Compose概述与简单编排部署

目录 前言 一、Docker-Compose 概述 1、Docker-Compose 概念 2、Docker-Compose 优缺点 2.1 Docker-Compose 优点 2.2 Docker-Compose 缺点 3、Docker-Compose与Docker-Swarm的区别 二、两大文件格式 1、YAML 文件格式 2、JOSON 文件格式 3、YAML 与 JOSON 格式的区…