应用层
概述
- 应用层是离用户最近的一层,网络七层模型中传输层上面是会话层、表示层、应用层,这里我们将这三层都作为应用层去学习。
应用层和传输层一样,都是工作于终端的。应用层以下已经提供了完整的通信服务,所以应用层不需要管理通信服务,只需要向上对接用户提供丰富的功能。
- 应用层的协议和软件是非常多的,常见的应用层协议如:
FTP | HTTP | HTTPS | DNS | TELNET |
---|---|---|---|---|
21 | 80 | 443 | 53 | 23 |
除此之外,面向传输层编程的协议也可以认为是应用层里的内容,基于传输层的UDP和TCP协议,应用层是有不同的应用场景和协议的,
- 每一个应用层协议都是为了解决某一类应用问题而存在的,如视频、音频、文字等领域
应用层的主要任务就是定义应用间通信的规则,如报文类型、报文语法格式等,不同的应用其报文可以自己去协定,同一类应用间就需要协定一致的规则等,这些规则都能称为应用层的协议。
DNS协议
DNS协议详解及报文格式分析
DNS(Domain Name System:域名系统),也称为域名解析协议
域名
域名不区分大小写
- 域分类
域名由点分割为不同的域,域名可以分为顶级域(Top Level Domain)、二级域、三级域
顶级域 | 国家 | .cn | 中国 |
.us | 美国 | ||
.uk | 英国 | ||
.ca | 加拿大 | ||
... | ... | ||
通用 | .com | 公司和企业 | |
.net | 网络服务机构 | ||
.org | 非赢利组织 | ||
.edu | 美国专用的教育机构 | ||
.gov | 美国专用的政府部门 | ||
.mil | 美国专用的军事部门 | ||
.int | 国际组织 | ||
... | ... | ||
基础结构域名 | arpa | 用于反向域名解析 | |
二级域 | aliyun、qq、amazon、taobao、baidu、google、... |
域名服务器
域名服务器结构
- 根域名服务器
- 顶级域名服务器
- 权限域名服务器
- 本地域名服务器
DNS报文格式
DNA分查询报文和响应报文,从标志位第一个位可区分
头部 | 会话ID(16bits) | 标志位 | ||||||||
QR | opcode | AA | TC | RD | RA | (zero) | rcode | |||
Questions 问题数(16bits) | Answer 回答 资源记录数(16bits) | |||||||||
Authority 授权 资源记录数(16bits) | Additional 附加 资源记录数(16bits) | |||||||||
正文 | Queries 问题区域 | |||||||||
Answers 回答区域 | ||||||||||
Authoritative 授权区域 | ||||||||||
Additional 附加区域 |
头部
- 会话标识 :标识会话,一对请求和返回的会话标识一样
- 标志
- QR(1):0/查询,1/响应
- opcode(4): 0/标准查询,1/反向查询,2/服务器状态请求
- AA(1): 表示授权回答
- TC(1):表示可截断的
- RD(1): 表示期望递归
- RA(1): 表示可用递归
- rcode(1): 表示返回码,0表示没有差错,3表示名字差错,2表示服务器错误(Server Failure)
- 数量字段
- Questions表示查询问题区域节的数量,
- Answers表示回答区域的数量,
- Authoritative namesversers表示授权区域的数量,
- Additional recoreds表示附加区域的数量
正文
Queries 区
- 查询名:长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为IP,反向查询即由IP地址反查域名),一般的格式如下图所示:
- 查询类型
类型 | 助记符 | 说明 |
---|---|---|
1 | A | Address由域名获得IPv4地址 |
2 | NS | 查询域名服务器 |
5 | CNAME | 查询规范名称 |
6 | SOA | 开始授权 |
11 | WKS | 熟知服务 |
12 | PTR | 把IP地址转换成域名 |
13 | HINFO | 主机信息 |
15 | MX | 邮件交换 |
28 | AAAA | 由域名获得IPv6地址 |
252 | AXFR | 传送整个区的请求 |
255 | ANY | 对所有记录的请求 |
- 查询类:通常为1,表明是Internet数据,IN
资源记录(RR)区域(包括回答区域,授权区域和附加区域)
回答区域,授权区域和附加区域三个区域的格式是一样的,每个区都可能会有多条如下格式的记录
-
域名:格式同上查询名一致,不同的是,当前name若在报文中出现过,那该字段不会重复保存,只会用两个字节长度保存一个偏移标记11和上文已出现内容在DNS报文中的偏移位置,报文展示如下:
-
查询类型:同上
-
查询类:Internet信息对应的就是IN,值为1
-
生存时间TTL:以秒为单位,表示的是资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间,它同时也可以表明该资源记录的稳定程度,极为稳定的信息会被分配一个很大的值(比如86400,这是一天的秒数)。
-
资源数据长度
-
资源数据:变长字段,存储查询端要求返回的相关数据,如。
域名解析过程
- DNS报文抓包
注:关注一下上图中的正文中各部分格式
- 过程说明(可能不对)
- 主机10.252.21.193先向本地域名服务器10.252.10.33进行递归查询
- 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
- 根域名服务器告诉本地域名服务器,下一次应该查询的权限服务器www.a.shifen.com(时分??)的IP地址
- 本地域名服务器向权限服务器 www.a.shifen.com(时分??)进行查询
- 权限服务器 www.a.shifen.com告诉本地域名服务器所查询的主机的IP地址180.101.49.11
- 本地域名服务器最后把查询结果180.101.49.11告诉 10.252.21.193
网络资料:
DNS协议详解及报文格式分析
DHCP协议
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)
DHCP是一个局域网协议,是应用UDP协议的应用层协议,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。简单来说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等信息的协议。实现终端即插即用,自动联网;
两个概念:临时IP、租期
DHCP过程简述
- DHCP服务器监听默认端口:67
- 主机默认通过68接口,使用UDP协议广播DHCP发现(Discover)报文
- DHCP服务器发出DHCP提供(Offer)报文
- 主机向DHCP服务器发出DHCP请求(Request)报文
- DHCP服务器回应(Ack)并提供IP地址
- 主机下次重新登录网络时,主机向DHCP发送包含前一次所分配的IP地址的request报文
- DHCP服务器尝试让客户机使用原IP,成功则回答一个ACK消息。失败则返回NAK消息
- 主机收到ACK则绑定原来那个IP到网卡,若收到NAK则主机需要重新发送Discover报文
- 当客户机启动时或使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约。
DHCP报文(八种)
报文类型 | 说明 |
---|---|
Discover(0x01) | DHCP客户端在请求IP地址时并不知道DHCP服务器的位置,因此DHCP客户端会在本地网络内以广播方式发送Discover请求报文,以发现网络中的DHCP服务器。所有收到Discover报文的DHCP服务器都会发送应答报文,DHCP客户端据此可以知道网络中存在的DHCP服务器的位置。 |
Offer(0x02) | DHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关、DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户本服务器可以为其提供IP地址。但这个报文只是告诉DHCP客户端可以提供IP地址,最终还需要客户端通过ARP来检测该IP地址是否重复。 |
Request(0x03) | DHCP客户端可能会收到很多Offer请求报文,所以必须在这些应答中选择一个。通常是选择第一个Offer应答报文的服务器作为自己的目标服务器,并向该服务器发送一个广播的Request请求报文,通告选择的服务器,希望获得所分配的IP地址。另外,DHCP客户端在成功获取IP地址后,在地址使用租期达到50%时,会向DHCP服务器发送单播Request请求报文请求续延租约,如果没有收到ACK报文,在租期达到87.5%时,会再次发送广播的Request请求报文以请求续延租约。 |
ACK(0x05) | DHCP服务器收到Request请求报文后,根据Request报文中携带的用户MAC来查找有没有相应的租约记录,如果有则发送ACK应答报文,通知用户可以使用分配的IP地址。 |
NAK(0x06) | 如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文,通知用户无法分配合适的IP地址。 |
Release(0x07) | 当DHCP客户端不再需要使用分配IP地址时(一般出现在客户端关机、下线等状况)就会主动向DHCP服务器发送RELEASE请求报文,告知服务器用户不再需要分配IP地址,请求DHCP服务器释放对应的IP地址。 |
Decline(0x04) | DHCP客户端收到DHCP服务器ACK应答报文后,通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送Decline请求报文,通知服务器所分配的IP地址不可用,以期获得新的IP地址。 |
Inform(0x08) | DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。 |
抓取的DHCP报文部分
报文格式详解见下方连接