『网络』几个重要协议/技术的简单介绍

DNS

我们平常在访问某个网站时不使用IP地址,而是用一串由罗马字和点号组成的字符串。而一般用户在使用TCP/IP进行通信时也不使用IP地址。能够这样做是因为有了DNS(Domain Name System,域名系统)功能的支持。DNS可以将那字符串自动转换为具体的IP地址
这种DNS不仅适用于IPv4,还适用于IPv6
因为IP地址由一串数据序列组成,并不好记
于是人们发明了一种叫做主机名的东西,是一个字符串,并且使用hosts文件来描述主机名和IP地址的关系
在这里插入图片描述
互联网的起源ARPANET中起初由互联网信息中心(SRI-NIC)整体管理一份hosts文件。如果新增一台计算机接入到ARPANET网或者已有的某台计算机要进行IP地址变更中心的这个hosts文件就得更新,而其他计算机则不得不定期下载最新的hosts文件才能正常接入网络
然而,随着网络规模的不断扩大,接入计算机的数量不断增加,使得这种集中管理主机名和IP地址的登录、变更处理的可行性逐渐降低
上述背景下,DNS应运而生

  • 一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系
  • 如果新计算机接入网络,将这个信息注册到数据库中
  • 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址

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

cat /etc/hosts

在这里插入图片描述

域名简介

域名解析服务器采用分布式存储。全世界根域名服务器只有13台(组)。分布式好处:提高解析速度/提高容灾能力

  • 顶级域名:.com(商业)、.org(公益)、.edu(教育)、.cn(中国)、.jp(日本)、.us(美国)。
  • 二级域名:.qq.com、.baidu.com。
  • 三级域名:.zhidao.baidu.com、.image.baidu.com。

域名解析流程

  • 检测本机host文件
  • 检测本地DNS解析器缓存
  • 向本地DNS服务器发起请求。谷歌DNS服务器为(8.8.8.8),百度DNS服务器(180.76.76.76),默认走的都是运营商的DNS服务器
    在这里插入图片描述
    可以使用dig命令查看域名解析过程
    安装dig工具
[sss@aliyun ~]$ sudo yum install dig

使用dig指令查看域名解析过程

dig www.baidu.com

在这里插入图片描述

  • 开头位置是dig指令的版本号
  • 第二部分是服务器返回的详情,重要的是参数status,NOERROR表示查询成功
  • QUESTION SECTION表示要查询的域名是什么
  • ANSWER SECTION表示查询的结果是什么这个结果先将www.baidu.com查询成了www.a.shifen.com,再将www.a.shifen.com查询成了两个IP地址。
  • 最下面是一些结果统计,包含查询时间和DNS服务器的地址等。

输入URL后,发生了什么?

  1. DNS解析
  2. 组织HTTP请求信息
  3. 建立TCP客户端发送HTTP请求
  4. 网络层IP协议
  5. 链路层的以太网协议

ICMP

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的信息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

辅助IP的ICMP

架构IP网络时需要特别注意两点:确认网络是否连接正常,以及遇到异常时进行问题诊断
例如
一个刚刚搭建好的网络,需要验证该网络的设置是否正确。此外,为了确保网络能够按照预期正常工作,一旦遇到什么问题需要立即制止问题的蔓延。为了减轻网络管理员的负担,这些都是必不可少的功能。
ICMP正是提供这类功能的一种协议

ICMP的功能

  • 确认IP包是否成功到达目标地址
  • 通知在发送过程中IP包被丢弃的原因
  • ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6

下图所示
在这里插入图片描述
主机A向主机B发送了数据包,由于某种原因,途中的路由器2未能发现主机B的存在,这时,路由器2就会向主机A发送一个ICMP包,说明发往主机B的包未能成功
ICMP的这种通知消息会使用IP进行发送。因此,从路由器2返回的ICMP包会按照往常的路由控制先经过路由器1在转发给主机A收到该ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生问题的原因

ICMP报文格式

在这里插入图片描述
ICMP的消息大致可以分为两类

  1. 通知出错原因的错误消息
  2. 用于诊断的查询消息
类型(十进制数)内容
0回送应答(Echo Reply)
3目标不可达(Destination Unreachable)
4原点抑制(Source Quench)
5重定向改变路由(Redirect)
8回送请求(Echo Request)
9路由器公告(Router Advertisement)
10路由器请求(Router Solicitation)
11超时(Time Exceeded)
17地址子网请求(Address Mask Request)
18地址子网应答(Address Mask Reply)

ping命令

在这里插入图片描述

  • 注意,此处ping的是域名,而不是URL!一个域名可以通过DNS解析成IP地址
  • ping命令不光能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存周期)。
  • ping命令会先发送一个ICMP Echo Request给对端
  • 对端接收到之后,会返回一个ICMP Echo Reply
    在这里插入图片描述

telnet是23端口,ssh是22端口,那么ping是什么端口
注意:ping命令基于ICMP,是在网络层。端口号,是传输层的内容。在ICMP中根本不关注端口号这样的信息。

traceroute命令

也是基于ICMP协议实现,能够打印出可执行程序主机到达目标主机之间经历了多少路由器
在这里插入图片描述

NAT

之前我们讨论过,IPv4协议中,IP地址数量不够用的问题。
NAT(Network Address Translation,网络地址转换)技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能

  • NAT能够将私有IP对外通信时转为全局IP。也就是一种将私有IP和全局IP相互转化的技术方法。
  • 很多学校、家庭、公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP。
  • 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的。

NAT工作机制

在这里插入图片描述

  • NAT路由器将源地址10.0.0.0.10替换成全局的IP地址202.244.274.37
  • NAT路由器收到外部的数据时,又会到目标IP从202.244.174.37替换回10.0.0.10
  • NAT路由器内部,有一张自动生成的,用于地址转换的表
  • 当10.0.0.10向163.221.120.9发送数据时就会生成表中的映射关系

NAPT

问题来了,如果在局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机呢
这时候,提出了NAPT(Network Address Ports Translation,网络端口地址替换),使用IP + Port来建立这个关联关系。
在这里插入图片描述
主机163.221.120.9的端口号是80,LAN中有两个客户端10.0.0.10和10.0.0.11同时进行通信,并且这两个客户端的本地端口都是1025。此时,仅仅转换IP地址为某个全局地址202.244.274.37,会令转换后的所有数字完全一致。为此,只要将10.0.0.11的端口号映射为1026就可以解决问题
这种关联关系也是由NAT路由器自动维护的。例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接后,就会删除这个表项。

NAT潜在问题

由于NAT(NAPT)都依赖于自己的转换表,因此会有如下几点问题:

  • 无法从NAT的外部向内部服务器建立连接
  • 转换表的生成与转换操作都会产生一定的开销
  • 通信过程中一旦NAT遇到异常需要重启时,所有的TCP连接都将被重置
  • 即使配置两台NAT做容灾备份,TCP连接还是会被断开

NAT潜在问题的解决

解决NAT上述潜在的问题有两种方法

  1. 改用IPv6,在IPv6的环境下可用的IP地址范围有了极大的扩展,以至于公司或家庭中的所有设备都可以配置一个全局IP地址。使用NAT就是以地址复用的方式来解决地址不够用的问题,如果地址完全够用的话,就不用使用NAT技术了。但是IPv6的普及到现在为止都远不及人们的预期。
  2. 即使是在一个没有NAT的环境里,根据所制作的应用,用户可以完全忽略NAT的存在而继续进行通信。在NAT内侧(私有IP地址的一边)主机上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT的外侧。而NAT并不知道这个虚拟包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这时,如果转换表构造合理,那么还能实现NAT外侧的主机与内侧的主机建立连接进行通信。有了这个方法,就可以让那些出在不同NAT内侧的主机之间也能够进行相互通信。此外,应用还可以与NAT路由器进行通信生成NAT表,并通过一定的方法将NAT路由器上附属的全局IP地址传给应用
    如此一来,NAT外侧与内侧可以进行通信,这种现象叫做NAT穿越。于是NAT那个无法从NAT的外部向内部服务器建立连接的问题也就迎刃而解了。而且这种方法与已有的IPv4环境的兼容非常好,即使不迁移到IPv6也能通信自如。处于这些优势,市面上已经出现了大量与NAT紧密结合的应用。
    然而,NAT友好的应用程序也有它的问题。例如,NAT的规范越来越复杂,应用的实现变得更耗时。而且应用一旦运行在一个开发者未预想到的特殊网络环境中时,会出现无法正常工作、遇到状况时难于诊断等问题

NAT和代理服务器

路由器往往都具备NAT设备的功能通过NAT设备进行中转完成子网设备和其他子网设备的通信过程
代理服务器看起来和NAT设备有一点像客户端向代理服务器发送请求代理服务器将请求转发给真正要请求的服务器服务器返回结果后,代理服务器又把结果回传给客户端

NAT和地阿里服务器的区别?

  • 从应用上讲,NAT设备是网络基础设施之一,解决的是IP不足的问题代理服务器则是更贴近具体应用,比如通过代理服务器进行翻墙,另外像迅游这样的加速器,也是使用代理服务器。
  • 从底层实现上讲,NAT工作在网络层直接对IP地址进行替换代理服务器往往工作在应用层
  • 从使用范围上讲,NAT一般在局域网的出口部署代理服务器可以在局域网做也可以在广域网做也可以跨网
  • 从部署位置上看,NAT一般集成在防火墙,路由器等硬件设备上代理服务器则是一个软件程序,需要部署在服务器上

代理服务器是一种应用比较广的技术

  • 翻墙:广域网中的代理。
  • 负载均衡:局域网中的代理。

负载均衡,英文名为Load Balance,其含义就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务程序和其它主要任务服务器等,从而协同完成工作任务
负载均衡构建在原有网络结构上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

代理服务器分为正向代理和反向代理
举例说明
假如我女朋友很喜欢韩国的化妆品。
我国我自己去韩国买是很不方便的,但是可以让我在韩国的表姐去超市买了寄给我,此时超市看到的卖家是我表姐,我的表姐就是“正向代理”。
后来找我表姐买化妆品的人太多了,我表姐觉得天天去超市太麻烦,干脆去超市买了一大批化妆品屯在家里,如果有人来找她代购,就直接把屯在家里的货发出去,而不必再去超市,此时我表姐就是“反向代理”。
正向代理用于请求的转发(例如借助代理绕过反爬虫)。
反向代理往往作为一个缓存。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值