应用层是离业务最近的一层,协议数量也最多。与其逐个死记端口和缩写,不如按”每个协议解决什么问题”来组织记忆,再抓住 HTTP 这一个最常用协议的方法语义与状态管理机制深入下去。

它解决什么问题

传输层(TCP/UDP)只负责把字节可靠或尽力地送到对端进程,但”送过去的字节是什么意思、双方按什么顺序对话”得由应用自己约定。应用层协议就是这些约定的成文标准:浏览器和服务器靠 HTTP 对话,发邮件靠 SMTP,域名翻译靠 DNS。标准化的价值在于——Chrome 不需要知道对面跑的是 Nginx 还是 Tomcat,只要双方都按 RFC 说话就能互通。下面按问题域逐一展开。

核心原理:每个协议管哪件事

网页与接口:HTTP/HTTPS

HTTP 解决”客户端如何从服务器获取和提交资源”的问题,采用请求-响应模型:客户端发一个请求,服务器回一个响应。它基于 TCP(HTTP/3 改为基于 UDP 的 QUIC),默认端口 80。HTTP 本身是明文且无状态的——服务器天生不记得上一次请求是谁发的。HTTPS 不是新协议,而是 HTTP over TLS:报文先经 TLS 加密再走 TCP,补上机密性、完整性与身份认证,端口 443。生产环境涉及登录、支付、隐私数据的场景,HTTPS 是底线。

实时双向通信:WebSocket

HTTP 的请求-响应模型里,服务器不能主动找客户端,实时性靠轮询硬撑,既浪费又慢。WebSocket 解决”一条连接上双方随时互发消息”的问题:先借一次 HTTP 握手(带 Upgrade: websocket 头,服务器回 101 Switching Protocols),把连接升级为全双工通道,之后数据以帧为单位双向流动,聊天、弹幕、协同编辑、行情推送都靠它。长连接容易假死,实践上要配 Ping/Pong 心跳。

域名翻译:DNS

网络通信只认 IP,人类只记域名,DNS 负责两者的映射。绝大多数查询走 UDP 53,因为一问一答足够小,省去 TCP 握手更快;当响应过大被截断或做区域传送时改用 TCP。DNS 是明文协议,存在窃听与劫持风险,因此衍生出 DoH(DNS over HTTPS)和 DoT(DNS over TLS)两条加密路线。

自动配网:DHCP

一台机器接入网络,得有 IP、子网掩码、默认网关、DNS 服务器四个参数才能通信,手工配置既繁琐又易冲突。DHCP 解决”即插即用”的自动分配问题,基于 UDP(服务器 67、客户端 68),过程是经典的 DORA 四步:客户端广播 Discover 找服务器,服务器回 Offer 报出可用地址,客户端广播 Request 选定,服务器 ACK 确认。地址带租约,到期前客户端会续租;这也是”重启路由器后内网 IP 变了”的原因。

文件传输:FTP 与 SFTP

FTP 解决跨系统传文件的问题,基于 TCP,且设计特殊——开两条连接:控制连接(端口 21)传命令,数据连接传文件内容,互不干扰。主动模式下服务器反向连客户端的数据端口,易被 NAT 和防火墙挡住;被动模式由客户端发起数据连接,是生产常态。FTP 全程明文,账号密码和文件都能被窃听,敏感场景应改用 SFTP(基于 SSH 的安全文件传输,注意它和”FTP over TLS”的 FTPS 不是一回事)。

电子邮件:SMTP 与 POP3/IMAP

邮件系统由两类协议分工:SMTP 管发——客户端把邮件提交给自己的邮件服务器、服务器之间转发投递,走的都是 SMTP,常见端口 25(服务器间)、587(客户端提交,配 STARTTLS)、465(隐式 TLS);POP3/IMAP 管收——用户从邮件服务器读取邮件。POP3 偏”下载到本地”,多设备同步弱;IMAP 把邮件留在服务器端管理,已读状态、文件夹分类多端同步,是现代邮箱的默认选择。

深入机制:HTTP 方法论

GET 与 POST 的语义分野

GET 和 POST 的区别常被背成参数放 URL 还是 body,那只是表象,本质是语义约定:

  • GET 用于获取资源,语义是”只读”——安全(Safe)且幂等。参数走 query string,可以被缓存、可以加书签、可以被浏览器历史记录。
  • POST 用于提交数据让服务器处理,语义是”引起状态变化”——新增订单、发表评论。参数通常放 body,不被缓存,刷新页面浏览器会警告重复提交。

语义的真正约束对象是中间设施:CDN、代理、浏览器都按语义行事——GET 可以被放心缓存和预取,POST 绝不自动重发。如果把”删除数据”做成 GET 接口,一次爬虫预取就可能清空数据库。

幂等性

幂等指同一请求执行一次和执行 N 次效果相同。GET、PUT、DELETE 幂等,POST 不幂等。它不是技术限制而是约定:网络重试、超时重发的工程实践全部建立在这张语义表上——PUT 天然适合做成幂等更新,而 POST 创建资源需要额外的幂等键(如订单号去重)兜底。

HTTP 无状态,但登录态、购物车又必须跨请求维持,于是有了状态管理机制:服务器通过 Set-Cookie 响应头下发一小段数据,浏览器存起来,之后每次请求自动在 Cookie 头里带回。常见做法是 Cookie 里只放一个 sessionId,真正的用户数据存在服务器内存或 Redis 里,这就是 Session 模式。它简单可控(服务端可强制踢人下线),但服务端要存状态,水平扩容时需共享存储;另一种思路是把状态签进 Token(如 JWT)发给客户端,服务端无状态、易扩展,代价是吊销困难。两者是”状态放服务端还是客户端”的经典权衡。

工程实践

  • 明文协议换安全版:Telnet 换 SSH、FTP 换 SFTP、HTTP 换 HTTPS、传统 DNS 视场景上 DoH/DoT。凡是过公网的认证与隐私数据,明文协议一律视为不可用。
  • 端口是约定不是身份:把 HTTP 跑在 8080 完全合法,防火墙策略也不要只按端口放行,必要时结合协议识别。
  • 邮件协议别配错:代码里发邮件用 SMTP(通常 587 + STARTTLS + 认证),客户端收邮件才用 IMAP/POP3,两者混用是新手高频错误。
  • 实时场景选型:服务器单向推事件可以先用 SSE(基于 HTTP,实现简单);需要双向高频交互再上 WebSocket,并记得配心跳与断线重连。

对比与权衡

协议 解决的问题 传输层 默认端口 关键特征
HTTP 资源获取与提交 TCP 80 请求-响应、无状态、明文
HTTPS 安全 Web 通信 TCP(HTTP/3 走 QUIC) 443 HTTP over TLS,加密与身份认证
WebSocket 全双工实时通信 TCP 80/443 借 HTTP 升级,服务端可主动推
DNS 域名→IP 映射 UDP(大响应转 TCP) 53 分布式层级查询,明文
DHCP 自动分配网络参数 UDP 67/68 DORA 四步,地址带租约
FTP 文件传输 TCP 21(控制) 双连接、明文,被动模式更常用
SFTP 安全文件传输 TCP(SSH 之上) 22 加密,与 FTPS 不是同一协议
SMTP 邮件发送与转发 TCP 25/465/587 只管”发”
POP3 邮件接收 TCP 110/995 下载到本地,多设备同步弱
IMAP 邮件接收与管理 TCP 143/993 服务器端管理,多端同步

面试视角

GET 和 POST 的区别是什么?

核心是语义:GET 获取资源,安全且幂等,参数在 URL,可被缓存和收藏;POST 提交数据触发状态变化,不幂等,参数通常在 body,不被缓存。参数位置只是语义带来的表现,真正不能越界的是语义——用 GET 做写操作会被缓存、预取和爬虫放大成事故。

什么是幂等性,哪些 HTTP 方法幂等?

幂等指同一请求执行多次与执行一次效果相同。GET、PUT、DELETE 幂等,POST 不幂等。网络超时重试的容错设计依赖这张表:幂等方法可放心重发,POST 类操作要靠业务层幂等键兜底。

Cookie 和 Session 有什么区别?

Cookie 是浏览器端的存储机制,由 Set-Cookie 下发、请求时自动携带;Session 是服务端保存用户状态的机制,常借 Cookie 里的 sessionId 关联。安全敏感数据放服务端 Session,Cookie 只存标识,并配 HttpOnly、Secure 属性。

WebSocket 和 HTTP 是什么关系?

WebSocket 借一次 HTTP 握手完成协议升级(101 Switching Protocols),之后脱离请求-响应模型,在一条 TCP 连接上全双工通信。HTTP 适合一问一答的资源访问,WebSocket 适合聊天、推送这类双方随时发消息的实时场景。

SMTP、POP3、IMAP 怎么分工?

SMTP 负责发:客户端提交邮件、邮件服务器之间投递;POP3 和 IMAP 负责收。POP3 偏下载本地、多端同步差,IMAP 在服务器端管理邮件、状态多端同步,现代邮箱基本都用 IMAP。

小结

  • 应用层协议按问题域记忆:HTTP/HTTPS 管资源传输,WebSocket 管实时双向,DNS 管域名翻译,DHCP 管自动配网,FTP/SFTP 管文件传输,SMTP 管发邮件、POP3/IMAP 管收邮件。
  • HTTP 方法论的要点在语义:GET 安全幂等、POST 触发状态变化;幂等性是重试与容错设计的地基。
  • HTTP 无状态,靠 Cookie/Session 或 Token 维持登录态,本质是”状态存服务端还是客户端”的取舍。
  • 明文协议都有安全替代品:SSH 替 Telnet、SFTP 替 FTP、HTTPS 替 HTTP,过公网的敏感场景一律用加密版本。