(学习笔记-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.mzph.cn/news/9039.shtml

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

相关文章

Java_23_并发包

并发包 并发包的来历: 在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好! 但是开发中有很多业务是需要考虑线程安全问题的,此时就必须考虑了。否则业务出现问题。 Java为很多业…

RNN架构解析——传统RNN模型

目录 传统RNN的内部结构图使用RNN优点和缺点 传统RNN的内部结构图 使用RNN rnnnn.RNN(5,6,1) #第一个参数是输入张量x的维度,第二个是隐藏层维度,第三层是隐藏层的层数 input1torch.randn(1,3,5) #第一个是输入序列的长度,第二个是批次的样本…

Golang指针详解

要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 指针介绍 我们知道变量是用来存储数据的,变量的本质是给存储数据的内存地址起了一个好记的别名。比如我们定义了一个变量 a : 10 ,这个时候可以直接通过 a 这个变量来读取内存…

在centos 7系统docker上构建mysql 5.7

一、VM上已经安装centos 7.9,且已完成docker的构建 二、安装mysql5.7 安装镜像:[rootlocalhost lll]# docker pull mysql:5.7 查看镜像[rootlocalhost lll]# docker images 根据镜像id构建mysql容器,且分配端口号[rootlocalhost lll]# dock…

JVM(Java Virtual Machine)

哥几个来学 JVM 啦~~ 目录 🌲一、JVM 执行流程( JVM 是如何运行的?) 🌳二、JVM 运行时数据区 🍦1. 堆(线程共享) 🍧2. Java 虚拟机栈(线程私有&#xff0…

关于我组件家庭服务器,挑选硬件设备的经历

目录 起因 升级——玩客云 原因 折腾日记 又升级——d2550工控主机 原因 折腾日记 又双升级——itx主机 原因 折腾日记 又双叒升级(目前再用的机器)——i9级x99平台e5v3主机 原因 折腾日记 心得 起因 起因大概在今年三月底四月初的时候&…

DuckDB全面挑战SQLite

概要 当我们想要在具有嵌入式数据库的本地环境中工作时,我们倾向于默认使用 SQLite。虽然大多数情况下这都很好,但这就像骑自行车去 100 公里之外:可能不是最好的选择。 这篇文章中将讨论以下要点: • DuckDB 简介:它…

uniapp WIFI上下班打卡

大纲 🥙 uniapp官网:uni-app官网 🥙 WIFI功能模块: 1、下载 wifi 插件 uni-WiFi 2、在 manifest.json 中 App权限配置中 配置权限 1. ACCESS_WIFI_STATE (访问权限状态) 2. CHANGE_WIFI_STATE&#xff…

SpringBoot整合ActiveMQ

ActiveMQ简单使用 JMS ActiveMQ 下载安装 https://activemq.apache.org/components/classic/download/解压缩文件。进入win64目录,双击运行activemq.bat文件,运行服务 将下面的网址输入到浏览器,用户名和密码都是admin SpringBoot整合Act…

外贸行业企业邮箱选择:安全好用的邮箱服务

随着全球化的发展,外贸行业在全球经济中越来越重要。作为一家从事对外贸易的企业,可靠、安全、易用的邮箱系统对于成功的国际交易至关重要。为您的企业选择正确的邮箱解决方案可能是一个挑战。为了使选择过程更加简化,我们在这里提供了一些提…

异构线程池的c++实现方案

概要 通常线程池是同质的,每个线程都可以执行任意的task(每个线程中的task顺序执行),如下图所示: 但本文所介绍的线程和task之间有绑定关系,如A task只能跑在A thread上(因此称为异构线程池&am…

2023云曦期中复现

目录 SIGNIN 新猫和老鼠 baby_sql SIGNIN 签到抓包 新猫和老鼠 看到反序列化 来分析一下 <?php //flag is in flag.php highlight_file(__FILE__); error_reporting(0);class mouse { public $v;public function __toString(){echo "Good. You caught the mouse:&…

Apache pulsar 技术系列-- 消息重推的几种方式

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。在很多场景下&#xff0c;用户需要通过 MQ 实现消息的重新推送能力&#xff0c…

Python+Playwright自动化测试--标签页操作(tab)

1.简介 标签操作其实也是基于浏览器上下文&#xff08;BrowserContext&#xff09;进行操作的&#xff0c;而且宏哥在之前的BrowserContext也有提到过&#xff0c;但是有的童鞋或者小伙伴还是不清楚怎么操作&#xff0c;或者思路有点模糊&#xff0c;因此今天单独来对其进行讲…

nvidia-smi输出的结果代表什么

nvidia-smi(NVIDIA System Management Interface) 是基于nvml的gpu的系统管理接口,主要用于显卡的管理和状态监控。 nvidia-smi简称NVSMI&#xff0c;提供监控GPU使用情况和更改GPU状态的功能&#xff0c;是一个跨平台工具&#xff0c;支持所有标准的NVIDIA驱动程序支持的Linu…

【RS】基于规则的面向对象分类

ENVI使用最多的工具就是分类&#xff0c;这也是很多卫星影像的用途。在ENVI中有很多分类工具&#xff0c;如最基础的监督分类&#xff08;最大似然法、最小距离、支持向量机、随机森林&#xff09;、非监督分类&#xff08;K-means、IsoData&#xff09;&#xff0c;还有面向对…

13、PHP面向对象2(方法的访问控制、子类继承、常量)

1、类中的方法可以被定义为公有&#xff0c;私有或受保护。如果没有设置这些关键字&#xff0c;则该方法默认为公有。 public定义的方法&#xff0c;可以在类外使用。 protected定义的方法&#xff0c;只能在本类或子类的定义内使用。 private定义的方法&#xff0c;只能在本…

ubuntu开机自启动

ubuntu开机自启动 1、建一个test.sh脚本&#xff0c;并写入 #!/bin/sh gnome-terminal -x bash -c ‘cd /home/文件路径/;python3 main.py’ exit 0 2、:wq!保存 3、创建rc-local.service文件&#xff08;sudo vim /etc/systemd/system/rc-local.service&#xff09;&#xf…

Linux系统安装部署MySQL完整教程(图文详解)

前言&#xff1a;最近网上翻阅了大量关于Linux安装部署MySQL的教程&#xff0c;在自己部署的时候总是存在一些小问题&#xff0c;例如&#xff1a;版本冲突&#xff0c;配置失败和启动失败等等&#xff0c;功夫不负有心人&#xff0c;最后还是安装部署成功了&#xff0c;所以本…

[SQL系列] 从头开始学PostgreSQL 事务 锁 子查询

[SQL系列] 从头开始学PostgreSQL 索引 修改 视图_Edward.W的博客-CSDN博客https://blog.csdn.net/u013379032/article/details/131818865 事务 事务是一系列逻辑相关的数据库操作&#xff0c;可以作为一个整体进行操作或者回滚。事务通常会包含一个序列的读或者写操作&#xf…