前言
作者:小蜗牛向前冲
名言:我可以接受失败,但我不能接受放弃
如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正
目录
一、认识以太网
1、局域网中主机的通信
2、认识以太网
3、基于MAC协议在谈局域网中主机的通信
二、ARP协议
1、什么是ARP协议
2、ARP数据报的格式
3、ARP欺骗
三、DNS协议
1、DNS产生的背景
2、ICMP协议
四、NAT技术
1、NAT技术背景
2、NAT和代理服务器
本期学习:认识以太网,了解APR协议,DNS协议,ICMP协议,理解NAT技术和代理服务器
在前面博客中我们学习了,应用层,传输层,网络层的相关协议,我们知道报文的传递是自顶向下的,报文要想发送的网络中要经过最底层数据链路层的转发,下面我们继续学习在数据链路层中的相关知识。
一、认识以太网
在认识以太网前,我们先重新在了解一下在局域网主机是如何进行通信的
1、局域网中主机的通信
局域网(LAN)是指在相对较小的地理范围内建立的计算机网络,通常是在单个建筑物、办公室、校园或家庭中。局域网允许多台计算机和其他网络设备(如打印机、路由器等)之间进行数据通信和资源共享,而无需依赖互联网或广域网。
那怎么理解局域网中的主机的通信
感性理解:
假设我们现在在一间教室中,老师对全班同学说,张三你作业为什么没做?这个信息全班同学都听到了,但是只会有一个叫张三的同学去向老师解释,其他同学都会忽略这个信息,因为他们知道老师并不是对他们说的。
在上面小故事中,教室相当于局域网,同学们相对于众多主机,老师向班同学说的话就相当于报文。老师是通过向全班同学广播信息,向张三传递信息,但是信息是有对象的,所有其他同学(其他的主机)会自动忽略这条广播信息,相对当于老师是在对张三通信。
所以在局域网中通信的方式是通过广播信息进行的。
我们知道每台主机都有他自己的标识,那标识从哪里来,这就来谈谈下面的以太网
2、认识以太网
概念理解
- "以太网" 不是一种具体的网络, 而是一种技术标准;
- 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
- 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等; 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;
以太网帧格式
以太网的帧格式如下所示:
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
- 帧末尾是CRC校验码
对比理解MAC地址和IP地址
- IP地址描述的是路途总体的 起点 和 终点;
- MAC地址描述的是路途上的每一个区间的起点和终点
在用MAC帧(以太网帧)传输数据会有一个叫MTU{以太网的最大传输单元}(在前面博文中解释过)来限制了传输速度,我们可以通过ifconfig命令查MTU
ifconfig
//命令查MTU
在Unix、Linux和类Unix系统中,ifconfig
命令用于查看和配置计算机上的网络接口的状态和参数。
显示网络接口信息: 使用
ifconfig
可以显示当前计算机上所有网络接口的配置信息,包括接口名称、IP地址、子网掩码、MAC地址、数据包统计信息等。配置网络接口:
ifconfig
可以用于配置网络接口的各种参数,例如设置IP地址、子网掩码、广播地址、MTU(最大传输单元)等。激活/停用网络接口: 可以使用
ifconfig
命令来激活或停用特定的网络接口。修改MAC地址: 在某些情况下,可以使用
ifconfig
命令来修改网络接口的MAC地址。显示网络接口统计信息:
ifconfig
还可以显示有关网络接口的数据包传输统计信息,例如接收的数据包数量、发送的数据包数量、错误数量等。
3、基于MAC协议在谈局域网中主机的通信
假设我们现在一个局域网中有8台主机,现在M1想M8发送信息,是如何通过MAC帧协议做到的?
M1会以 广播的形式将报文发送到局域中,所有主机都收到了,但是他们查看目的IP不是自己就将报文丢弃。只有M8是目标主机,他收到报文,会到报文做报头和有效载荷的分离,拿到信息后,在对M1进行应答。
但是我们在细细想一下,在网络发送信息是非常频繁的,可能所有主机的都在做接收报文,对接收报文做出应答的工作。
但在如果众多主机都同时发送消息,他们在传输的时候,本质上就是网线上光电信号的传输,那么就会造成干扰。
在局域网中我们将这种现象称为数据碰撞。
为了防止出现这种现象就有令牌环网,以太网这样的技术。
简单的说一下,令牌环网其实就是给每一个要通信的主机一块令牌,主机通完信息后就将令牌传输给另外的主机,达到局域网中始终只有一个主机进行发送信息。
而以太网就更加的简单了,有一个碰撞检测和碰撞避免算法,达到局域网中始终只有一个主机进行发送信息。
其实局域网就相当于一份临界资源,以太网根据碰撞检测和碰撞避免算法,就可以达到在任何时刻只有一台主机能够向临界资源区中写入信息。
了解完上面的知识,来思考一下问题?
问题1因为碰撞域的存在,一台主机发送信息,一次信息的字节数是越大越大,还是越小越好?
肯定是越小越好,虽然信息的发送是光速,但是我们极端的想要是数据无尽大,那么在传输的时候,肯定会发送碰撞。所以为了保证传输效率才会有TUM来限制报文在数据链路层传输大小
问题2交换机在碰撞域中的作用是什么?
- 识别局部碰撞,对于发生碰撞的数据不进行转发。
- 那假设M1和M6的数据发生了碰撞 ,交换机对左侧的碰撞不进行转发,那么右侧发生碰撞的概率就降低了。
二、ARP协议
我们知道在数据链路层的报文会被封装为MAC帧,发生给目标主机的,这就告诉我们必须清楚目标目标主机的MAC地址。
那我们是怎么得到的,就要通过在网络中经过路由器一跳获取到,具体是怎么实现的呢?
这和ARP协议有关
1、什么是ARP协议
ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网 络层之间的协议;
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.
- 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
- 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢 弃;
- 因此在通讯前必须获得目的主机的硬件地址;
那主机A是如何在网络中要到向主机BMAC地址的?
- 首先当主机A的报文被封装为MAC帧发到连接主机B的路由器时候,(这里假设路由器没有缓存存主机B的MAC地址)。
- 路由器就在他所连接的局域网网中广播ARP请求,就如上图那样询问目标主机的硬件地址
- 其中主机收到后,通过ARP协议的规定就会自动丢弃掉报文。
- 当主机B收到后,就会进行ARP应答,将自己的硬件地址发生给目标地址
上面我们说了那么多ARP协议,还不知道他长什么样子,一起去见见他吧!
2、ARP数据报的格式
有效载荷部分
- 硬件类型指链路层网络类型,1为以太网;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度对于以太网地址为6字节
- 协议地址长度对于和IP地址为4字节;
- op字段为1表示ARP请求,op字段为2表示ARP应答。
注意:
- 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
ARP协议的存在就是为获取目的主机的MAC地址,得到后并不是由他进行发生报文的,而是在将目标主机MAC地址封装为MAC帧在进行发送
3、ARP欺骗
ARP欺骗(ARP spoofing)是一种网络攻击技术,利用ARP(地址解析协议)的工作原理来欺骗网络中的其他设备,以获取数据流量或进行中间人攻击。ARP协议用于将IP地址映射到物理MAC地址,以便在局域网中进行通信。ARP欺骗攻击通常由恶意主机执行,它会发送虚假的ARP响应来欺骗网络中的其他设备,告诉它们欺骗者拥有目标IP地址对应的MAC地址。
ARP欺骗攻击的步骤如下:
监听网络流量: 攻击者首先在局域网中监听网络流量,以了解目标设备的IP地址和MAC地址。
发送虚假ARP响应: 攻击者向目标设备发送虚假的ARP响应,宣称自己拥有目标设备的IP地址,并提供自己的MAC地址。
ARP缓存污染: 目标设备接收到虚假的ARP响应后,会更新自己的ARP缓存表,将目标IP地址对应的MAC地址设置为攻击者的MAC地址。
中间人攻击: 一旦ARP缓存被修改,攻击者就可以接收到目标设备发送的所有数据流量,并且可以对数据进行窃听、篡改或重定向,实施中间人攻击
ARP欺骗攻击可能会导致网络中的数据泄露、信息窃取、会话劫持等安全问题。为了防止ARP欺骗攻击,可以采取一些防御措施,如使用静态ARP条目、ARP监控工具、网络入侵检测系统(IDS)、网络流量加密等。
三、DNS协议
DNS是一整套从域名映射到IP的系统
1、DNS产生的背景
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆. 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系
最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的
- 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.
- 载更新新版本的hosts文件才能正确上网.其他计算机也需要定期下
这样就太麻烦了, 于是产生了DNS系统.
- 个组织的系统管理机构,维护系统内的每个主机的IP和主机名的对应关系。
- 如果新计算机接入网络, 将这个信息注册到数据库中;
- 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.
至今, 我们的计算机上仍然保留了hosts文件. 在域名解析的过程中仍然会优先查找hosts文件的内容
cat /etc/hosts
//查看hosts文件
域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.
www.baidu.com
//百度的域名
域名使用 . 连接
- com: 一级域名. 表示这是一个企业域名.
- 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
- baidu: 二级域名, 公司名. www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格 式, 来表示主机支持的协议
2、ICMP协议
ICMP协议是一个 网络层协议 一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢 包了, IP协议并不能通知传输层是否丢包以及丢包的原因
ICMP主要功能包括:
- 确认IP包是否成功到达目标地址.
- 通知在发送过程中IP包被丢弃的原因.
- ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
- ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6
ping命令
ping
是一个常用于测试网络连接的命令行工具。它可用于检测主机之间是否能够互相通信,以及测量网络的延迟和丢包率。
要 ping Google 的公共 DNS 服务器(8.8.8.8),可以使用以下命令:
ping 8.8.8.8
一个值得注意的坑 :
有些面试官可能会问: telnet是23端口, ssh是22端口, 那么ping是什么端口? 千万注意!!! 这是面试官的圈套
ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息
traceroute命令
traceroute
是一个用于跟踪数据包从本地主机到目标主机之间的路径的网络诊断工具。它通过向目标主机发送一系列的数据包,并记录它们经过的路由器(或者说是跳点)来实现这一功能。在每一跳,traceroute
都会显示相应的延迟信息,以及该跳点的 IP 地址和域名(如果有)。
例如,要跟踪到 Google 的公共 DNS 服务器(8.8.8.8),可以使用以下命令:
traceroute 8.8.8.8
traceroute
会发送一系列的 UDP 数据包(在大多数情况下)或 ICMP 数据包到目标主机,每个数据包在 TTL(Time to Live)字段上设置不同的值。当一个数据包到达某一路由器时,它的 TTL 值会减少,当 TTL 达到零时,路由器会将该数据包丢弃,并向源主机发送一个 ICMP 错误报文,报告 TTL 过期。
通过观察返回的信息,可以了解数据包经过的路由器,以及从本地主机到目标主机的路径上的网络延迟情况。这对于排除网络连接问题和优化网络路径非常有用。
一些常用的 traceroute
选项包括:
-m max_ttl
:设置最大跃点数,即数据包允许经过的最大路由器数量。-q nqueries
:设置每个跃点上发送的数据包数量。-w waittime
:设置等待每个跃点的响应的超时时间。
注意,traceroute
可能会受到防火墙或网络策略的限制,而且不保证在所有网络环境中都能够正常工作。
四、NAT技术
1、NAT技术背景
之前我们讨论了, IPv4协议中, IP地址数量不充足的问题 NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能
- NAT能够将私有IP对外通信时转为全局IP.
- 也就是就是一种将私有IP和全局IP相互转化的技术方法: 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
- 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;
NAT IP转换过程
- NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
- NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
- 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
- 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系
那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同 的. 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机? 这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系
这种关联关系也是由NAT路由器自动维护的. 例如在TCP的情况下, 建立连接时, 就会生成这个表项; 在断开连接后, 就会删除这个表项
NAT技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制
- 无法从NAT外部向内部服务器建立连接;
- 装换表的生成和销毁都需要额外开销;
- 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开
2、NAT和代理服务器
路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.
代理服务器看起来和NAT设备有一点像. 客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务 器; 服务器返回结果后, 代理服务器又把结果回传给客户端.
么NAT和代理服务器的区别
- 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比 如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器.
- 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
- 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网
代理服务器是一种应用比较广的技术.
- 翻墙: 广域网中的代理.
- 负载均衡: 局域网中的代理.
代理服务器中的翻墙就不多说了,那什么是负载均衡呢?
在客户端本来是直接向服务器进行请求的,但是对于大公司的说,服务器肯定是有很多台的,但是用户不知道服务器那台工作已经负载了,可能存在一种情况,就用户一直请求公司的一台服务器吗,其他的服务器就闲着。这就导致了资源的分配不均衡,所有,现在我们在客户端到公司的服务器间在连接一台服务器(代理),专门用了合理的分配公司服务器的使用,这就是负载均衡。
代理服务器又分为正向代理和反向代理
正向代理
- 正向代理是代理服务器位于客户端和目标服务器之间的一种代理方式。
- 客户端向正向代理服务器发送请求,然后正向代理服务器将请求转发给目标服务器,最终将目标服务器的响应返回给客户端。
- 对客户端来说,目标服务器是不可见的,所有的请求和响应都经过正向代理服务器。
- 正向代理常用于增加访问控制和安全性,也可用于绕过防火墙、提供匿名性等。
反向代理
- 反向代理是代理服务器位于目标服务器和客户端之间的一种代理方式。
- 客户端向反向代理服务器发送请求,然后反向代理服务器将请求转发给一个或多个目标服务器,最终将其中一个目标服务器的响应返回给客户端。
- 对目标服务器来说,客户端是不可见的,所有的请求和响应都经过反向代理服务器。
- 反向代理常用于负载均衡、提供高可用性、安全性、缓存等。