TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记

TCP/IP协议的体系结构:

TCP/IP协议族四层模型和OSI七层模型
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第1张图片
上层协议使用下层协议的服务,下层协议给上层协议提供一个接口。

四层模型中各个层次的作用和特点
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第2张图片
上图说明:
最底层是数据链路层,主要实现了网卡接口的网络驱动程序,用来处理数据在物理媒介上的传输。常见的物理媒介有以太网和令牌环。网络驱动程序隐藏了物理网络具有的不同电极特性,为上一层协议提供一个统一的接口。我们常见的交换机就是数据链路层的设备。
数据链路层之上是网络层(或称IP层)。主要实现数据报的选路和转发。处理分组在网络中的活动,也就是说为每一个数据报在复杂的网络环境中选择一个准确快速的道路。网络层的通讯方式是逐跳进行。同时网络层对上层协议隐藏了top连接的细节。也就是说在传输层和应用层来看,通讯的两台机器是直接相连的。我们使用的路由器就是工作在网络层。
网络层的上一层是传输层。传输层为网络通信的两台机器提供了端到端的通信。在通讯方式这一点上,传输层跟网络层是有所不同的。传输层只关心传输的起始端和目标端,不在乎数据包的中转过程。
最上层是应用层。主要负责应用程序的逻辑,比如文件传输,网络管理等这些功能。
TCP/IP协议中除应用层的其他层都是工作在内核空间。

四层模型中各个层析相应的协议
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第3张图片

TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第4张图片
数据链路层主要的协议是ARP协议(地址解析协议)和RARP协议(逆地址解析协议)实现了IP地址和机器物理地址之间的转换。在网络层中使用IP地址寻找一台机器,但是到了数据链路层就必须使用物理地址寻找一台机器。所以网络层必须先把目标机器的IP地址转换成物理地址才能使用数据链路层提供的服务,这就是ARP协议的用途。
网络层中最核心的协议是IP协议,IP协议根据数据报的目的IP地址来决定如何投递数据包。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳路由器,并把数据包交付给这个路由器来转发,就这样一直重复,直到到达目标端或者由于发送失败而丢弃这个数据包。另一个重要协议是ICMP协议(因特网控制报文协议),是IP协议的重要补充,主要用于检测网络连接。
传输层的协议主要有3个:TCP协议(传输控制协议)、UDP协议、SCTP协议(流控制传输协议)。
TCP协议:为应用层提供了可靠的、面向连接的、基于流的服务。
UDP协议:为应用层提供的是不可靠、无连接、基于数据报的服务。
SCTP协议:为了因特网上传输电话信号而设计的。

应用层中常见的协议有:
OSPF协议(开放最短路径优先协议):是一种路由器更新协议,主要用于路由器之间的通信来告知对方各自的路由信息。
DNS协议:提供了机器域名到IP地址的转换。使用的是传输层的UDP协议。
telnet协议:远程登陆协议,使用的是传输层的TCP服务。
应用层协议可以直接跳过传输层直接使用网络层提供的服务,比如ping命令和OSPF协议。

数据的封装和分用

数据的封装:
数据的封装形式:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第5张图片

TCP报文段传输过程:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第6张图片

以太网帧格式:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第7张图片

数据分用过程:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第8张图片

ARP协议的工作原理:

ARP协议也就是地址解析协议,RARP协议是逆地址解析协议

ARP协议作用:能实现任意网络地址到任意物理地址的转换。也就是说将IP地址对应当相应的物理地址中,因为数据链路层要通过物理地址来寻找你要传输数据的机器,这样才能通过数据链路层往外传输数据。

ARP协议的工作原理:
主机向自己所在的网络广播一个ARP请求(该请求包含目标机器的网络地址),同时网络上其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答(其中包含了自己的物理地址)

ARP请求的报文格式:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第9张图片

ARP报文大小为28个字节,
第一个字段 —— 2个字节大小—-硬件类型字段 —– 定义物理地址的类型。如果值为1,表示MAC地址
第二个字段——2个字节大小—-协议类型字段——表示映射的协议地址类型。如果值为0x80,表示IP地址
第三个字段——-1个字节大小—-硬件地址长度字段,对于MAC地址是6个字节,对于IP地址是4个字节
第四个字段——1个字节大小—–协议地址长度字段,对于MAC地址是6个字节,对于IP地址是4个字节
第五个字段—–2个字节大小—–OP(操作字段)——指出四种操作类型中的一种,ARP请求值为1,ARP应答值为2,RARP请求值为3,RARP应答值为4
最后四个字段,指定通讯双方的MAC地址和IP地址,发送端填写除了目的MAC地址的其他三个字段已构成ARP请求报文,并发送这个报文,接收端发现该请求的目的IP地址是自己,就把自己的MAC地址填充进去,然后交换两个目的端地址和两个发送端地址已构成ARP应答,并返回。

Linux中ARP高速缓存的查看和修改方法:

arp -a                      #查看ARP缓存
arp -d 192.168.1.111        #删除IP为192.168.1.111对应的ARP缓存
arp -s 192.168.1.112 00:0c:29:6e:63:18  #添加IP为192.168.1.112 和 对应的ARP缓存

第一台测试机中的操作:ping另一台测试机

第二台测试机中的操作:抓取这两台测试机之间数据交换的以太帧数据
这里写图片描述

当第一台主机ping了第二台主机,第二台主机中就会抓取到以下内容:

分析上图中抓取到的数据:
第一个粉色方块中的数据是原端机器发送给目标机器的ARP请求包。
第二个粉色方块中的数据是目标机器发送给原端机器的ARP应答包。

ARP请求包:
青色圆圈中的内容表示ARP请求的原端物理地址。
红色圆圈中的内容表示以太网的广播地址,用于表示整个局域网,局域网中所有机器都会收到并处理这条以太帧。
“Request”,表示这个是一个ARP请求数据。
“who-has 219.245.84.162 tell 219.245.84.143”,表示当前主机要查询的IP地址。

ARP应答包:
蓝色圆圈中的数据表示ARP应答的原端物理地址。
青色圆圈中的数据表示ARP应答的目标端物理地址。
“Reply”:表示这是一个ARP应答数据
“219.245.84.162 is-at 00:0c:29:64:63:18”:表示目标机器报告其物理地址

DNS协议的工作原理:

我们平时是使用机器的域名来访问这台机器,而不是直接使用机器的IP地址来访问。eg:访问百度网站,就是用域名www.baidu.com来访问。

DNS是应用于TCP/IP协议的应用层分布式数据库,每个DNS服务器上都存在着大量的机器域名和IP地址的映射,并且都是动态更新的。

DNS协议的端口号是53。

DNS的作用:用于将机器的域名地址转换为IP地址
DNS的工作原理:对于DNS的访问是通过解析器来完成的,解析器通过一个或多个名字服务器来完成这种相互转换。

DNS的查询和应答报文详解:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第10张图片

16位标识字段—-用于标记一对DNS的查询和应答,以此区分一个DNS应答是哪个DNS查询的回应。

16位标志字段—–用于协商具体的通讯方式和反馈通讯状态,16位标志字段的细节为下图:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第11张图片

上图中DNS报文头部的标志字段的说明:
QR字段(查询应答标志),如果是0,表示这是一个查询报文,如果是1,表示一个应答报文。
opcode字段—-定义了查询和应答的类型,0表示标准查询,1表示反向查询,2表示请求服务器状态
AA字段—-授权应答标志,仅属于应答报文使用,1表示域名服务器是授权服务器
TC字段—–截断标志,只有当DNS报文使用了UDP服务时才使用该字段,因为UDP数据报有长度限制,所以过长的DNS报文就会被截断。1表示DNS报文超过512字节,如果出现这种情况就会被截断
RD字段—-递归查询标志,1表示执行递归查询,也就是说如果目标DNS服务器无法解析某一个主机名,那么他将在其他DNS服务器继续查询,如此递归直到获得结果并把结果返回个客户端。0表示迭代查询,也就是说如果目标DNS服务器无法解析某一个主机名,那么他将自己知道的其他DNS服务器的IP地址返回给客户端。
RA字段—-允许递归标志,仅供应答报文使用,1表示DNS服务器支持递归查询
zero字段—–目前为止还没有被使用,必须设置为0
rcode字段—–是四位的返回码,表示应答的状态。0表示无错误,3表示域名不存在。

下面的四个字段分别指出DNS报文的最后四个字段的资源记录数目,
对于查询报文而言,一般包含一个查询问题,而应答资源记录数、授权资源记录数、额外资源记录数都为0。
对于应答报文的应答资源记录数至少为1,而授权资源记录数和额外资源记录数可以是0或非0。

查询问题字段:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第12张图片
上图解释:
16位的查询类型表示如何执行查询操作。常见的类型有以下几种:
1————》获取目标主机的IP地址
5————》获取目标主机的别名
12———–》反向查询
16位的查询类通常为1,表示获取因特网地址(IP地址)

应答字段、授权字段、额外信息字段都使用资源记录的格式,如下图:
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第13张图片
上图解释:
32位域名是该记录中与资源对应的名字,其格式与查询问题字段的查询问题格式相同。
16位类型16类的含义也和DNS查询字段的对应问题相同。
32位生存时间表示该查询记录结果可被本地客户端程序缓存多久,单位为s
16位数据长度字段和资源数据字段的内容取决于类型字段。

Linux下访问DNS的方法:
第一个终端用来查询百度的IP地址:

host命令    #表示使用DNS协议和DNS服务器通信
-t参数      #表示告诉DNS协议使用什么类型(这里使用的A类型,表示通过机器的域名查询其IP地址)

TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第14张图片

上图中的数据解析:
第二行:www.baidu.com是www.a.shifen.com的别名。
第三四行:该机器名对应的两个IP地址

第二个终端使用tcpdump命令抓取DNS通讯工程中网络上传出的以太网帧
TCP/IP协议基本概括+ARP协议详解+DNS协议详解---Linux学习笔记_第15张图片
上图中的数据解析:
图中的粉色的块:表示是两个查询应答报文。
第一个粉色方块中的第一条数据表示DNS查询报文,第二条数据表示DNS应答报文。
第一个粉色方块中的数据分析:
“32940”:是DNS查询报文的标识值,因此该值也出现在DNS应答报文中
“+”:表示启用递归查询标志
“3/4/0”:表示该数据报中包含3个应答资源记录,4个授权资源记录和0个额外资源记录
黄色圆圈中的数据:表示3个应答记录的内容

你可能感兴趣的:(ubuntu)