应用层
应用层概述
- 基本概念:
- 应用层:使用下层协议为==应用软件==提供服务
- 单位:报文(HTTP协议)
- 功能
- 域名解析(DNS 协议)
- 文件传输(FTP 协议)
- 邮件系统(SMTP,POP3协议)
- 虚拟终端(HTTP协议)
- 网络应用模型
- C/S 客户端/服务器
- P2P
协议
DNS 协议(需要修改)
域名(主机名)
概念:应用层用于==标识主机==的方式
- 传输层:采用 IP 地址标识主机;端口号标识进程
- 网络层:采用 IP 地址标识主机;
- 数据链路层:采用 MAC 地址标识主机
格式:==三级域名 + 二级域名 + 顶级域名==
- 根域名:
.(默认情况下不写:域名后加上.仍然是可以访问的) - 顶级域名
- 国家顶级域名:cn us uk
- 通用顶级域名:com org net gov
- 基础结构域名:arpa
- 二级域名:
- 类别域名:com edu gov net org
- 行政域名:cq beijing shanghai
- 自定义域名:bilibili
- 三级域名:www mail ftp
- 四级域名:域名需要进一步划分时使用
- 根域名:
图示:
- 举例

划分

DNS 协议:
- 引入:传输层和网络层使用 ==IP 地址==才能够确定主机在网络中的位置,而应用层使用 ==域名== 确定,显然需要映射关系进行转化
- 定义:将应用层的==域名==(主机名)根据==映射关系==转换到 ==IP 地址==
- 相关协议:
- UDP 协议 端口 53:用于传输 DNS 请求和响应报文
- DHCP 协议:获取本地 DNS 服务器的 IP 地址
DNS 服务器:
定义:==查找== 域名 和 IP 地址 ==映射关系== 的服务器(运行在 BIND 软件的 UNIX 机器)
功能:
查找映射关系
查找主机规范名:根据主机别名查找主机规范名及其 IP 地址
- 主机别名:简短的主机规范名;举例:bilibili.com
- 主机规范名:完整的域名格式;举例:www.bilibili.com
负载分配:多个 IP 地址的==集合映射一个域名==
- 网站过于繁忙时需要多台服务器进行分布式处理
- 每台服务器都运行在不同的端系统上,实际的 IP 地址也是不一样的
- 每次通过域名访问网站时,实际访问的可能是不同的 IP 地址
分类:
根域名服务器
- 全世界共有 400 多台根域名服务器,但是只有 13 个域名(13 个 组织管理)
- 根域名服务器==只==返回==顶级域名服务器的 IP 地址==,不会返回查询的域名的 IP 地址
<!-- ipconfig/displaydns -->
<!-- 13 台根服务器的 域名 和 IP 地址 -->
记录名称. . . . . . . : a.gtld-servers.net
A (主机)记录 . . . . : 192.5.6.30
记录名称. . . . . . . : b.gtld-servers.net
A (主机)记录 . . . . : 192.33.14.30
记录名称. . . . . . . : c.gtld-servers.net
A (主机)记录 . . . . : 192.26.92.30
记录名称. . . . . . . : d.gtld-servers.net
A (主机)记录 . . . . : 192.31.80.30
记录名称. . . . . . . : e.gtld-servers.net
A (主机)记录 . . . . : 192.12.94.30
记录名称. . . . . . . : f.gtld-servers.net
A (主机)记录 . . . . : 192.35.51.30
记录名称. . . . . . . : g.gtld-servers.net
A (主机)记录 . . . . : 192.42.93.30
记录名称. . . . . . . : h.gtld-servers.net
A (主机)记录 . . . . : 192.54.112.30
记录名称. . . . . . . : i.gtld-servers.net
A (主机)记录 . . . . : 192.43.172.30
记录名称. . . . . . . : j.gtld-servers.net
A (主机)记录 . . . . : 192.48.79.30
记录名称. . . . . . . : k.gtld-servers.net
A (主机)记录 . . . . : 192.52.178.30
记录名称. . . . . . . : l.gtld-servers.net
A (主机)记录 . . . . : 192.41.162.30
<!-- 还有一台 m.gtld-servers.net 服务器 -->顶级域名服务器:顶级域名只会返回权威域名服务器的 IP 地址,不会返回查询的域名对应的 IP 地址
权威域名服务器:返回查询的域名对应的 IP 地址
本地域名服务器:
- 每个 ISP 中都有一个本地域名服务器
- 每个本地域名服务器和客户端相隔很近(几个路由器) -> 同一个局域网中
- 可以直接返回查询的域名对应的 IP 地址
高速缓存:DNS 查询得到的映射关系存储在缓存中
- 浏览器缓存:浏览器短时间内容会缓存 DNS 映射(Chrome 大约几分钟)
- 操作系统缓存:客户端在开机后会从本地域名服务器中的缓存进行下载得到 DNS 映射(关机后缓存消失)
- hosts 文件:文件形式存储 DNS 映射;可以在 hosts 文件中写死映射关系,如果写错很有可能打开不了网站
- 本地域名服务器缓存
- 每次 DNS 查询后都会返回 DNS 映射,本地域名服务器都会进行缓存(大约几天)
- 存储的映射包括:==DNS 服务器的域名对应的 IP 地址==,==查询的域名的对应的 IP 地址==
查找过程
浏览器==先解析 URL 地址== -> 得到需要访问的域名
浏览器==检查浏览器缓存==中是否存储该域名的 IP 地址:
浏览器==检查操作系统缓存==中是否存储该域名的 IP 地址
浏览器==检查 hosts 文件==中是否存储过该域名的 IP 地址
如果上述缓存查询中都没有找到 IP 地址,浏览器会==调用 DNS 程序发送 DNS 请求==
本地域名服务器接收 DNS 请求
- 检查高速缓存中是否存储对应的 IP 地址,如果存储过那么直接返回
- 如果高速缓存中没有存储对应的 IP 地址,那么发送 DNS 请求给==根域名服务器==进行处理
根域名服务器接收 DNS 请求,返回给本地域名服务器==对应的顶级域名服务器的 IP 地址==(DNS 响应)
本地域名服务器再次向顶级域名服务器发送 DNS 请求
顶级域名服务器接收 DNS 请求,返回给本地域名服务器==对应的权威域名服务器的 IP 地址==
本地域名服务器再次向权威域名服务器发送 DNS 请求
权威域名服务器返回查询的域名对应的 IP 地址
FTP 协议
概念:提供不同种类主机系统之间==传输文件==的能力
分类:
- 文件传送协议 FTP
- 简单文件传送协议 TFTP
特点
- 基于客户端/服务器(==C/S==)的传送方式
- 基于 TCP 协议实现文件传输
传输过程
连接建立
- 登陆 FTP 服务器
- 用户名 + 密码登陆
- 匿名登录:部分公共 FTP 服务器访问的人数过大,不需要经过注册取得 FTP 服务器授权就可以直接进入 FTP 服务器下载文件
- FTP 服务器 ==主进程== 打开熟知端口 21,建立 TCP ==控制连接==
- 登陆 FTP 服务器
文件传输
- 控制连接建立后接收到 FTP 客户端下载文件的请求,打开==端口号==,建立 TCP ==数据连接==
- 数据连接建立后,FTP 服务器开始向 FTP 客户端传送文件
- 文件传送完毕后,==数据连接关闭==,==控制连接暂时不关闭==
- FTP 客户端如果需要继续下载文件,那么再次打开端口号,建立 TCP 数据连接进行传送
- FTP 客户端如果不需要再下载文件,那么关闭控制连接,即连接释放
连接释放
数据连接端口号:根据传输模式而定,主动方式采用端口号 20;被动方式端口号 > 1024,客户端和服务器协商决定
SMTP 协议
概念:为==电子邮件系统==提供服务
电子邮件系统
- 组成:
- 用户代理
- 提供用户阅读,回复,编写,保存邮件的功能
- 发送方和接收方都具有用户代理
- 邮件服务器
- 提供==接收和发送邮件==的功能
- 发送方和接收方都具有邮件服务器
- 发送方的用户代理将邮件发送给发送方的邮件服务器
- 邮件服务器发送邮件==不成功==,向发送方用户代理==报告发送失败==
- 邮件服务器不是专属的,是多个用户==共享==的
- 简单邮件传输协议(SMTP)
- SMTP 建立在 TCP 协议之上 -> ==端口号 25==
- SMTP 规定两个电子邮件系统之间如何交换信息
- SMTP 不会借助中间邮件服务器传递邮件 -> 两台邮件服务器是==直接连接==
- SMTP 采用 ASCII 7位比特编码 -> 不能够传送二进制数据文件或者音视频文件 -> 需要转码才能够进行发送
- SMTP 采用持续连接 -> 同一个 TCP 连接中可以传递多份邮件
- SMTP 细节
- 连接建立:SMTP 客户端发送 HELLO 命令 -> SMTP 服务器返回 220 准备建立连接
- 邮件传输:
- SMTP 客户端发送 MAIL FROM + 发送方地址 -> SMTP 服务器返回 250 -> 能够接收邮件;不能够接收返回 421
- SMTP 客户端发送 RCPT TO + 接收方地址 -> SMTP 服务器返回 250
- SMTP 客户端发送 DATA (客户端准备发送数据)-> SMTP 返回 354 同意发送;让客户端发送
.表示数据发送完成 - SMTP 客户端发送 Date -> SMTP 服务器返回 250 接收完成
- 连接释放:邮件发送完成 -> SMTP 客户端发送 QUIT 命令 -> SMTP 服务器返回 221 -> 断开连接
- 用户代理
- 发送过程:
- 发送方==用户代理==和发送方==邮件服务器==之间建立 TCP 连接
- 发送方采用 ==SMTP 协议==将邮件发送到发送方的邮件服务器
- 邮件到达邮件服务器后==在队列中等待==服务器发送
- 发送方邮件服务器和接收方邮件服务器之间==建立 TCP 连接==
- 发送方邮件服务器采用 ==SMTP 协议==发送邮件到接收方的邮件服务器
- 如果发送成功,那么邮件保存在接收方的邮件服务器中,等待接收方用户代理采取 ==POP3 协议==读取邮件
- 如果发送失败,那么发送方邮件服务器会再次尝试发送,如果多次尝试后仍然发送失败,那么会报告发送方用户代理
- 图示:

- 组成:
POP3 协议
- 概念:为用户代理获取邮件服务器中的邮件提供服务
- 内容
- POP3 建立在 TCP 协议之上 -> ==端口号 110==
- POP3 细节
- 特许:用户代理登陆邮件服务器 -> 邮件服务器允许其获取邮件
- 事务处理:用户代理对邮件服务器中的邮件进行处理
- 获取邮件后是否在邮件服务器中删除该邮件
- 更新:用户代理结束会话后执行删除操作
IMAP 协议
HTTP 协议
详情见 JavaWeb 笔记
网络应用模型
- 客户端-服务器模型
- 概念:
- 客户端
- 服务器
- 优点
- 缺点
- 概念:
- P2P 模型
- 概念:
- 执行过程:
- 优点
- 缺点
- 应用:BitTorrent
