目录

  • 1. 数据链路层的以太网协议
  • 2. ARP协议
  • 3. NAT协议
    • NAPT协议(动态NAT重载)
  • 4. DNS协议

1. 数据链路层的以太网协议

数据链路层的以太网协议本质上其实就是相邻设备之间的数据转发

以太网协议格式:

MAC地址:每一个网卡设备在出厂的时候都会拥有一个全球独一无二的MAC地址,MAC地址也被称为硬件的地址。

本质上是:6字节的整数,即uint8_t addr[6]。
可以在ifconfig(LINUX)中查看到对应的MAC地址。

Windows中可以使用ipconfig -all进行查看

以太网格式中的类型(2位):

表示的是上层使用了什么协议 (ip / ARP协议)。

有效载荷:[46 ~ 1500]字节

如果网络层递交给数据链路层的数据不够46字节,则会对数据进行相应补0的操作。1500字节刚好是MTU(最大传输单元)的上限。

CRC

校验帧尾,检验数据在传输过程中是否失真。

2. ARP协议

上面其实我们也谈到了以太网协议格式,我们可以看到格式中的目的地址和源地址指的是目的MAC地址和源MAC地址,换句话说,数据在数据链路层进行发生的时候,需要知道目标主机MAC地址,但是网络层的协议递交给数据链路层的数据仅仅包含目标主机的ip地址,我们无法获知其对应的MAC地址,那么,我们该如何获取目标主机的MAC地址呢?

换句话说:

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址。
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。
  • 因此在通讯前必须获得目的主机的硬件地址。

ARP协议就是用来解决此类问题的,他可以通过ip地址获取对应的MAC地址

注意:这里的ip地址本质上是通过路由项计算出来的接下来该条数据该去往的ip地址,而不是自己本身该去的ip地址。

因此,可以说ARP协议是介于网络层和数据链路层之间的协议,话句话来说就是ARP协议建立了主机 IP地址 和 MAC地址 的映射关系

ARP数据报格式

首先我们来看一下以太网首部的格式

  • 以太网目的地址:在ARP请求中,目的MAC地址填充为:0xFFFFFFFF,表示当前这条数据给子网当中的每一条机器都进行转发。
  • 以太网源地址:就是源MAC地址,就是当前主机的MAC地址。
  • 帧类型:上级协议(ARP协议)

28字节ARP请求/应答

  • 硬件类型:当前的网络类型:以太网、令牌环网。
  • 协议类型:要转换的地址类型,ip转换为MAC。
  • 硬件地址长度:表示MAC地址长度。
  • 协议地址长度:表示ip地址长度。
  • op:标识是请求还是应答

1:请求
2:应答

那么ARP又是如何知道MAC地址的呢?简单地说,ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。

假定主机A向同一链路上的主机B发送IP包,主机A的IP地址为172.20.1.1,主机B的IP地址为172.20.1.2,它们互不知道对方的MAC地址。

主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。也就是说,ARP请求包中已经包含了主机B的IP地址172.20.1.2由于广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同一个链路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A

总之,从一个IP地址发送ARP请求包以了解其MAC地址(ARP请求包还有一个作用,那就是将自己的MAC地址告诉给对方),目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造和网络通信中无需事先知道MAC地址究竟是什么,只要有IP地址即可。

ARP缓存表

如果每发送一个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量,因此,通常的做法是把获取到的MAC地址缓存(是指预见到同样的信息可能会再次使用,从而在内存中开辟一块区域记忆这些信息) 一段时间。即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆(记录IP地址与MAC地址对应关系的数据库叫做ARP表) 到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执行一次ARP,其对应的缓存内容都会被清除。不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络上被大量广播的可能性。

当然ARP是有老化时间的,老化时间为20min,会进行相应的更新。

arp协议只能在子网内部使用,只能给子网内部的机器进行广播arp请求。换句话说,只能获取子网内部机器的MAC地址

那么问题来了,IP地址和MAC地址缺一不可吗?

① 数据链路上只要知道接收端的MAC地址不就知道数据是准备发送给主机B的吗,那还需要知道它的IP地址吗?
② 只要知道了IP地址,即使不做ARP,只要在数据链路上做一个广播不就能发给主机B了吗?”那么,为什么既需要IP地址又需要MAC地址呢?

主机A想要发送IP数据报给主机B时必须得经过路由器C。即使知道了主机B的MAC地址,由于路由器C会隔断两个网络,还是无法实现直接从主机A发送数据报给主机B。此时,主机A必须得先将数据报发送给路由器C的MAC地址C1。


如此看来,IP地址和MAC地址两者缺一不可。于是就有将这两个地址相关联的ARP协议(为了避免这两个阶段的通信带来过多的网络流量,ARP具有对IP地址和MAC地址的映射进行缓存的功能。有了这个缓存功能,发送IP包时就不必每次都发送ARP请求,从而防止性能下降)。

3. NAT协议

NAT也叫地址转换协议

他的作用是:

  • 私网对公网请求的时候:将网络数据当中的私网的源ip地址转化成为公网的ip地址。
  • 公网对私网的应答:将网络数据当中的公网的目的ip地址转化成为私网的ip地址。

即:

  • 静态NAT:NAT协议,将一个私网和一个公网唯一进行映射管理。
  • 动态NAT:NAT管理的不止是一个公网ip,当私网数据到来的时候,选择一个空闲的ip进行映射。

NAT的工作机制:

如上图,以10.0.0.10的主机与163.221.120.9的主机进行通信为例。利用NAT,途中的NAT路由器将发送源地址从10.0.0.10转换为全局的IP地址(202.244.174.37)再发送数据。反之,当包从地址163.221.120.9发过来时,目标地址(202.244.174.37)先被转换成私有IP地址10.0.0.10以后再被转发(在TCP或UDP中,由于IP首部中的IP地址还要用于校验和的计算,因此当IP地址发生变化时,也需要相应地将TCP、UDP的首部进行转换)

总结一下就是:不管是静态NAT还是动态NAT,都没有缓解ipv4枯竭的问题,本质上还是一个私网IP一定要对应一个公网ip,才能访问互联网。

NAPT协议(动态NAT重载)

在进行私网ip转化为公网ip的时候,不仅仅将ip地址转换掉了,并且还将传输层的端口也转换掉了。

如图:

主机163.221.120.9的端口号是80,LAN中有两个客户端10.0.0.10和10.0.0.11同时进行通信,并且这两个客户端的本地端口都是1025。此时,仅仅转换IP地址为某个全局地址202.244.174.37,会令转换后的所有数字完全一致。为此,只要将10.0.0.11的端口号转换为1026就可以解决问题。如图所示,生成一个NAPT路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端A、B能同时与服务器之间进行通信。

这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接时发出FIN包的确认应答从表中被删除(UDP中两端应用进行通信时起止时间不一定保持一致,因此在这种情况下生成转换表相对较难) 。

注:在使用TCP或UDP的通信当中,只有目标地址、源地址、目标端口、源端口以及协议类型(TCP还是UDP)五项内容都一致时才被认为是同一个通信连接。此时所使用的正是NAPT。

在NAPT的场景下,一个公网ip,理论上最大可以转换多少个私网ip?

216 = 65536个,即 0 ~ 65535。

对NAT协议的总结:

  • NAT网关对于私网主机和公网主机而言,是透明的,双方在通信过程中是无感知的。
  • NAT网关会保存转换之后的映射关系,防止应答回来之后再次进行转换。
  • 私网 =》公网:是将网络数据当中的源ip地址修改为公网ip地址。
    公网 =》私网:是将网络数据当中的目的ip地址修改成为私网ip地址。
  • NAPT增加了端口的转换,就可以让一个公网ip服务多个私网主机。缓解了ip地址枯竭的问题
  • 数据只能先从私网到公网,不能从公网到私网。

4. DNS协议

DNS协议本身是应用层的协议,并且在传输层使用的UDP协议。也叫域名解析协议,他的作用就是将域名解析为ip地址。

域名:

一级域名:.com.cn.gov.us
二级域名:baidu.comjd.comtaobao.com
三级域名:baike.baidu.com

域名服务器:

根域名服务器:给其他域名服务器做授权使用
一级域名服务器:管理一级域名
二级域名服务器:管理二级域名
三级域名服务器:管理三级域名

域名解析的流程:

递归法解析:

迭代法解析:

以太网协议、ARP协议、NAT协议、DNS协议相关推荐

  1. 数据链路层 --- ARP,NAT,DNS协议

    数据链路层 以太网帧 ARP 协议 NAT协议 NAPT(NAT重载) DNS协议 数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间. 数据链路层在物理层提供的服务的基础上向网络层提供服 ...

  2. 协议分析---HTTP协议和DNS协议

    协议分析-HTTP协议和DNS协议 一.HTTP协议 1.HTTP协议简介 1.1 什么是超文本(HyperText) ?   包含有超链接(Link)和各种多媒体元素标记(Markup)的文本.这些 ...

  3. ARP协议与DNS协议详解

    文章目录 一.ARP协议 1.工作原理 2.以太网ARP请求/应答报文详解 3.ARP高速缓存的查看和修改 二.DNS协议 1.工作原理 2.DNS协议分析 一.ARP协议 1.工作原理 ARP协议能 ...

  4. 【计算机网络】Internet原理与技术2(因特网的路由协议RIP、OSPF、BGP,网络地址转换NAT,网络协议IPv6)

    Internet原理与技术 因特网的路由协议 自治系统与路由协议分类(IGP.EGP) 内部网关协议 - RIP [例]RIP路由信息表的交换 RIP工作过程 内部网关协议 - OSPF 外部网关协议 ...

  5. 实验十一 DNS 协议分析实验

    实验十一 DNS 协议分析实验 1.DNS 协议简介 DNS 是域名系统 (Domain Name System)的缩写,是一种分层次的.基于域的命名方案, 主要用来将主机名和电子邮件目标地址映射成I ...

  6. 计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统

    计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统 2022找工作是学历.能力和运气的超强结合 ...

  7. Linux:数据链路层——以太网协议、NAT协议、ARP协议和DNS协议

    Linux:数据链路层--以太网协议.NAT协议.ARP协议和DNS协议 以太网协议 以太网帧格式 MTU以及MTU对IP协议的影响 ARP协议 NAT协议 NAT IP转换过程 静态NAT 动态NA ...

  8. Linux·DNS协议、ICMP协议、NAT技术

    目录 DNS协议 DNS背景 ​编辑域名简介 域名解析过程 使用dig工具分析DNS过程 ICMP协议 ICMP功能 ICMP协议格式 ​编辑ping命令 一个值得注意的坑 traceroute命令 ...

  9. DNS协议、ICMP协议、NAT技术

    文章目录 DNS协议 DNS背景 域名简介 域名解析过程 使用dig工具分析DNS过程 ICMP协议 ICMP功能 ICMP协议格式 ping命令 一个值得注意的坑 traceroute命令 NAT技 ...

最新文章

  1. TensorFlow入门:Graph
  2. [SOJ1039]Phone Home(深搜,染色问题)
  3. VMWare安装Ubuntu18时卡住
  4. java衍生作用_java-如何从AffineTransform衍生的形状对象中“...
  5. 【剑指offer】面试题18:删除链表的节点(Java)
  6. 光电编码器的原理及应用场合_图解编码器应用,推荐收藏
  7. linux apache 多域名配置,apache-2.4.12基于域名访问的多虚拟主机配置
  8. 安全云盘项目(一):1.5 bufferevent服务端代码事件策略
  9. 【CLR】解析CLR的托管堆和垃圾回收
  10. python在线编辑器可视化_python软件——wxpython可视化编辑器 v4.1附使用教程
  11. 存储过程传递参数时出现类型转换错误!如:varchar转换为int时出错
  12. 2019-02-26-GCN资料
  13. [圣诞大礼][android控]平板电脑HD精品游戏软件合集
  14. 游戏加加:科学的算法+公平的引擎=最真实的BenchMark
  15. 遇到的一个网页排版问题
  16. Java实现扫码枪二维码自动跳转网页(基于键盘监听)
  17. matlab怎样求线性方程组,MATLAB线性方程组求解
  18. 利用AnyLogic软件搭建多智能体模型验证Lanchester方程线性律和平方律
  19. 【linux】运行run文件显示cannot execute binary file
  20. 如何区分前端BUG和后端BUG

热门文章

  1. php邮件群发管理系统源码
  2. Microsoft Defender for Office 365部署方案
  3. 金山Q管win10 锁定Edge算法分析
  4. jmeter压测步骤
  5. Python学习实例(一)温度转换
  6. 机器学习-人为设置函数方法和神经网络方法解决智能五子棋问题
  7. 机房收费系统之日结账,周结账--逻辑篇(日账单的各项金额代表什么?如何计算?)
  8. 高考改革不能只囿于考试改革
  9. 一文让你记住Pyspark下DataFrame的7种的Join 效果
  10. Transphporm-另一种模板引擎