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.localdomain4172.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.rhkb.cn/news/322535.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.使用uniapp搭建微信小程序项目并引入前端组件资源

文章目录 1. 项目配置1.1. 新建vue3项目1.2. 关联云空间1.3. 运行到微信开发者工具 2. 前端组件2.1. uniCloud的内置组件和扩展组件2.2. uView3.02.3. 在uniapp项目引入uview3 1. 项目配置 1.1. 新建vue3项目 由于我们要使用vue3而不是vue2,所以要选好版本&#x…

SpringBoot实现统一返回值+全局异常处理

在这里首先感谢的就是程序员老罗&#xff0c;从他的项目里面学到了这些东西。 首先就是去创建一个SpringBoot项目&#xff0c;这里我就不多做赘述了 封装一个统一返回对象 package com.example.demo.vo;public class ResponseVO<T> {private String status;private In…

本地搭建AI环境

本地搭建AI 这几天刚刚看到好兄弟分享的一段关于本地搭建AI的短视频&#xff0c;于是我按照视频里的讲解&#xff0c;进行了实践。感觉非常棒&#xff01;&#xff01;&#xff0c;马上整理成文字与大家分享一下。 在本地启动并运行大型语言模型&#xff0c;运行llama3、phi3…

Apache POI入门学习

Apache POI入门学习 官网地址 excel中使用到的类读取excel表格内容表格内容maven依赖方式一测试结果 方式二测试结果 向excel中写入数据方式一方式二方式三测试结果 从 Excel 工作表中的公式单元格读取数据测试结果 Excel 工作表中写入公式单元格从受密码保护的Excel中读取数据…

Redis-新数据类型-Bitmaps

新数据类型-Bitmaps 简介 在计算机中&#xff0c;用二进制&#xff08;位&#xff09;作为存储信息的基本单位&#xff0c;1个字节等于8位。 例如 “abc” 字符串是由 3 个字节组成&#xff0c;计算机存储时使用其二进制表示&#xff0c;"abc"分别对应的ASCII码是 …

Jenkins +git +web(vue) centos8.5 实战打包部署 运维系列二

1新建一个工程 #cat qy.sh #!/bin/bash cd /data/.jenkins/workspace/web rm -rf dist/ rm -rf qysupweb.tar.gz npm run build tar -czvf qysupweb.tar.gz dist/ #点击构建

嵌入式开发八:STM32启动过程分析

本次给大家分析 STM32F4 的启动过程&#xff0c;这里的启动过程是指从 STM32 芯片上电复位执行的第一条指令开始&#xff0c;到执行用户编写的 main 函数这之间的过程。我们编写程序&#xff0c;基本都是用 C 语言编写&#xff0c;并且以 main 函数作为程序的入口。但是事实上&…

CentOS 7 :虚拟机网络环境配置+ 安装gcc(新手进)

虚拟机安装完centos的系统却发现无法正常联网&#xff0c;咋破&#xff01; 几个简单的步骤&#xff1a; 一、检查和设置虚拟机网络适配器 这里笔者使用的桥接模式&#xff0c;朋友们可以有不同的选项设置 二、查看宿主机的网络 以笔者的为例&#xff0c;宿主机采用wlan上网模…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能高&#xff0c;用户体验好&#xff0c;是因为页面按需更新。 而如果要按需更新&#xff0c;首先需要明确&#xff1a;访问路径和组件的对应关系。该关系通过路由来…

^_^填坑备忘^_^C#自动化编程实现STK+Exata对卫星互联网星座进行网络仿真

C#实际选择 STK11版本 or STK12版本的问题备注。 【C#自动化客户端调用STK时&#xff0c;实际选择 STK11版本 or STK12版本 的调试运行备注】 以下代码“更新并重新打包备份为”〔testSTKQualNetInterface备份08.1_★避坑★【种子卫星&#xff1a;天线直接安装在卫星上&#…

Spring 常用的注入方式有什么?

Spring 是一个非常流行的 Java 开发框架&#xff0c;它提供了多种依赖注入&#xff08;Dependency Injection&#xff09;的方式&#xff0c;使得开发者可以轻松地管理应用程序中的组件依赖关系。在 Spring 中&#xff0c;常用的注入方式主要包括构造器注入、Setter 方法注入、…

A Dexterous Hand-Arm Teleoperation System

A Dexterous Hand-Arm Teleoperation System Based on Hand Pose Estimation and Active Vision解读 摘要1. 简介2.相关工作2.1 机器人遥操作2.2 主动视觉&#xff08;Active Vision&#xff09; 3. 硬件设置4. 基于视觉的机器人手部姿态估计4.1 Transteleop4.2 Dataset 5. 主动…

Rust读写CSV文件 一维Vec类型元素、二维Vec类型元素写入CSV文件

本文主要介绍Rust读写CSV文件方法&#xff0c; Vec类型元素基本操作方法&#xff0c;Rust把一维Vec类型元素、二维Vec类型元素写入CSV文件方法。 实例测试&#xff1a; 要求读“log.csv”文件数据&#xff0c;把“时间”列数据和“次数”列数据写入日志处理结果1.csv文件&…

06-数组

1. 为什么需要数组 一个养鸡场有6只鸡&#xff0c;它们的体重分别是3kg&#xff0c;4kg&#xff0c;1kg&#xff0c;2kg&#xff0c;6kg&#xff0c;3kg。 没有数组&#xff0c;就需要定义六个变量&#xff0c;一个变量代表一只鸡的体重。 使用数组&#xff0c;就可以定义一…

安防视频/视频汇聚系统EasyCVR视频融合云平台助力智能化酒店安防体系的搭建

一、背景需求 2024年“五一”假期&#xff0c;全国文化和旅游市场总体平稳有序。文化和旅游部6日发布数据显示&#xff0c;据文化和旅游部数据中心测算&#xff0c;全国国内旅游出游合计2.95亿人次。“五一”假期县域市场酒店预订订单同比增长68%&#xff0c;而酒店作为一个高…

Dashboard 安装部署

Dashboard 安装部署 Dashboard 安装部署 一&#xff1a;下载 二&#xff1a;部署步骤 1.镜像下载及导入 国内直接拉外网镜像会失败&#xff0c;可在境外下载镜像 查看 deployment 里的镜像版本 Dashboard Deploymentcontainers:- name: kubernetes-dashboardimage: k8s.g…

Python - 金三银四心路历程 之 数据结构与算法 刷题

目录 一.引言 二.心路历程 三.刷题经历 四.刷题历程 五.总结 一.引言 <夜深人静写算法> 是 23 年 12 月底博主打算跳槽时开始做刷题准备做的专栏&#xff0c;前后准备了大约一个月&#xff0c;刷题完毕后简单准备了项目和简历后就开始加入找工作大军了&#xff0c;最…

VISIO 画任意形状的封闭图案

** 最终要的效果 ** 1. 先用任意曲线画个圈 2. 在开发工具中&#xff0c;找到对应的&#xff0c;先点连接&#xff0c;再点修剪 3. 多余的部分删掉

组合模式(Composite)——结构型模式

组合模式(Composite)——结构型模式 组合模式是一种结构型设计模式&#xff0c; 你可以使用它将对象组合成树状结构&#xff0c; 并且能通过通用接口像独立整体对象一样使用它们。如果应用的核心模型能用树状结构表示&#xff0c; 在应用中使用组合模式才有价值。 例如一个场景…

推荐非常方便的初始配置nginx的开源工具

官网 https://www.digitalocean.com/community/tools/nginx?global.app.langzhCN直接复制base64字符串在 /etc/nginx 目录执行&#xff0c;会自动生成配置文件&#xff0c;最后执行 使用tar解压新的压缩配置 tar -xzvf nginxconfig.io-xxx.com.tar.gz | xargs chmod 0644在…