文章目录

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

一、ARP协议

1.工作原理

ARP协议能实现任意网络层地址到任意物理地址的转换,在此只讨论从IP地址到以太网地址(MAC地址)的转换。

该协议主要工作流程是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其它机器都将收到这个请求,但只有目标机器会回应一个ARP应答,其中包含自己的物理地址

2.以太网ARP请求/应答报文详解

以太网ARP请求/应答报文的格式如图:

  • 硬件类型:定义物理地址的类型,1表示MAC地址
  • 协议类型:表示要映射的协议地址类型,0x800表示IP地址
  • 硬件地址长度:表示硬件地址的长度,单位字节,MAC地址长度为6
  • 协议地址长度:表示协议地址的长度,单位字节,IP(v4)地址长度为4
  • 操作:1代表ARP请求,2代表ARP应答,3代表RARP请求,4代表RARP应答
  • 后四个字段如其名,分别指定发送与接收端的以太网地址(MAC地址)和IP地址。

后4个字段的使用:

发送端填充除目的端以太网地址的其它三个字段,以构建ARP请求发送,接收端发现该请求的目的端IP地址是自己,就将自己的MAC地址填入,然后交换两个目的端地址和两个发送端地址,构建ARP应答返回

注意:虽然由上图可计算出一个ARP请求的长度为28个字节,再加上以太网帧头部和尾部的18个字节为46个字节。但由于部分实现要求以太网帧的数据部分至少46个字节,这种情况下一个ARP请求的以太网帧长度为64字节

3.ARP高速缓存的查看和修改

通常ARP会维持一个高速缓存,其中包含经常访问或最近访问的机器IP地址到物理地址的映射,这样可避免重复发送ARP请求。

Linux下可使用arp -a命令进行查看

Windows下可win+R快捷键,输入cmd进入黑窗口,arp -a命令查看

先将Linux的网关IP删除:

然后用到tcpdump工具进行抓包

开启另外一个终端,进行网络通信


可以看到前两个数据包显示了出来:

00:15:5d:25:c8:a4 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 172.23.192.1 tell 172.23.202.139, length 28

解析:

  • 00:15:5d:25:c8:a4:本机的物理地址
  • ff:ff:ff:ff:ff:ff:广播地址
  • ethertype ARP (0x0806):表示该以太网帧为ARP协议
  • length 42:该以太网帧的长度为42字节,因未计算最后4个字节CRC字段,实际为46字节。
  • Request :表示发送的是请求包
  • who-has 172.23.192.1 tell 172.23.202.139:谁是172.23.192.1就请将物理地址发送给72.23.202.139(我的局域网IP)
  • length 28:表示数据部分为28字节。

整句话的意思就是,我向当前局域网所有主机发送了一个ARP请求,谁的IP是172.23.192.1,就请将你的物理地址发送给我。

00:15:5d:27:ee:00 > 00:15:5d:25:c8:a4, ethertype ARP (0x0806), length 42: Reply 172.23.192.1 is-at 00:15:5d:27:ee:00, length 28

有了第一句请求,就有了第二句应答

物理地址为00:15:5d:27:ee:00向我发送了ARP应答数据包,告诉我IP地址为172.23.192.1的主机物理地址为00:15:5d:27:ee:00

现在再进行查看,本机ARP缓存中又有了网关IP和物理地址的映射了

我wget www.baidu.com,明明是下载的百度主页,为什么我说这是网关的IP和物理地址的映射呢?

因为我这是局域网,局域网主机只能通过网关与外界通信,所以第一步必须要先找到主机的物理地址。

二、DNS协议

上面我使用了www.baidu.com,但IP层其实只能通过IP进行定位主机。

但问题是,这么一连串的数字IP,普通人很难记忆,所以就有了DNS协议,将具有一定规范的名称与IP地址再进行一次映射。这就是我们常用的网站名,也称域名。

域名查询服务有多种实现方式,比如NIS(Network Information Service,网络信息服务),DNS和本地静态文件。这里只讲解DNS。

1.工作原理

DNS是一套分布式的域名服务系统,每个DNS服务器上都存着大量的机器名和IP地址的映射,并且是动态更新的。

DNS查询和应答报文的格式如图:

  • 16位标识:用于标记一对DNS查询和应答,用于区分一个DNS应答是哪个DNS查询的回应
  • 16位标志:用于协商具体的通信方式和反馈通信状态。细节如下图:
  • 后四个字段则分别指出DNS报文的最后四个字段的资源记录数目

    - QR:查询应答标志,0代表查询,1代表应答
    - opcode:查询应答的类型,0为标准查询,1为反向查询(IP获得域名),2为请求服务器状态。
    - AA:授权应答标志,仅有应答报文使用,1表示域名服务器是授权服务器
    - TC:截断标志,仅当DNS使用了UDP服务时使用。因UDP报文超过512字节就会被截断。
    - RD:递归查询标志。1表示执行递归查询,即目标DNS无法解析某个主机名,则交个其它其它DNS服务器,以此递归查询。0表示执行迭代查询,如果目标DNS无法解析某个主机名,则将自己知道的DNS服务器IP地址返回给客户端,供客户端参考。
    - RA:允许递归标志,仅供应答报文使用,1代表DNS服务器支持递归查询。
    - zero:未使用,必须为0
    - rcode:返回码,表示应答状态,如0表示无错误,3表示域名不存在

对于查询报文来说,一般包含1个查询问题,而应答资源记录数、授权资源记录数和额外资源记录数则为0。

对于应答报文来说,应答资源记录数至少为1,而授权资源记录数和额外资源记录数可为0或非0

查询问题的格式:

  • 查询名:以一定格式封装了要查询的主机域名
  • 16位查询类型:表示如何执行查询操作,类型A,值1,表示获取目标主机IP地址。类型CNAME,值5,表示获取目标主机的别名。类型PTR,值12,表示反向查询
  • 16位查询类:通常位1,表示获取因特网地址(IP地址)
    应答字段、授权字段和额外信息字段都使用资源记录(Resource Record,RR)格式,如图:
  • 32位域名:该记录中与资源对应的名字,格式与查询问题中的查询名字段相同。
  • 16位类型和16位类:与DNS查询问题对应字段相同
  • 32位生存时间:表示该查询记录可被本地客户端程序缓存多长时间,单位为秒。
  • 16位资源数据长度和资源数据:取决于类型字段,如类型A,资源数据是32位的IPv4地址,而资源数据长度为4.

2.DNS协议分析

方法与上面类似,先运行一个终端执行tcpdump进行抓包,再开启一个终端运行host命令使用DNS协议进行查询目标域名的IP地址。

这里指定了port domain,表示只抓取域名服务器的数据包,即DNS查询和应答报文

host命令指定-t A,表示使用A类型的查询类型。

输出如下:

IP 172.23.202.139.39654 > 172.23.192.1.53: 60805+ A? www.baidu.com. (31)
IP 172.23.192.1.53 > 172.23.202.139.39654: 60805- 3/0/0 CNAME www.a.shifen.com., A 220.181.38.149, A 220.181.38.150 (122)

格式为IP.端口 > IP.端口

比如第一个数据包,为172.23.202.139的39654端口发向172.23.192.1的53端口,60805表示DNS的查询报文的标识值,因此再下一条DNS应答报文中也出现了相同的值。后面‘+’表示启用递归查询标志,‘A?’表示使用A类型的查询方式,www.baidu.com表示DNS查询问题中的查询名,括号31表示DNS查询报文的长度,单位为字节。

第二个数据包类似,不同的是后面的一段,‘3/0/0’表示该报文中包含3个应答资源记录,0个授权资源记录和0个额外信息记录。‘CNAME www.a.shifen.com., A 220.181.38.149, A 220.181.38.150 (122)’则表示3个应答资源记录的内容,CNAME表示紧随其后的为机器的别名,A表示其后为IP地址,122表示该应答报文长度为122个字节。

ARP协议与DNS协议详解相关推荐

  1. IP协议相关技术终极详解

    IP协议相关技术终极详解 DNS域名解析协议 概述 域名的层级关系 域名的解析流程 ARP地址解析协议 概述 为什么需要ARP协议? ARP协议是属于哪一层呢? ARP协议和DNS协议的区别 ARP协 ...

  2. HTTP协议的头信息详解

    HTTP协议的头信息详解 http://blog.csdn.net/guoguo1980/archive/2008/07/14/2649658.aspx HTTP协议的头信息详解 HTTP(Hyper ...

  3. [转]HTTP协议之状态码详解

    HTTP协议之状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果是做AJ ...

  4. 《HTTP/2基础教程》协议、特性、详解

    文章目录 <HTTP/2基础教程>协议.特性.详解 前言 第一章 HTTP进化史 第二章 HTTP/2 快速入门 第三章 Web优化"黑魔法"的动机与方式 HTTP/1 ...

  5. FTP协议及工作原理详解

    FTP协议及工作原理详解 1. FTP协议 什么是FTP呢?FTP 是 TCP/IP 协议组中的协议之一,是英文File Transfer Protocol的缩写. 该协议是Internet文件传送的 ...

  6. HTTP协议的头信息详解 1

    HTTP协议的头信息详解 我用抓包软件抓了http的包,发现accept大多数有两种情况. # l8 X" o; I5 e# t9 y第一种:Accept: image/gif, image ...

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

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

  8. 计算机网络: IP地址,子网掩码,默认网关,DNS服务器详解

    楔子: 以Windows系统中IP地址设置界面为参考(如图1), IP地址, 子网掩码, 默认网关 和 DNS服务器, 这些都是什么意思呢? 学习IP地址的相关知识时还会遇到网络地址,广播地址,子网等 ...

  9. IP地址,子网掩码,默认网关,DNS服务器详解

    IP地址,子网掩码,默认网关,DNS服务器详解 为了更深入的学习TCP/IP协议,最近看了不少有关资料,收集整理记录如下,以备后面的使用和方便各位学习: IP地址,子网掩码,默认网关,DNS服务器是什 ...

  10. 实现一个域名对应多个IP地址和DNS优缺点详解!

    实现一个域名对应多个IP地址和DNS优缺点详解! 1.DNS定义: DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访 ...

最新文章

  1. LR需要理解的一些内容
  2. WinAPI: GetDoubleClickTime、SetDoubleClickTime - 获取与设置鼠标双击间隔时间
  3. 数值积分之牛顿——科斯特公式:梯形、辛普森、辛普森3/8和布尔 高斯积分公式:勒让德、切比雪夫、拉盖尔和埃尔米特
  4. php网站漏洞检测对sql注入漏洞防护
  5. 【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
  6. Ajax获取数据的流程
  7. 论文浅尝 - ACL2020 | 用于链接预测的开放知识图谱嵌入
  8. 一文快速告诉你软件测试和软件调试有什么区别?
  9. 淘客返利机器人,淘宝,拼多多,京东三合一查券返利机器人搭建教程
  10. C# 生成订单编号和取餐码
  11. 金融工程学(四):远期和期货的运用
  12. 3310复刻版 java_诺基亚3310复刻版评测:经典回归 情怀满满
  13. 微信支付之 内网穿透
  14. 笨办法学python习题1-10
  15. Excel-VBA:“银行家舍入” 与“国际标准的四舍五入”
  16. 运动模糊运动拖影果冻效应分析
  17. PDF如何裁剪页面并保持页面大小不变
  18. 数学在计算机密码学中的运用,计算机密码学的数学引论.ppt
  19. librdkafka开源库使用总结
  20. MIT教授: 世界就是《黑客帝国》,人类在模拟游戏中扮演角色

热门文章

  1. mosquitto在Linux环境下的部署/安装/使用/测试
  2. 怎样安装 手机撑控汽车一键启动无钥匙进入系统?
  3. Android RemoteCallbackList类
  4. OSChina 周四乱弹 ——霍金!你要真挑起来星球大战,放学你等着!
  5. 【机器学习】【线性代数】均值,无偏估计,总体/样本方差,样本标准差,矩阵中心化/标准化、协方差,正/不/负相关等,协方差矩阵
  6. linux启动根文件失败报错:进程退出exitcode,Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
  7. 【客服系统】在线客服系统源码外贸聊天通讯带翻译多语言支持网页安卓苹果打包封装APP
  8. print命令和逗号使用
  9. Linux Blas安装方法,科研1-linux下安装blas和lapack
  10. mysql附录建表_用CREATE TABLE 语句创建数据表