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

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.mfbz.cn/a/47626.html

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

相关文章

3.5 Bootstrap 输入框组

文章目录 Bootstrap 输入框组基本的输入框组输入框组的大小复选框和单选插件按钮插件带有下拉菜单的按钮分割的下拉菜单按钮 Bootstrap 输入框组 本章将讲解 Bootstrap 支持的另一个特性,输入框组。输入框组扩展自 表单控件。使用输入框组,您可以很容易地…

多租户分缓存处理

多租户redis缓存分租户处理 那么数据库方面已经做到了拦截,但是缓存还是没有分租户,还是通通一个文件夹里, 想实现上图效果,global文件夹里存的是公共缓存。 首先,那么就要规定一个俗称,缓存名字带有globa…

字符串函数介绍应用

字符串 1.前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者字符数组中。 字符串常量适合于那些对他不做修改的函数。 2.库函数及其模拟实现 2.1 strlen函数 size_t strlen ( const char *…

mysql(四)数据备份

目录 前言 一、概述 二、备份的类型 (一)物理与逻辑角度 (二)数据库备份策略角度 三、常见的备份方法 四、完整备份 (一)打包数据库文件备份 (二)备份工具备份 五、增量备份 六、操…

uniapp兼容微信小程序和支付宝小程序遇到的坑

1、支付宝不支持v-show 改为v-if。 2、v-html App端和H5端支持 v-html ,微信小程序会被转为 rich-text,其他端不支持 v-html。 解决方法:去插件市场找一个支持跨端的富文本组件。 3、导航栏处有背景色延伸至导航栏外 兼容微信小程序和支…

用OpenCV图像处理技巧之白平衡算法(二)

1. 引言 在上一节中我们介绍了白平衡算法的原理,并详细实现了基于白色补丁算法的白平衡实现,本文继续就白平衡的其他算法实现进行展开。 闲话少说,我们直接开始吧! 2. Gray-world Algorithm 灰色世界算法(Gray-wor…

【N32L40X】学习笔记11-ADC规则通道采集+dma数据传输

ADC规则通道转换 概述 支持 1 个 ADC,支持单端输入和差分输入,最多可测量 16 个外部和 3 个内部源。支持 12 位、10 位、8 位、6 位分辨率。ADC 时钟源分为工作时钟源、采样时钟源和计时时钟源 仅可配置 AHB_CLK 作为工作时钟源。可配置 PLL 作为采样时…

【大数据之Flume】三、Flume进阶之Flume Agent 内部原理和拓扑结构

1 Flume事务 2 Flume Agent 内部原理 重要组件: 1、ChannelSelector(选择器)   ChannelSelector 的作用就是选出 Event 将要被发往哪个 Channel。   (1)Replicating ChannelSelector(复制或副本&#x…

【面试题】芯片中的IR drop现象是什么?

这里是尼德兰的喵芯片面试相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏,也欢迎您对文中存在的问题和疑惑进行评论 此外,gitee仓库尼德兰的喵 (gjm9999) - Gitee.com与微信公众平台也期待您的访问 让我们一起为芯片前端全栈工程师而努力!!!! 今天突然…

C++模拟实现stack

1.前言 stack 遵循的原则是先进后出,那到底是用list 还是 vector呢?其实都可以,但是队列queue就不一样了,他甚至不可以支付vector,因为效率太低了。 但是库里面用了一种新的类型,deque,它的实现…

实战项目——基于多设计模式下的同步异步日志系统

系列文章目录 1.项目介绍 2.相关技术补充 3.日志系统框架 4.代码设计 5.功能测试 6.性能测试 文章目录 目录 系列文章目录 1.项目介绍 2.相关技术补充 3.日志系统框架 4.代码设计 5.功能测试 6.性能测试 文章目录 前言 一、项目介绍 二、开发环境 三、核心技…

BTTES,2101505-88-6,是各种化学生物实验中生物偶联的理想选择

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 规格单位:g |货期:按照具体的库存进行提供 | 纯度:95% PART1----​试剂描述: BTTES是铜(I)催化的叠氮化物-炔烃环加成(CuAAC&#x…

佰维存储面向旗舰智能手机推出UFS3.1高速闪存

手机“性能铁三角”——SoC、运行内存、闪存决定了一款手机的用户体验和定位,其中存储器性能和容量对用户体验的影响越来越大。 针对旗舰智能手机,佰维推出了UFS3.1高速闪存,写入速度最高可达1800MB/s,是上一代通用闪存存储的4倍以…

机器学习实战11-基于K-means算法的文本聚类分析,生成文本聚类后的文件

大家好,我是微学AI,今天给大家介绍机器学习实战11-基于K-means算法的文本聚类分析,生成文本聚类后的文件。文本聚类分析是NLP领域的一个核心任务,通过将相似的文本样本分组,可以帮助我们发现隐藏在文本数据中的模式和结…

springboot运行报错Failed to load ApplicationContext for xxx

Failed to load ApplicationContext for报错解决方法 报错Failed to load ApplicationContext for 报错Failed to load ApplicationContext for 网上找了一堆方法都尝试了还是没用 包括添加mapperScan,添加配置类 配置pom文件 [外链图片转存失败,源站可能有防盗链机…

前端技术搭建(动态图片)拖拽拼图!!(内含实现原理)

文章目录 前端技术搭建(动态图片)拖拽拼图(内含实现原理)导言功能介绍效果演示链接(觉得不错的,请一键三连嘤嘤嘤)项目目录页面搭建css样式设置工具函数游戏实现逻辑 开源地址总结 前端技术搭建(动态图片&a…

数据结构【排序】

第七章 排序 一、排序 1.定义:将无序的数排好序 ; 2.稳定性: Kᵢ和Kⱼ中,Kᵢ优先于Kⱼ那么在排序后的记录中仍然保持Kᵢ优先; 3.评价标准:执行时间和所需的辅助空间,其次是算法的稳定性&#xf…

不用科学操作!Google Play谷歌商店App下载使用小技巧,超详细指南

昨天文章发出后,有朋友在群里说,不如出个如何使用谷歌商店的教程。 注:谷歌商店、Google Play、Play商店均表示同一个APP,只是叫法不同而已。 我发现这是一个艰难的任务,受限于手机品牌及操作系统版本,即使…

【C语言】文件操作(二)

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃 目录 📌补充1.sprintf2.…
最新文章