(学习笔记-IP)IP协议相关技术

news2024/12/23 8:47:17

DNS

我们在上网的时候,通常使用的方式是域名,而不是IP地址,因为域名方便人类记忆。

那么实现这一技术的就是DNS域名解析器,DNS可以将域名网址自动转换为具体的IP地址。

域名的层级关系

DNS中的域名都是用句点来分隔的,比如www.server.com,这里的句点代表了不同层次之间的界限。

在域名中,越靠右的位置表示其层级越高

 根域(.)是在对顶层(通常省略表示),下一层就是com顶级域,再下面是server.com。所以域名的层级关系类似一个树状结构:

  • 根DNS服务器
  • 顶级DNS服务器(com)
  • 权威DNS服务器(server.com)

根域的DNS服务器信息保存在互联网中所有的DNS服务器中。这样一来,任何DNS服务器就都可以找到并访问根域DNS服务器了。

因此,客户端只要能够找到任意一台DNS服务器,就可以通过它找到根域DNS服务器,然后再一路顺藤摸瓜找到位于下层的某台目标DNS服务器。

域名解析的工作流程

浏览器先看一下自己的缓存里有没有,如果没有就找操作系统的缓存要,还没有就检查本机域名解析文件hosts,如果还是没有就会向DNS服务器进行查询,查询的过程如下:

  1. 客户端首先会发出一个DNS请求,问www.server.com的IP是啥,并发送给DNS服务器(也就是客户端的TCP/IP设置中填写的DNS服务器地址)
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到www.server.com,则它直接返回IP地址。如果没有,本地DNS会去问他的根域名服务器,根域名服务器是最高层次的,它不直接用于域名解析,但是能指明一条路。
  3. 根DNS收到来自本地DNS的请求后,发现后置是.com,于是返回.com顶级域名服务器地址
  4. 本地DNS收到顶级域名服务器地址后,发起请求询问:www.server.com的ip地址。
  5. 顶级域名服务器返回:www.server.com的权威DNS服务器的地址
  6. 本地DNS于是转向问权威DNS服务器:www.server.com的IP地址
  7. 权威DNS服务器查询后将对应的IP地址X.X.X.X告诉本地DNS
  8. 本地DNS再将IP地址返回客户端,客户端与目标建立连接


ARP

在传输一个IP数据报的时候,确定了源IP地址与目标IP地址后,就会通过主机[路由表]确定IP数据包下一跳。然而网络层的下一层是数据链路层,所以我们还得知道[下一跳]的MAC地址。

ARP如何确定对方MAC地址?

ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。

  •  主机会通过广播发送ARP请求,这个包中包含了想要知道的MAC地址和主机IP地址。
  • 当同一个链路中的所有设备收到ARP请求时,会去拆开ARP请求包里的内容,如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个设备就将自己的MAC地址塞入ARP响应包返回给主机

操作系统通常会把第一次通过ARP获取的MAC地址缓存起来,以便下次直接从缓存中找到对应的IP地址的MAC地址。

不过,MAC地址的缓存是有一定的期限的,超过这个期限,缓存的内容将会被清除。

RARP协议

ARP协议是已知IP地址求MAC地址,那RARP协议正好相反,它是已知MAC地址求IP地址。例如将打印机服务器等小型嵌入式设备接入到网络时就经常会用到。

这通常需要架设一台RARP服务器,在这个服务器上注册设备的MAC地及其 IP地址。然后再将这个设备接入网络,接着:

  • 该设备会发送一条[我的MAC地址是xxxx,我的IP地址应该是什么?]的请求信息。
  • RARP服务器接到这个消息后返回[MAC地址为xxxx的设备,IP地址为yyyy]的信息给这个设备。

最后设备就根据从RARP服务器所收到的应答信息设置自己的IP地址。


DHCP

DHCP在我们生活中很常见,我们的电脑通常都是通过DHCP动态获取IP地址,大大省去了配IP信息的繁琐过程。

我们的电脑通常经过四个步骤获取IP:

 PS: DHCP客户端进程监听的是68端口号,DHCP服务器进程监听的是67端口号。

4个步骤:

  • 客户端首先发起DHCP发现报文(DHCP DISCOVER)的IP数据报,由于客户端没有IP地址,也不知道DHCP服务器的地址,所以使用的是UDP广播通信,其使用的广播目的地址是255.255.255.255(端口67)并且使用0.0.0.0(端口68)作为源IP地址。DHCP客户端将该IP数据报传递给链路层,链路层然后将帧广播到所有的网络中设备。
  • DHCP服务器收到DHCP发现报文,用DHCP提供报文(DHCP OFFER)向客户端做出响应。该报文仍然使用IP广播255.255.255.255,该报文信息携带服务器提供可租约的IP地址、子网掩码、默认网关、DNS服务器以及IP地址租用期
  • 客户端收到一个或多个服务器的DHCP提供报文后,从中选择一个服务器,并向选中的服务器发送DHCP请求报文(DHCP REQUEST)进行响应,回显配置的参数。
  • 最后,服务端用DHCP ACK报文对DHCP请求报文进行响应,应答所要求的参数。

一旦客户端收到DHCP ACK 后,交互便完成了,并且客户端能够在组用期内使用DHCP服务器分配的IP地址。

如果租约的DHCP IP地址快到期后,客户端会向服务器发送DHCP请求报文;

  • 服务器如果同意继续租用,则用DHCP ACK报文进行应答,客户端就会延长租期。
  • 服务器 如果不同意继续租用,则用DHCP NACK 报文,客户端就要停止使用租约的IP地址。

可以发现,DHCP交互中,全程都是使用UDP广播通信。

用的是广播,那如果DHCP服务器和客户端不是在同一个局域网内,路由器又不会转发广播包,那不是每个网络都要配一个DHCP服务器?

所以,为了解决这一问题,就出现了DHCP中继代理。有了DHCP中继代理后,对不同网段的IP地址分配也可以由一个DHCP服务器统一进行管理

  •  DHCP客户端向DHCP中继代理发送DHCP请求包,而DHCP中继代理在收到这个广播包以后,再以单播的形式发给DHCP服务器。
  • 服务器端收到该包后再向DHCP中继代理返回应答,并由DHCP中继代理将次包广播给DHCP客户端。

因此,DHCP服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。


NAT

为什么需要NAT协议

IPV4随着用户的增多压力不断增大,但是每一个路由器的IP地址下面都有很多的私有地址,外部消息只需要找到这个路由器,这个路由器把消息找到真正目的主机传递给它即可。每一个路由器都可以分配很多私有地址,并且不同路由器的私有地址可以重复,通过这种地址转换,能够大大增加地址的容量。

简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。

如果按照上述说法,那么N个私有IP地址,就要有N个公有IP地址,并不能缓解IPv4地址耗尽的问题。

普通的NAT转换没什么意义

由于绝大多数的网络应用都是使用传输层协议TCP和UDP来传输数据的。因此,可以把IP地址+端口号一起进行转换。

这样,就用一个全球IP地址就可以了,这种转换技术就叫网络地址和端口转换NAPT。

对于有Internet访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。一个对外的访问请求在到达目标以后,表现为由本组织出口设备发起,因此被请求的服务端可将响应由Internet发回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内部。这样一次由私网主机向公网服务端的请求和响应就在通信两端均无感知的情况下完成了。依据这种模型,数量庞大的内网主机就不再需要公有IP地址了。NAT的转换示意图如下所示:

 图中有两个客户端192.168.1.10 和 192.168.1.11 同时与服务器 183.232.231.172进行通信,并且这两个客户端的本地端口都是1025.

此时,两个私有IP地址都转换IP地址为公有地址120.229.175.121,但是以不同的端口号作为区分。(把一个路由下的私有IP请求转换为该路由的请求,用不同的端口号来区分私有IP地址网络的主机,最终表现为该路由向服务器请求数据,接收到数据后,该路由通过端口号将数据发送给此路由下的主机)

于是生成一个NAPT路由器的转换表,就可以正确地转换地址和端口的组合,令客户端A、B能同时与服务器之间进行通信

缺点

由于NAT/NAPT都依赖于自己的转换表,因此会有以下问题:

  • 外部无法主动与NAT内部服务器建立连接,因为NAPT转换表没有转换记录。
  • 转换表的生成与转换操作都会产生性能开销
  • 通信过程中,如果NAT路由器重启了,所有的TCP连接都将被重置。

如何解决NAT潜在问题

1. 改用IPv6

IPv6可用范围非常大,以至于每台设备都可以配置一个公有IP地址,就不需要这些地址转换了

2. NAT穿透技术

NAT穿透技术能够让网络应用程序主动发现自己位于NAT设备之后,主动获取NAT设备的公有IP,并为自己建立端口映射条目。然后就用这个条目对外通信,就不需要NAT设备来进行转换了。


ICMP

ICMP的全称是Internet Control Message Protocol ,也就是互联网控制报文协议。

ICMP功能

ICMP主要的功能包括:确认IP包是否成功送达目标地址、报告发送过程中IP包被废弃点的原因和改善网络设置等

在IP通信中,如果某个IP包因为某种原因未能到达目标地址,那么这个具体的原因将由ICMP负责通知

ICMP的这种通知消息会使用IP进行发送。

因此,从路由器 2 返回的ICMP包会按照往常的路由控制先经过路由器 1 再转发给主机 A 。收到该ICMP包的主机 A 则分解ICMP的首部和数据域后得知发生问题的具体原因。

ICMP类型

ICMP大致可以分为两类:

  • 一类是用于诊断的查询消息,也就是查询报文类型
  • 另一类是通知出错原因的错误消息,也就是差错报文类型


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

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

相关文章

软件升级相关

文章目录 一、升级方案1、移动端升级2、window 升级SquirrelSparkle 一、升级方案 1、移动端升级 腾讯Bugly ,支持Android 平台、iOS平台、Cocos2D、Unity3D。 2、window 升级 windows的exe的打包及升级工具 Squirrel Squirrel 是一款免费的开源exe升级工具&a…

NFT市场泡沫破裂了吗?投资NFT是否仍然安全?

近期,NFT市场的价格出现了明显的下跌趋势,许多人开始担心NFT市场是否已经进入了泡沫破裂的阶段。但是,我们需要认真分析这个问题,并且探讨投资NFT是否仍然安全。 NFT(Non-Fungible Token)是一种非同质化代币…

JMerter安装配置以及使用(笔记记录)

JMerter安装配置以及使用(笔记记录) 安装JDK安装JMeterJMeter使用元件执行的顺序参数详解参数配置之CSV数据文件设置断言响应断言JSON断言 数据提取XPath提取器JSON提取器 JMeter属性JMeter录制脚本JMeter直连数据库逻辑控制器如果(IF&#x…

reference文献引用列表要求

目录 1、基本要求 2、文献格式 3、引用技巧 4、特殊情况: 有新闻和网络文章的引用: 1、基本要求 对于每一篇paper,我们需要按照文中出现的顺序,列出文中引用的所有文献。 对于文献的引用有如下要求: a】顺序要求…

【node.js】03-http模块

目录 一、什么是http模块 二、创建基本的WEB服务器 三、req请求对象 四、res响应对象 五、根据不同的url响应不同的JSON内容 一、什么是http模块 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法,…

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积…

MonsterInsights Pro 8.18.0 Google Analytics + All Addons Pack

MonsterInsights适用于 WordPress 的 Google Analytics(分析)插件,功能强大 MonsterInsights 是适用于 WordPress 的最佳 Google Analytics(分析)插件。这些功能使 MonsterInsights 成为市场上功能最强大且用户友好的 …

网络通信原理(第十八课)

网络通信原理(第十八课) 4.1 回顾 1.什么是TCP/IP 目前应用广泛的网络通信协议集 国际互联网上电脑相互通信的规则、约定。 2.主机通信的三要素 IP地址:用来标识一个节点的网络地址(区分网络中电脑身份的地址,如人有名字) 子网掩码:配合IP地址确定网络号 IP路由:网…

Linux笔记——磁盘进行分区与挂载介绍

系列文章目录 Linux笔记——管道相关命令以及shell编程 文章目录 系列文章目录 前言 分区与挂载 1 分区 1.1 分区示意图​编辑 1.2 分区介绍 2 硬盘的挂载 3 增加一块硬盘 3.1 增加一块硬盘 3.2 硬盘进行分区 3.3 格式化磁盘 4 卸载 5 查看磁盘使用情况 6 一些…

javascript 7种继承-- 原型链继承分析(1)

文章目录 概要继承的进化史技术名词解释原型链的作用原型链继承案列分析源代码解析效果图预留问题小结 概要 这阵子在整理JS的7种继承方式,发现很多文章跟视频,讲解后都不能让自己理解清晰,索性自己记录一下,希望个位发表需要修改…

10分钟实现任务调度平台搭建

日常项目中,会有很多需要定时执行的任务,而这些任务的变化比较多,可能随时都要调整,那么对调度的灵活性要求比较高。我们传统的Spring Task或者Quartz,可以实现定时任务调度,但是内置在代码里,修…

Matlab Kappa系数和总体精度OA计算

axlsread(D:\homework\精度验证产品.xlsx); Predicteda(:,1); vala(:,2); g0; for i1:size(a,1) %记录验证结果是否与实际值一致if(Predicted(i)val(i))gg1;end end OAg/(size(a,1));% 计算混淆矩阵 confusion_matrix confusionmat(val, Predicted);% 计算总样本数 total_sa…

全方位对比 Postgres 和 MongoDB (2023 版)

本文为「数据库全方位对比系列」第二篇,该系列的首部作品为「全方位对比 Postgres 和 MySQL (2023 版)」 为何对比 Postgres 和 MongoDB 根据 2023 年 Stack Overflow 调研,Postgres 已经成为最受欢迎和渴望的数据库了。 MongoDB 曾连续 4 年 (2017 - …

Qt Core学习日记——第九天QObjectData

本文结合示例代码更易理解&#xff0c;moc_XTest.cpp文件是写好XTest.h、XTest.cpp后由qt编译生成 版本 Qt5.15.2 示例代码 XTest.h #pragma once #include <qobject.h> #include <QFlags> class XTest : public QObject { Q_OBJECT Q_CLASSINFO("au…

【JavaEE初阶】HTTP请求的构造及HTTPS

文章目录 1.HTTP请求的构造1.1 from表单请求构造1.2 ajax构造HTTP请求1.3 Postman的使用 2. HTTPS2.1 什么是HTTPS?2.2 HTTPS中的加密机制(SSL/TLS)2.2.1 HTTP的安全问题2.2.2 对称加密2.2.3 非对称加密2.2.3 中间人问题2.2.5 证书 1.HTTP请求的构造 常见的构造HTTP 请求的方…

数组(超详解)

数组 1.一维数组1.1 一维数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的储存 2. 二维数组2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的储存 3.数组越界4.数组作为函数参数4.1 冒泡排序函数错误设计4.2 数组名是什么…

Gnomon水下环境 中

海下的石头 方法一 nParticleShape1.zhong_lie rand(0,6); nParticleShape1.xuan_zhuanrand(<<0,0,0>>,<<5,360,5>>); 缩放原始物体 写错地方了&#xff0c;播放石头一样 海下的石头 方法二 有点问题&#xff0c;使用旧粒子系统 让第一针有粒子 播…

基于SpringBoot+Vue的摄影跟拍预定管理系统设计与实现(源码+lw+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Idea 开启 lombook 注解插件处理器

Idea 开启 lombook 注解插件处理器 方便编译器识别 勾选 Enable annotation processing

【每日一题】—— C. K-th Not Divisible by n (Codeforces Round 640 (Div. 4))

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…