408 · 计算机网络 · 第 6 章 · 分量 ★★

各种应用,各自约定怎么说话

应用层协议很多,但考试集中在 DNS 和 HTTP,其余只要记住用哪个端口、基于 TCP 还是 UDP。

这一章只要会:

  1. DNS 递归查询与迭代查询
  2. HTTP 连接方式与 RTT 计算
  3. 常见协议的端口和传输层协议
  4. FTP、电子邮件各记一句
一 · 主线

打开一个网页,用到了哪些应用层协议

谁找谁:两种模型

客户/服务器
服务器一直开着等请求,客户之间不直接通信。网页、邮件都是这种
P2P
每台主机既是客户又是服务器,没有固定的中心

只知道域名,不知道 IP DNS

做法
去问域名服务器。域名是分层的,服务器也分层:根、顶级、权限,再加一个离你最近的本地域名服务器

拿到 IP 了,怎么要网页 HTTP

做法
先建立 TCP 连接,再发 HTTP 请求。一个网页里有很多图片,是每个都重新连一次,还是共用一条连接

其他应用

FTP
传文件,用两条 TCP 连接
电子邮件
发信用 SMTP,收信用 POP3 或 IMAP
二 · 重点

DNS:递归查询和迭代查询

DNS 用 UDP,端口 53。

主机本地域名服务器根域名服务器顶级域名服务器权限域名服务器①⑧ 递归只问一次,等结果②③④⑤⑥⑦②~⑦ 迭代本地服务器一家一家去问
最常见的组合:主机问本地域名服务器用递归,本地域名服务器问其他服务器用迭代。

递归查询

"你帮我查到底。"被问的服务器如果不知道,就替你去问下一个,最后把结果交给你。

提问的一方只发 1 次请求。

迭代查询

"你告诉我该去问谁。"被问的服务器如果不知道,就回答下一个该问的服务器地址,你自己再去问。

提问的一方要发很多次请求。

2010 真题数据全程递归

本地域名服务器没有缓存,采用递归方式解析另一个网络中某主机的域名。用户主机和本地域名服务器各发出几条域名请求?

用户主机 → 本地域名服务器:1 条 本地域名服务器 → 根域名服务器:1 条 根再替它去问顶级,一层层递归下去

2016 真题数据全程迭代

所有域名服务器都用迭代查询。解析 www.abc.xyz.com 时,本地域名服务器发出的查询次数最少和最多各是几次?

最少 0 次:本地有缓存 最多 4 次:根 → com → xyz.com → abc.xyz.com
三 · 重点

HTTP:数清楚用了几个 RTT

HTTP 基于 TCP,端口 80。它本身是无状态的,服务器不记得你是谁,所以才需要 Cookie。

取一个对象要多久

建立 TCP 连接:1 个 RTT 前两次握手一来一回 请求并收到对象:1 个 RTT 第三次握手可以带上 HTTP 请求 合计 2 个 RTT + 对象本身的传输时间
连接方式做法1 个网页文件 + 3 张图片(忽略传输时间)
非持久连接每取一个对象都重新建立一次 TCP 连接4 × 2 = 8 个 RTT
持久连接,非流水线连接建好后一直用。收到上一个响应才能发下一个请求2 + 3 × 1 = 5 个 RTT
持久连接,流水线连接建好后一直用。可以连续发出多个请求2 + 1 = 3 个 RTT

HTTP/1.1 默认使用持久连接。做题前先看清三件事:是哪种连接方式;要不要加 DNS 查询的时间;图片和网页是不是在同一台服务器上。

请求报文长什么样

GET /index.html HTTP/1.1 Host: www.example.com Connection: keep-alive
  • 第一行是请求行:方法、URL、版本
  • Connection: keep-alive 表示持久连接,close 表示用完就关
  • 常用方法:GET 请求读取,POST 提交数据

状态码

  • 2xx 成功,如 200 OK
  • 3xx 重定向,如 301 永久移动
  • 4xx 客户端错误,如 404 找不到
  • 5xx 服务器错误
四 · 重点

端口和传输层协议对照表

应用层协议用途传输层端口
FTP文件传输TCP21 控制,20 数据
TELNET远程登录TCP23
SMTP发送邮件TCP25
DNS域名解析UDP53
DHCP自动分配地址UDP67 服务器,68 客户
HTTP万维网TCP80
POP3读取邮件TCP110
HTTPS加密的万维网TCP443

记法:要求"一个字节都不能错"的用 TCP;"一问一答、越快越好"的用 UDP。

五 · 各记一句

FTP 和电子邮件

FTP:两条 TCP 连接

  • 控制连接(端口 21):整个会话期间一直保持,传命令
  • 数据连接(端口 20):每传一个文件就建立一次,传完就关
  • 控制信息和数据分开走,叫"带外传送"

电子邮件:发和收用不同的协议

  • SMTP:把邮件"推"出去。发件人 → 发送方服务器 → 接收方服务器,这两段都用它
  • POP3、IMAP:收件人从自己的服务器把邮件"拉"下来
  • SMTP 只能传 7 位 ASCII,所以用 MIME 来传中文和附件
六 · 易错速记

选择题直接对表

DNS 用 UDP常考的应用层协议里,用 UDP 的主要是 DNS 和 DHCP。
递归是"你替我问",迭代是"我自己问"主机到本地域名服务器一般是递归。
取一个对象是 2 个 RTT建立连接 1 个,请求和响应 1 个。
HTTP 无状态,但用的是有连接的 TCP"无状态"说的是服务器不记录客户的历史。
FTP 的两条连接都是 TCP控制连接 21 一直开着,数据连接 20 用完就关。
SMTP 推,POP3 拉用浏览器收发邮件时,浏览器和服务器之间是 HTTP,服务器和服务器之间仍是 SMTP。
七 · 看一眼就行

这些不用花时间

八 · 自测

先自己做,再点开看

一个网页包含 1 个 HTML 文件和 5 张图片,都在同一台服务器上。用持久连接、非流水线方式,从发起连接到全部收完需要几个 RTT?(忽略传输时间)
建立连接 + 取 HTML:2 个 RTT 5 张图片各 1 个 RTT:5 个 合计 7 个 RTT
同上,改成非持久连接,需要几个 RTT?
6 个对象 × 2 = 12 个 RTT
下列协议中哪些基于 UDP:HTTP、DNS、SMTP、DHCP、FTP?

DNS 和 DHCP。其余三个都基于 TCP。

用户在浏览器里登录网页邮箱,给另一个邮件服务商的用户发信。浏览器到发送方服务器、发送方服务器到接收方服务器,分别用什么协议?

浏览器到服务器是 HTTP,服务器到服务器是 SMTP。