目录
一.DNS协议
1.DNS背景
2.域名简介
3.域名解析过程
4.使用dig工具分析DNS过程
二.ICMP协议
1.ICMP的功能
2.ICMP协议格式
3.PING命令
4. 容易掉进去的坑
5.traceroute命令
三.NAT技术
1.NAT技术背景
2.NAT IP转换过程
3.NAPT
3.NAT技术的缺陷
4.NAT和代理服务
四.交换机-工作在数据链路层
1.交换机的特点
2.转发方式
3.交换机工作原理
4.以太网自学习功能
一.DNS协议
1.DNS背景
TCP/IP中通过IP地址和端口号的方式,来确定网络中一个主机上的一个程序。但IP地址是一长串数字,并不便于人们记忆,于是人们发明了一种叫做主机名的东西,并用hosts文件夹来描述主机名和IP地址之间的对应关系。
①最初,这个hosts文件是由互联网信息中心(SRI-NIC)来管理的。
- 如果一个新计算机要接入网络,或者某个计算机IP变更,都需要到信息中心申请变更hosts文件。
- 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网。
- 当用户通过域名访问互联网服务时,会先通过域名在本地的hosts文件中找到其对应的IP地址,然后再用这个IP地址去访问对应的服务。
②但这样太麻烦了,于是产生了DNS系统。
- 由一个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。
- 如果新计算机要接入网络,或者某个计算机IP变更,就需要将对应信息注册到数据库中。
- 当用户通过域名访问互联网服务时,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址。
③至今,我们的计算机上仍然保留了hosts文件,这个hosts文件当中一般存储的是主机名与IP地址之间的映射,用户也可以在hosts文件中自主添加域名和IP映射关系,在域名解析的过程中会优先查找hosts文件的内容。
2.域名简介
域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称,例如www.baidu.com。
- com:一级域名,表示这是一个工商企业域名。同级的还有.net(网络提供商)和.org(开源组织或非盈利组织)等。
- baidu:二级域名,一般对应的就是公司名。
- www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。
3.域名解析过程
(1)分类
- 首先会在浏览器的DNS缓存中去查询是否有对应的记录,如果查询到记录就可以直接得到对应的IP地址,完成解析。
- 如果在浏览器的DNS缓存中没有找到,就会去查询操作系统中的DNS缓存,如果查询到对应的IP地址则完成解析。
- 如果在操作系统的DNS缓存中没有找到,就会去查找本地的hosts文件,如果查询到对应的IP地址则完成解析。
- 如果在本地的hosts文件中也没有找到,就会去本地DNS服务器中查找。本地DNS服务器IP地址一般由本地网络服务商提供,如电信、移动等公司,一般通过DHCP自动分配。目前使用的比较多的是谷歌提供的公用NDS 8.8.8.8和国内公用DNS 114.114.114.114。如果在本地DNS服务器中有对应域名的缓存,则直接返回对应的IP地址,完成解析。
- 如果本地DNS服务器中仍然没有找到,那么本地DNS服务器就会拿着域名去根DNS服务器中询问,根DNS服务器会告诉本地DNS顶级域名服务器的IP地址。
- 本地DNS拿到顶级域名服务器的IP地址后,就会拿着域名去找顶级DNS服务器,顶级域名服务器会告诉本地DNS权威域名服务器的IP地址。
- 本地DNS服务器拿着域名去权威域名服务器中,查询域名对应的IP地址,最终将该域名对应的IP地址返回给浏览器,此时整个域名解析过程就完成了。
(2)解析要点
- 当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP数据报方式发给本地域名服务器(使用UDP为了减少开销)。本地域名服务器查找到域名后,把对应的IP地址放回在应答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。
- 若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。
- 域名解析的过程:通过特定的协议去请求根据一个域名字符串得到IP字符串的过程。
(3)域名解析底层使用的协议是UDP,DNS是应用层协议,传输层是UDP,为什么是UDP?
因为UDP足够简单,直接向对方请求有了就拿来,没了就拉倒,大不了再请求其他的服务器。不同层级的域名解析是有不同的处理能力的
(4)为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
(5)补充
- 有可能漯河的一台主机想访问洛阳的一台主机,此时漯河的域名解析服务器做不了,其实我们的域名解析服务器也是被组织起来的,当他们之间跨区访问时本地区的搞不定时会向上报告,向上面追溯对应的域名解析,所以呢在全球这样不断地追溯之下,不可能你的合法域名不存在!
- 全球的域名都是需要去申请的,域名都是在我们的相关机构组织结构当中保存好的,一定能找到,各种服务器找完没有就直接去根域名服务器去找,总之一定能找到,只要是合法的。
4.使用dig工具分析DNS过程
- 开头位置是dig工具的版本号。
- 第二部分是服务器返回的详情,其中status参数为NOERROR表示查询成功。
- QUESTION SECTION表示待查询的域名。
- ANSWER SECTION表示查询的结果,首先www.baidu.com被查询成了www.a.shifen.com,而最终www.a.shifen.com被查询成了两个具体的IP地址。
- 最下面是一些结果统计,包含查询时间和DNS服务器的地址等
二.ICMP协议
- ICMP协议是一个 网络层协议
- 一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因
1.ICMP的功能
(1)ICMP的主要功能包括:
(2)示例
2.ICMP协议格式
(1)ICMP大概分为两类报文。
(2)ICMP包常见类型
3.PING命令
- ping命令是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常。
- 注意,此处ping的是百度的域名,该域名会由DNS解析成IP地址。
- ping命令不仅能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存时间)。
- ICMP是在系统层面上自动完成,是不会上传到传输层的,在网络层自动分析,填充。
- ping命令会先发送一个ICMP Echo Request给对端。
- 对端接收到之后,会返回一个ICMP Echo Reply。
如何确定一台主机活着呢?
- 每隔一段时间向主机发送ICMP ,ping一下如果结果是OK的,则主机还在,否则就有问题。这种机制叫做--心跳机制
4. 容易掉进去的坑
telnet对应的端口号是23,ssh对应的端口号是22,那ping对应的端口号是多少?
- ping命令是基于网络层的ICMP协议,而端口号是属于传输层的内容,因此ICMP协议根本就不关心端口号这样的信息
- 因此,ping命令实际是绕过了传输层的,在Linux当中实际也有绕过传输层的一套网络编程接口,叫做原生套接字。
5.traceroute命令
- traceroute命令也是基于ICMP协议实现的,traceroute命令可以遍历数据包传送到目标主机所经过的所有路由器。
- traceroute命令底层实际是通过增加存活时间(TTL)值来实现的。
- 因为每当数据包经过一个路由器,其TTL值就会减1,当TTL值减为0时对应路由设备就会将该数据包丢弃,并传送一个ICMP TTL数据包给发送主机。
- 因此traceroute命令底层可以发出多个数据包,并给这些数据包设置不同的TTL值,从1增加直到最后的主机收到。
三.NAT技术
- NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
1.NAT技术背景
在IPv4协议中,IP地址数量不足是一个大问题,而NAT技术就是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。
- 在进行对外通信时,NAT能够将私有IP经过一系列替换操作最终转为全局IP,也就是说,NAT是一种将私有IP和全局IP相互转化的技术方法。
- 装有NAT软件的路由器叫做NAT路由器,所有使用私有IP的主机在和外界通信时,都要在NAT路由器上将其私有IP转换成全局IP。
- 很多学校、家庭、公司内部每个终端设置的IP都是私有IP,而只在路由器或必要的服务器上设置全局IP。
- 全局IP要求唯一,但是私有IP不需要,在不同的局域网中出现相同的私有IP是完全不影响的。
2.NAT IP转换过程
(1)主机A向服务器发起数据请求的过程中,数据包中IP地址的转换过程如下:
- 刚开始,该数据包当中的源IP地址就是主机A的私有IP地址,目的IP地址就是服务器的公网IP地址。
- 当数据包经过NAT路由器时,路由器会将该数据包的源IP地址替换成自己的WAN口IP地址,此时该数据包的源和目的IP地址就都是公网IP了。
- 该数据包在互联网中经过各种路由转发,最终到达服务器主机。
- 服务器收到主机A的数据请求并处理后,就会对主机A发来的请求进行响应
(2)服务器向主机A进行响应的过程中,数据包中IP地址的转换过程如下:
- 刚开始,该数据包当中的源IP地址就是服务器的公网IP地址,目的IP地址就是路由器的WAN口IP地址。
- 数据包在互联网中经过各种路由转发,到达主机A所在局域网的NAT路由器,此时路由器会将该数据包的目的IP地址替换成主机A的私有IP地址。
- 最终路由器就会将该数据包转发给局域网中的主机A。
- 需要注意的是,因为主机A向服务器发起数据请求时,该数据包当中的源IP地址被替换成了NAT路由器的WAN口IP地址,相当于是该路由器代替主机A向服务器发起了数据请求,因此服务器发出的响应数据包的目的IP地址应该是NAT路由器的WAN口IP地址
3.NAPT
如果局域网内 , 有多个主机都访问同一个外网服务器 , 那么对于服务器返回的数据中 , 目的 IP 都是相同的. 那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机 ?
- 这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系
(1)地址转换表 (只有IP)
- 当局域网当中的主机要访问外网时,NAT路由器会将这些数据包的源IP地址替换成自己的WAN口IP地址。
- 当外网发来响应数据时,NAT路由器又会将响应数据包的目的IP地址替换成局域网中对应主机的IP地址。
- 那NAT路由器是如何判断,应该将从外网收到的响应数据包转发给局域网中的哪一台主机呢?
- 实际在NAT路由器内部,有一张自动生成的,用于地址转换的表。
- 该转换表中维护的就是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系。
- 局域网中的主机第一次向外网发起数据请求时,就会生成表中的映射关系。
- 比如在TCP建立连接时,会建立对应的映射关系,在TCP断开连接后,就会删除对应的映射关系。
①但如果转换表中维护的只是局域网中主机的私有IP,与其对应访问的外网当中的某个公网IP之间的映射关系,那么就会出现某些问题。
②此时这张转换表只能保证从左到右的唯一性,而不能保证从右到左的唯一性,当服务器发来响应数据时,该数据包中的目的IP地址都是路由器的WAN口IP,此时NAT路由器就无法判断该数据包应该转发给主机A还是主机B,此时就需要用到NAPT技术。
(2)NAPT (IP+PORT)
- NAPT(Network Address Port Translation,网络地址端口转换),可以将多个内部地址映射为一个合法公网地址。
- 当局域网中的主机向外网发送数据时,路由器会将该数据包的源IP地址替换为自己的WAN口IP地址,并建立该主机私有IP与其对应访问的公网IP之间的映射关系。
- 但如果局域网中的多台主机同时访问同一个外网服务,当路由器收到外网发来的响应数据时,路由器无法判断该响应数据应该转发给局域网中的哪台主机,因为该局域网中所有主机的数据包都由路由器代替发送了,因此发来的响应数据包的目的IP地址都是路由器的WAN口IP地址。
- 于是NAPT在建立转换表的映射关系时,除了建立局域网中私有IP与其对应访问的公网IP之间的映射关系外,还会加上一个由NAT路由器选定的端口号。
- 此时当局域网中的多台主机同时访问同一个外网服务时,虽然外网发来的响应数据的目的IP地址都是路由器的WAN口IP,但发给局域网中不同主机的响应数据对应的目的端口号是不同的,此时路由器就能通过IP+Port的方式来区分发给不同主机的数据包。
①此时这张转换表既能保证从左到右的唯一性,也能保证从右到左的唯一性。
- 当服务器发来的响应数据到达路由器时,虽然服务器发给主机A和主机B的数据包对应的目的IP地址是一样的。
- 但路由器是用自己的1025号端口代替主机A进行数据请求的,而用的是1026号端口代替主机B进行数据请求的。
- 因此现在路由器可以继续根据数据包的源端口号,来判断应该将该数据包转发给主机A还是主机B,进行对数据包中的目的IP地址和目的端口号进行替换,然后转发给局域网内对应的主机。
②为什么反向查表—定是成功的?
- IP+ port可以表示任何一个网络当中的唯一的一个进程,它的这种映射关系是IP+port,是一对,所以他们互为Key值
③今天我们把数据发出去,路由器不是简单地把IP进行替换,而是可能有端口的替换,并且在路由器当中帮我们构建了一张IP+port的一种互为Key值的映射表,这样可以正向出去,也可以反向查表,确定这个报文转给哪个主机。
④商用路由器要维护更大的表结构,查询算法更优,价格更贵。
3.NAT技术的缺陷
NAT技术进行私有IP和公网之间的替换,主要就是依赖NAT路由器当中维护的网络地址转换表,但这张转换表也体现出了NAT的一些缺陷:
- 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。
- 转换表的生成和销毁都需要额外开销。
- 通信过程中一旦NAT设备异常,即使存在设备,所有的TCP连接也都会断开。
4.NAT和代理服务
(1)正向代理
①正向代理,是一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端。
②比如公司内部一般都会有自己的服务器,当我们使用公司内网上网时。
- 我们对外网发起的数据请求,首先会转发到公司的这台服务器上,然后由公司的这台服务器代替你对外网进行访问。
- 当公司的服务器收到对应外网的响应数据后,再由公司的这台服务器将数据转发给你。
③正向代理的好处:
- 正向代理最大的一个好处就是可以加速资源访问。
- 比如公司中大量员工都要访问外网的同一个资源,那么正向代理服务器就可以将对应的资源缓存到本地,此时当其他人要访问该资源时,直接在正向代理服务器就可以获取,而不需要再次进行外网访问。
④饭强
- 如果是访问Google,半路就拦截了,运营商会对数据进行关键字查找,找到敏感词汇就会禁止访问
- 此时我们弄一个代理服务器,两台主机之间设置好秘钥,对通信数据进行加密解密。
(2)反向代理
①百度服务器
- 百度的服务器是有许多的
- 现在有100w用户访问百度服务器,80w个用户都在访问主机IP1,造成个别机器提供服务压力大,而其他机器处于闲置中
- 反向代理服务器可以转发客户端的request,设置转发规则,近似保证每台机器的请求数量是较为平均的,这就是反向代理的负载均衡!
- 除了有所谓的正常请求也有许多非法请求,代理服务器相当于一层软件屏障,部署一些防火墙软件,直接屏蔽了。
- 服务器处理完请求返回的时候可以直接返回给客户端不再经过代理服务器
②腾讯云服务器
- xshell请求的是腾讯云的代理服务器,我们使用的公网IP是腾讯云模拟出来的
- bind不能绑定云服务器的公网IP
(3)正向代理和反向代理的异同
正向代理和反向代理的相同点:
- 正向代理服务器和反向代理服务器都是位于客户端和服务器之间的。
- 正向代理服务器和反向代理服务器的主要工作,都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端
正向代理和反向代理的不同点:
- 正向代理是客户端的代理,帮助客户端访问其无法访问的服务器资源的,而反向代理则是服务器的代理,帮助服务器做负载均衡、安全防护等工作的。
- 正向代理一般是客户端架设的,比如公司的正向代理服务器是公司作为客户端架设的,而反向代理一般是服务端架设的,比如百度的反向代理服务器是百度作为服务端架设的。
- 正向代理中,服务器不知道真正的客户端到底是谁,服务器认为正向代理服务器就是真实的客户端,而反向代理中,客户端不知道真正的服务器是谁,客户端认为反向代理服务器就是真实的服务器。
(4)NAT和代理服务器的区别
NAT和代理服务器都是代替我们向服务器发起数据请求的,但它们有如下区别:
- 从应用上讲,NAT设备是网络基础设备之一,解决的是IP不足的问题,而代理服务器则是更贴近具体应用,比如通过代理服务器进行,另外像迅游这样的加速器,也是使用的代理服务器。
- 从底层实现上讲,NAT工作在网络层,直接对IP地址进行替换,而代理服务器往往工作在应用层。
- 从使用范围上讲,NAT一般在局域网的出口部署,而代理服务器可以在局域网代理,也可以在广域网代理,也可以跨网代理。
- 从部署位置上看,NAT一般集成在防火墙、路由器等硬件设备上,而代理服务器则是一个软件程序(比如Nginx和Apache),需要部署在服务器上。
四.交换机-工作在数据链路层
1.交换机的特点
- 以太网交换机的每个端口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式。
- 以太网交换机还具有并行性,即能同时连通多对端口, 使多对主机能同时通信。
- 相互通信的主机都独占传输媒体,无碰撞地传输数据。换句话说,每一个端口和连接到端口的主机构成了一个碰撞域,具有 N个端口的以太网交换机的碰撞域共有N个。
- 以太网交换机的端口还有存储器,能在输出端口繁忙时把到来的帧进行缓存。因此,如果连接在以太网交换机上的两台主机,同时向另一台主机发送帧,那么当这台主机的端口繁忙时,发送帧的这两台主机的端口会把收到的帧暂存一下,以后再发送出去。
- 以太网交换机是一种即插即用设备,其内部的帧交换表(又称为地址表)是通过自学习算法自动地逐渐建立起来的。实际上,这种交换表就是一种内容可寻址存储器。以太网交换机由于使用了专用的交换结构芯片,用硬件转发收到的帧,其转发速率要比使用软件转发的网桥快很多。
2.转发方式
①存储转发方式
- 数据帧先缓存,检验正确性,正确转发, 错误丢弃。延迟大,可靠性高,支持不同速率的端口交换。
② 直通方式
- 接收数据帧的同时就立即按数据帧的目的MAC 地址决定该帧的转发接口,延迟小,可靠性低,不支持不同速率的端口交换。
- 缺点:不检查差错就直接将帧转发出去,有可能转发无效帧。
③在某些情况下,仍需要采用基于软件的存储转发方式进行交换。例如,当需要进行线路速率匹配、协议转换或差错检测时。
3.交换机工作原理
以太网交换机工作于数据链路层,是一种基于MAC(Media Access Control,介质访问控制)地址识别、完成以太网数据帧转发的网络设备。
- 1,交换机上用于链接计算机或其他设备的插口称作端口。计算机借助网卡通过网线连接到交换机的端口上。网卡、交换机和路由器的每个端口都具有一个MAC地址,。交换机在端口上接受计算机发送过来的数据帧,根据帧头的目的MAC地址查找MAC地址表然后将该数据帧从对应端口上转发出去,从而实现数据交换。
- 2,交换机的工作过程可以概括为“学习、记忆、接收、查表、转发”等几个方面:通过“学习”可以了解到每个端口上所连接设备的MAC地址;将MAC地址与端口编号的对应关系“记忆”在内存中,生产MAC地址表;从一个端口“接收”到数据帧后,在MAC地址表中“查找”与帧头中目的MAC地址相对应的端口编号,然后,将数据帧从查到的端口上“转发”出去。
- 3,交换机分割冲突域,每个端口独立成一个冲突域。每个端口如果有大量数据发送,则端口会先将收到的等待发送的数据存储到寄存器中,在轮到发送时再发送出去。
4.以太网自学习功能
- A 先向B发送一帧,从接口1进入到交换机。交换机收到帧后,先查找交换表,没有查到应从哪个接口转发这个帧(在MAC地址这一列中,找不到目的地址为B的项目)。接着,交换机把这个帧的源地址A和接口1写入交换表中,并向除接口1以外的所有接口广播这个帧(这个帧就是从接口1进来的,当然不应当把它再从接口1转发出去)。
- 广播发送可以保证B收到这个帧,C和D将丢弃这个帧,因为目的地址不对。只B才收下这个目的地址正确的帧。这也称为过滤。
- 从新写入交换表的项目(A,1)可以看出,以后不管从哪一个接口收到帧,只要其目的地址是A,就应当把收到的帧从接口1转发出去。这样做的依据是:既然A发出的帧是从接口1进入到交换机的,那么从交换机的接口1转发出的帧也应当可以到达A。
- 假定接下来B通过接口3向A发送一帧。交换机查找交换表,发现交换表中的MAC地址有A。表明要发送给A 的帧(即目的地址为A的帧)应从接口1转发。于是就把这个帧传送到接口1转发给A。显然,现在已经没有必要再广播收到的帧。交换表这时新增加的项目(B,3),表明今后如有发送给B的帧,就应当从接口3转发出去。
- 经过一段时间后,只要主机C和D也向其他主机发送帧,以太网交换机中的交换表就会把转发到C或D应当经过的接口号(2或4)写入到交换表中。这样,交换表中的项目就齐全了。要转发给任何一台主机的帧,都能够很快地在交换表中找到相应的转发接口。
- 考虑到有时可能要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间。过期的项目就自动被删除。用这样的方法保证交换表中的数据都符合当前网络的实际状况