计算机网络:应用层

165 阅读4分钟

日新计划6月更文 Day 7

  应用层是计算机网络七层中最上一层,也是前后端开发直接接触的一层。在应用层上有着各种我们非常熟悉的协议与服务,比如 HTTP、FTP、SSH、SMTP、DNS……

   这里的“协议”是通信双方共同遵守的对通信语义、语法与时序的规范,它为网络通信的奠定了基础。

  应用层通信双方通过发送与接收报文(Message)进行通信,使用 URL 进行定位。

HTTP

  HTTP(HyperText Transfer Protocol,超文本传输协议)是一种非常常见的基于 TCP 的应用层协议,服务端(Apache、Nginx、Caddy 等)默认使用 80 端口监听客户端的请求并进行响应。HTTP 具有半双工、无状态的特点,因此效率较高,但也带来了一些其他问题需要其他手段解决。

  HTTP 通信由客户端向服务端发送的 请求报文(Request Message)开始,由服务端向客户端发送响应报文(Response Message)结束。

  请求报文由请求行、请求头、空行和请求体组成,请求行包括请求方式、请求 URL、协议版本,请求头为多个 Key Value 对,如:

POST /login
Host: localhost:18080
Accept: application/json

{
    "username": "admin",
    "password": "123456"
}

  响应报文包括状态行、响应头、空行和响应体,状态行包括 HTTP 版本、状态码与状态短语,如:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "code": "00000",
    "message": "Request Success",
    "data": {
        "token": "xxxxx"
    }
}

请求报文与响应报文使用 CR LF 换行

FTP

  FTP(File Transfer Protocol,文件传输协议)「RFC 959」是一种古老的在计算机之间传输文件的协议 。FTP 服务端使用 21 端口监听来自客户端的通信请求,建立连接后使用该连接传输 ASCII 文本进行通信并使用 20 端口与客户端建立连接来传输文件。

现在谁还用 FTP 啊,临时向服务器传输文件用 SFTP 吧,OpenSSH 亲情附赠,无需过多配置,更简单更安全。

E-mail

  通常用户的客户端不是实时在线的,所以需要邮件服务器(Mail Server)“代替”用户进行邮件发送与接收,用户使用"用户代理"(User Agent)与为自己服务端邮件服务器通信完成邮件阅读、发送等操作。电子邮件地址采用用户名@邮件服务器的格式。

  邮件服务器之间使用 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)「RFC 2821」进行邮件传递。SMTP 也是一种基于 TCP 的协议,各个服务器使用 25 端口等待来自 “client” 的邮件。

  RFC 822 搞定了 E-mail 报文的格式:

To: foo@abc.com
From: bar@def,com
Subject: Hellp

Texts...
  1. 这里的报文是 UA 与 Mail Server 通信使用的格式

  UA 与 Mail Server 之间可以使用 POP3、IMAP 甚至 HTTP 进行通信,POP3 不保存用户状态且要求客户端保存邮件内容(UA 下载后 Server 自动删除邮件),IMAP 则更加人性化,甚至允许用户在 Server 上管理自己的邮件。

DNS

  DNS(Domain Name System,域名系统)提供域名与 IP 地址之间的解析服务,服务器使用 53 端口监听来自客户端的请求,双方基于 UDP 协议进行通信。

  用于互联网非常复杂,DNS 也是有许多服务器分层组成的,查询过程是递归的:

  • 访问www.baidu.com,首先在本地 DNS 缓存寻找,找到后直接使用
  • 若找不到,向配置的本地 DNS 服务器发送请求(如常见的 114 DNS)
  • 本地域名服务器查询自己的缓存,命中则返回,否则将查询请求发送至 13 台根服务器(Root Name Server)
  • 根服务器根据要查询的域名,向顶级域名服务器(TLD Server,Top-Level Domain Server)发送请求(本例中是管理 .com 的服务器)
  • 顶级域名服务器依次向下查询,直至找到解析结果,向上返回至本地 DNS 服务器
  • 成功查询后,途径的各个服务器都会缓存这次查询的结果