[Linux][网络][协议技术][DNS][ICMP][ping][traceroute][NAT]详细讲解
目录
- 1.DNS
- 1.DNS背景
- 2.域名简介
- 2.ICMP协议
- 1.ICMP功能
- 2.ICMP两类报文
- 3.ping命令
- 4.traceroute
- 5.NAT技术
- 1.NAT技术背景
- 2.NAT IP转换过程
- 3.静态地址NAT && 动态地址NAT
- 4.网络地址端口转换NAPT
- 5.NAT技术的缺陷
- 6.NAT和代理服务器
- 6.总结
- 1.数据链路层
- 2.网络层
- 3.传输层
- 4.应用层
1.DNS
- DNS(Domain Name System)(是一整套从域名映射到IP的系统)
- DNS 的默认端口:53
- DNS协议规范使用UDP进行传输
1.DNS背景
- TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序
- 但是IP地址不方便记忆,于是人们发明了一种叫主机名的东西,是一个字符串,并且使用hosts文件来描述主机名和IP地址的关系
- 最初,通过互连网信息中心(SRI-NIC)来管理这个hosts文件
- 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件
- 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网
- 这样就太麻烦了,于是产生了DNS系统
- 一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系
- 如果新计算机接入网络,将这个信息注册到数据库中
- 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址
- 至今,我们的计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容
2.域名简介
- 域名组成:主机名.结构名.网络名.最高层域名
- 主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
- 如:www.baidu.com
- 域名使用 . 连接
- com:一级域名,表示这是一个企业域名,同级的还有"net"(网络提供商),“org”(非盈利组织)等
- baidu:二级域名,公司名
- www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议
2.ICMP协议
- ICMP协议是一个网络层协议
- 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通,但是IP协议并不提供可靠传输,如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因
1.ICMP功能
- ICMP正是提供这种功能的协议,ICMP主要功能包括
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
- ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议
- ICMP只能搭配IPv4使用,如果是IPv6的情况下,1需要是用ICMPv6;
2.ICMP两类报文
- 一类是通知出错原因
- 一类是用于诊断查询
3.ping命令
-
注意,此处ping的是域名,而不是url,一个域名可以通过DNS解析成IP地址
-
ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存周期)
-
ping命令会先发送一个ICMP Echo Request给对端,对端接收到之后,会返回一个ICMP Echo Reply
![[Pasted image 20240225085550.png]] -
一个值得注意的坑
- 有些面试官可能会问:telnet是23端口,ssh是22端口,那么ping是什么端口?
- 千万注意,这是面试官的圈套
- ping命令基于ICMP,是在网络层,而端口号是传输层的内容,在ICMP中根本就不关注端口号这样的信息
4.traceroute
- 也是基于ICMP协议实现,能够打印出可执行程序主机一直到目标主机之前经历多少路由器
5.NAT技术
1.NAT技术背景
- 之前我们讨论了,IPv4协议中,IP地址数量不充足的问题
- NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能
- NAT能够将私有IP对外通信时转为全局IP,也就是就是一种将私有IP和全局IP相互转化的技术方法
- 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP
- 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的
2.NAT IP转换过程
- NAT路由器将源地址从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 发送数据时就会生成表中的映射关系
3.静态地址NAT && 动态地址NAT
- 静态地址NAT:
- 将内部网络的私有的IP地址转换为公有IP地址,IP地址是一对一的,是一直不变的
- 实现固定私网主机地址到公网地址的一对一转换,适用于上网用户少,且同时上网用户数量与公网地址数量相同的场景
- 动态地址NAT:
- 将内部网络的私有的IP地址转换为公有IP地址时,IP地址时不确定,随机的
- 私网主机地址与公网地址的动态转换,并没有固定映射关系
4.网络地址端口转换NAPT
- 那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
- 这时候NAPT来解决这个问题了,使用IP+Port来建立这个关联关系
- 在进行源地址转换的过程中,不一定只替换源IP,必要的时候,源端口也要被替换
- 路由器在NAT转换的过程中,除了单纯的替换,还会为用户根据报文请求的四元组,构建一个映射关系
- 无论从内向外,还是从外向内,都能在各自的网络中表示唯一性,所以,这个映射关系是互为KEY值的
- 这时候NAPT来解决这个问题了,使用IP+Port来建立这个关联关系
- 这种关联关系也是由NAT路由器自动维护的
- **例如:**在TCP的情况下,建立连接时,就会生成这个表项,在断开连接后,就会删除这个表项
- **例如:**在TCP的情况下,建立连接时,就会生成这个表项,在断开连接后,就会删除这个表项
5.NAT技术的缺陷
- 由于NAT依赖这个转换表,所以有诸多限制
- 无法从NAT外部向内部服务器建立连接
- 装换表的生成和销毁都需要额外开销
- 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开
6.NAT和代理服务器
- 路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程
- 代理服务器看起来和NAT设备有一点像,客户端向代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器,服务器返回结果后,代理服务器又把结果回传给客户端
- 那么NAT和代理服务器的区别有哪些呢?
- 从应用上讲
- NAT设备是网络基础设备之一,解决的是IP不足的问题
- 代理服务器则是更贴近具体应用
- 通过代理服务器进行翻墙,
- 另外像网易UU这样的加速器,也是使用代理服务器
- 从底层实现上讲
- NAT是工作在网络层,直接对IP地址进行替换
- 代理服务器往往工作在应用层
- 从使用范围上讲
- NAT一般在局域网的出口部署
- 代理服务器可以在局域网做,也可以在广域网做,也可以跨网
- 从应用上讲
- 从部署位置上看
- NAT一般集成在防火墙,路由器等硬件设备上
- 代理服务器则是一个软件程序,需要部署在服务器上
- 代理服务器是一种应用比较广的技术
- 翻墙:广域网中的代理 – 正向代理
- 负载均衡:局域网中的代理 – 反向代理
- 代理服务器又分为正向代理和反向代理
- 正向代理用于请求的转发
- 反向代理往往作为一个缓存
6.总结
1.数据链路层
- 数据链路层的作用:两个设备(同一种数据链路节点)之间进行传递数据
- 以太网是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容
- **例如:**规定了网络拓扑结构,访问控制方式,传输速率等
- 以太网帧格式
- 理解mac地址
- 理解arp协议
- 理解MTU
2.网络层
- 网络层的作用:在复杂的网络环境中确定一个合适的路径
- 理解IP地址,理解IP地址和MAC地址的区别
- 理解IP协议格式
- 了解网段划分方法
- 理解如何解决IP数目不足的问题,掌握网段划分的两种方案,理解私有IP和公网IP
- 理解网络层的IP地址路由过程,理解一个数据包如何跨越网段到达最终目的地
- 理解IP数据包分包的原因
- 了解ICMP协议
- 了解NAT设备的工作原理
3.传输层
- 传输层的作用:负责数据能够从发送端传输接收端
- 理解端口号的概念
- 认识UDP协议,了解UDP协议的特点
- 认识TCP协议,理解TCP协议的可靠性,理解TCP协议的状态转化
- 掌握TCP的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答特性
- 理解TCP面向字节流,理解粘包问题和解决方案
- 能够基于UDP实现可靠传输
- 理解MTU对UDP/TCP的影响
4.应用层
- 应用层的作用:满足日常需求的网络程序,都是在应用层
- 能够根据自己的需求,设计应用层协议
- 了解HTTP协议
- 理解DNS的原理和工作流程
相关文章:

[Linux][网络][协议技术][DNS][ICMP][ping][traceroute][NAT]详细讲解
目录 1.DNS1.DNS背景2.域名简介 2.ICMP协议1.ICMP功能2.ICMP两类报文 3.ping命令4.traceroute5.NAT技术1.NAT技术背景2.NAT IP转换过程3.静态地址NAT && 动态地址NAT4.网络地址端口转换NAPT5.NAT技术的缺陷6.NAT和代理服务器 6.总结1.数据链路层2.网络层3.传输层4.应用…...

Android 集成Bugly完成线上的异常Exception收集及处理
文章目录 (一)添加产品APP(二)集成SDK(三)参数配置权限混淆 (四)初始化 (一)添加产品APP 一)在个人头像 -> 我的头像 -> 新建产品 二&…...
Redis——Redis的数据库结构、删除策略及淘汰策略
Redis是一个高性能的key-value存储系统,它支持多种数据结构,并提供了丰富的删除策略和淘汰策略。以下是关于Redis的数据库结构、删除策略及淘汰策略的详细介绍: Redis的数据库结构 Redis是一个key-value数据库,数据存储是以一个…...
【Vue3笔记03】Vue3项目工程中使用vue-router路由
这篇文章,主要介绍Vue3项目工程中如何使用vue-router路由。 目录 一、vue-router路由 1.1、下载vue-router路由 1.2、创建router.js文件 1.3、main.js配置路由...

并行执行的4种类别——《OceanBase 并行执行》系列 4
OceanBase 支持多种类型语句的并行执行。在本篇博客中,我们将根据并行执行的不同类别,分别详细阐述:并行查询、并行数据操作语言(DML)、并行数据定义语言(DDL)以及并行 LOAD DATA 。 《并行执行…...
函数练习.
1.打印乘法口诀表 口诀表的行数和列数自己指定如:输入9,输出99口诀表,输出12,输出1212的乘法口诀表。 multiplication(int index) { if (index 9) { int i 0; for (i 1; i < 10; i) { int j 0; for (j 1; j &…...

Git 分支命令操作详解
目录 1、分支的特点 2、分支常用操作 3、分支的使用 3.1、查看分支 3.2、创建分支 3.3、修改分支 3.4、切换分支 3.5、合并分支 3.6、产生冲突 3.7、解决冲突 3.8、创建分支和切换分支说明 1、分支的特点 同时并行推进多个功能开发,提高开发效率。各个分…...

十二生肖Midjourney绘画大挑战:释放你的创意火花
随着AI艺术逐渐进入大众视野,使用Midjourney绘制十二生肖不仅能够激发我们的想象力,还能让我们与传统文化进行一场新式的对话。在这里,我们会逐一提供给你创意满满的绘画提示词,让你的作品别具一格。而且,我们还精选了…...

【C++】priority_queues(优先级队列)和反向迭代器适配器的实现
目录 一、 priority_queue1.priority_queue的介绍2.priority_queue的使用2.1、接口使用说明2.2、优先级队列的使用样例 3.priority_queue的底层实现3.1、库里面关于priority_queue的定义3.2、仿函数1.什么是仿函数?2.仿函数样例 3.3、实现优先级队列1. 1.0版本的实现…...
Go语言函数
在Go语言中,函数是一种基本的构建块,用于组织代码并执行特定任务。它们是可重复使用的代码段,可以接收输入参数,执行一系列操作,并可返回结果。以下是Go语言中函数的详细介绍及其使用方法: 基本语法 Go语…...
如何使用EasyExcel导入百万数据
摘要: 本文将详细探讨如何利用EasyExcel库,以及结合Java编程,高效地导入大规模数据至应用程序中。我们将逐步介绍导入流程、代码实现细节,并提供性能优化建议,旨在帮助读者在处理百万级别数据时,提高效率与…...

【解决】Unity Build 应用程序运行即崩溃问题
开发平台:Unity 2021.3.7f1c1 一、问题描述 编辑器 Build 工程结束,但控制台 未显示 Build completed with a result of Succeeded [时间长度] 信息。该情况下打包流程正常,但应用程序包打开即崩溃。 二、问题测试记录 测试1…...

C++数据结构——红黑树
前言:本篇文章我们继续来分享C中的另一个复杂数据结构——红黑树。 目录 一.红黑树概念 二.红黑树性质 三.红黑树实现 1.基本框架 2.插入 3.判断平衡 四.完整代码 总结 一.红黑树概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个…...
Java并发编程:学习路线图
文章目录 一、操作系统内核原理1、进程管理详解2、内存管理详解3、IO输入输出系统详解4、进程间通信机制详解5、网络通信原理剖析 二、Java内存模型三、并发集合1、Map(1)ConcurrentHashMap(2)ConcurrentSkipListMap 2、List&…...

算法_前缀和
DP34 【模板】前缀和 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n in.nextInt(),q in.ne…...

C语言(指针)7
Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…...

线程纵横:C++并发编程的深度解析与实践
hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之《线程纵横:C并发编程的深度解析与实践》,在这篇文章中,你将会学习到C新特性,并发编程,以及其如何带来的高性能的魅力࿰…...

在阿里云服务器上安装MySQL
目录 一、先卸载不需要的环境 1.关闭MySQL服务 2.查看安装包以及卸载安装包 3.依次卸载所有包 4. 获取mysql官⽅yum源 二、安装(密钥过期解决方法) 三、启动并进入 关于MySQL MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS&…...

国标GB28181协议EasyCVR视频汇聚平台获取设备录像仅展示部分片段的原因排查
国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流…...

Java的类和对象(一)—— 初始类和对象,this关键字,构造方法
前言 从这篇文章开始,我们就进入到了JavaSE的核心部分。这篇文章是Java类和对象的第一篇,主要介绍类和对象的概念,this关键字以及构造方法~~ 什么是类?什么是对象? 学过C语言的老铁们,可以类比struct自定义…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...