网络其他重要协议(DNS、ICMP、NAT)

csdn推荐

1.DNS

DNS是一整套从域名映射到IP的系统

1.1 DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆,例如我们想访问百度就会在浏览器中输入而不是百度的IP地址。于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系。

最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的.

这样就太麻烦了, 于是产生了DNS系统.

至今, 我们的计算机上仍然保留了hosts文件. 在域名解析的过程中仍然会优先查找hosts文件的内容

我们可以使用cat /etc/hosts命令来查看我们的hosts文件

1.2 域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称例如

1.3 域名解析过程

当我们使用浏览器输入一个url时,如何完成域名解析的过程。

1.4 dig分析DNS解析

2. ICMP协议

ICMP协议是一个 网络层协议

一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因

例如上图的主机A想要给主机B发送消息,如果主机B关机了,当数据到达主机B所在的局域网的路由器中时,路由器首先会在数据链路层构建ARP请求,问局域网中哪一台主机叫做主机B。但是主机B已经下线了,所以路由器注定是收不到ARP响应的,多次之后,路由器就会将zhujiA发送的消息丢弃了。

但是站在主机A的角度上来看,他并不会收到响应,如果传输层使用的是TCP协议,他会认为报文丢失了,或者网络发生拥塞了。于是继续重传报文。但是无论怎么传送都无济于事,因为对方已经下线了。

所以有了ICMP协议,当路由器多次ARP请求无果时,就会给主机A返回一个ICMP包,其中包含了数据包丢失的原因,主机A知道主机B已经下线了,就不会重发浪费资源了。

2.1 ICMP功能

上图就是之前说的例子,主机A发送的数据到达主机B所在局域网的路由器2上,路由器2发起多次ARP请求,多次之后收不到响应就会给A返回一个ICMP包告诉主机A,主机B已经下线了。

2.2 ping命令

ping命令是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常。

我们可以使用ping命令来测试一下与百度直接的通信信道。

telnet是23端口, ssh是22端口, 那么ping是什么端口?

我们要明白,ping虽然是一个应用层服务,但是他其实是基于ICMP,也就是网络层的,也就是说他不会经过传输层,而是从应用层直接到达网络层(Linux网络编程中使用原始套接字)。

而端口号其实是传输层的概念(传输层为了区分该报文来自哪个进程已经将报文交给哪个进程),所以ping不会有端口号。

3. NAT技术 3.1 技术背景

IPv4协议中, IP地址数量严重不充足,NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能。

3.2 NAT转换

现在客户端A想要给服务器发送消息,在局域网中A的IP地址为10.0.0.10,经过NAT路由器时,路由器会将10.0.0.10转化成一个公网IP202.244.174.37。

当服务器接受到该报文后,可以知道发送端的公网IP,也就可以知道响应时应该交给互联网上的哪一台主机了,服务器将响应发送给202.244.174.37.当数据包到达NAT路由器后,又会被转化回10.0.0.10了。

为什么不将10.0.0.10直接发送到公网,而是经过转换的过程

10.0.0.10属于私网,而私网是不能发送到公网当中的,因为在公网之下有很多个局域网,每个局域网中都可能存在一个10.0.0.10,如果直接发送到公网当中,那么无法分辨出这个数据属于谁的了。

为什么要使用私网,直接使用公网不行吗?

理论上来说,所有主机使用不同的IP地址就不要进行转换了,但是问题是IP地址严重不足了,IPV4的ip地址是32位的,也就是说最多能表示2的32次方个IP地址,也就是42亿9千万,但是仅仅中国目前14亿人口,每个人可能上网设备都不止一个。

为了解决IP不足的问题,才有了NAT技术,将IP地址分为公网IP和私网IP,私网IP可以相同。我们只需要给进入公网的路由器分配一个公网IP即可,这个路由器下的局域网使用私网IP,要访问外网直接通过路由器转换即可。

服务端响应IP为202.244.174.37,如何确定是哪一台主机发送的数据?

NAT路由器后会形成一张表,例如当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系,当数据回来时,只需要判断发送端的IP是163.221.120.9,就知道这个报文是发送给10.0.0.10这台主机的。

并且此表中不一定只存放IP,必要时会将端口号也保存起来。

我们会在下面的NAPT详谈

3.3NAPT

如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?

这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项。

路由器接收到一个报文后,如何判断该报文交给哪个主机

因为NAT路由器生成了一张转化表,所以当收到一个报文后,我们只需要判断响应报文的发送端的IP地址和之前我请求报文的接受端地址是否相同即可。

比如10.0.0.10给163.221.120.9发送了一个请求报文,路由器就会记录下来,当收到一个报文,且他的发送端的IP是163.221.120.9,那我们就可以知道这个报文应该是发送给10.0.0.10这台主机的。

如果局域网中多台主机访问同一个服务器,响应报文中的发送端IP都相同,那么此时如何分辨出这个报文是谁请求的。

NAT转化表中不仅仅会保存IP还会保存端口号,端口号的作用就体现在这里了,我们仔细观察一下转化表。

3.4 NAT的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

虽然说这是NAT的缺陷,但是也在一定程度上保护了内网的主机,因为内网主机不访问外网,外网是无法访问到内网的。

3.5NAT和代理服务器

正向代理

正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。

正向代理服务器的好处就是加快了访问速度,正向代理服务器可以把服务器资源提前缓存一部分,下次客户端再来请求这个资源时,直接从正向代理服务器中拿,而不需要再到服务器了。

反向代理

反向代理,也是一个位于客户端和目标服务器之间的服务器,客户端直接向反向代理服务器发起数据请求,然后再由反向代理服务器将客户端的数据请求转发给真正的目标服务器进行处理,数据处理完毕后反向代理服务器再将数据结果返回给客户端。

例如我们熟知的其实就是访问反向代理服务器。当这台反向代理服务器收到客户端的数据请求后,就会将我们的数据请求转发给百度内部的某台服务器进行数据处理,然后再将数据处理的结果返回给客户端。

反向代理服务器的好处:

代理服务器的主要工作只是对数据进行转发,因此代理服务器处理数据的压力不会特别大,并且代理服务器也可以有多个,因此不必担心代理服务器过载的情况。

正向代理和反向代理

相同点:

正向代理和反向代理都位于客户端和真实服务器之间它们的主要作用都是将客户端的请求转发给服务器,并将服务器的响应转发回客户端。

不同点:

正向代理:代表客户端执行请求,接收来自客户端的请求,并转发这些请求到目标服务器,然后再将服务器返回的结果返回给客户端。客户端知道实际请求的目标服务器地址,而目标服务器并不知道请求的来源。反向代理:代表服务器接收请求,接收来自客户端的请求,并转发这些请求到内部网络中的某个服务器(如Web服务器),然后将服务器的响应返回给客户端。客户端并不知道实际响应的服务器地址,只知道它正在与反向代理服务器交互。正向代理使用场景::通常用于客户端需要访问无法直接访问的网络资源时,如VPN(虚拟私人网络)服务,或者出于安全和隐私考虑,隐藏客户端的真实IP地址。反向代理使用场景::常用于负载均衡、内容缓存、安全过滤等场景。例如,多个Web服务器可以使用反向代理进行负载均衡,确保请求被均匀地分发到各个服务器上。

NAT和代理服务器

路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.

代理服务器看起来和NAT设备有一点像. 客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端.

那么NAT和代理服务器的区别有哪些呢?

4. 网络协议总结 4.1 应用层 4.2 传输层 4.3 网络层 4.4 数据链路层

文章来源:https://blog.csdn.net/weixin_74310945/article/details/139220122



微信扫描下方的二维码阅读本文

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容