课程内容#
概述#
网络应用程序的体系结构主要分为CS 结构和P2P 结构。
- 前者是客户端(Client)/ 服务端(Server)结构,如微信、QQ、游戏。
- 后者是端(Peer)到端结构,又叫对等体系结构,如迅雷、百度网盘。
- 进程通信时,没有明确的 C/S,发起者即为客户端,提供服务者即为服务端。
应用程序服务要求包括可靠数据传输、吞吐量、定时(时效)和安全性。不同的应用对网络服务有不同的要求,如数据可否丢失、带宽需求、时间敏感性等,所以产生了不同的应用层协议和运输层协议:
- 应用层协议定义了交换报文类型、报文语法、字段语义以及发送、响应规则,类似网络协议的三要素(语法、语义、同步)。
- 运输层协议
- TCP:面向连接的服务,提供可靠的数据传输。
- UDP:不提供必要服务的轻量级运输服务,不提供可靠的数据传输。
- PS
- socket 是应用程序与网络之间的接口,对于运输层的控制仅限于选择运输层协议、设定参数。
- UDP 可以自己实现可靠的数据传输。
WEB 与 HTTP 协议#
WEB 术语:对象、超文本标记语言 HTML、统一资源定位符 URL、WEB 页面、WEB 浏览器、WEB 服务器(httpd、apache、tomcat)
HTTP:超文本传输协议
- HTTP 行为:请求报文、响应报文
- HTTP 特点
- 不用担心数据丢失
- 无状态协议,服务器不存储客户相关状态信息
- HTTP 服务器总是处于打开状态,有一个固定的 IP
- 使用 CS 结构
- 非持续连接和持续连接,又名,短连接和长连接
- HTTP 属于短连接,服务器响应了请求后会通知 TCP 断开连接,所以对于多个对象会重复地连接和断开。
- HTTP 请求过程包含 TCP 三次握手,一般在第 3 次握手包含请求,直到接受对应文件。
- 请求报文
- 请求方法:
- GET-- 获取
- POST-- 提交表单
- HEAD-- 测试,看通不通,不需要获取所有数据
- PUT-- 传数据到远端(PUT 是幂等的,但 POST 不是)
- DELETE-- 删除远端数据
- 首部字段名包含浏览器类型等等。
- 响应报文
- 短语一般是状态码的描述。
- 常见状态码及短语:
- 200 OK
- 301 Moved Permanently
- 400 Bad Request
- 404 Not Found
- 505 HTTP Version Not Supported
- 用户与服务器的交互 ——COOKIE
- 请求和相应报文中都添加了 COOKIE 首部行
- 在用户端由浏览器管理相应 COOKIE 文件
- 在服务端维护一个数据库
- 一个从来没有请求过 jd 服务器的客户主机,在发起请求后,服务器会创建其 COOKIE,并返回给客户;
- 等下次下下次再请求 jd 服务器的时候,服务器会根据 COOKIE 返回特定数据。
- PS:
- 服务器根据客户行为会生成一个人物画像,可以和 COOKIE 绑定。
- 公司之间可能共享数据库。
- WEB 缓存器🌟
- 又名代理服务器,如 CDN。
- 情景:海量用户访问某一个服务器的数据,流量过大肯定会导致服务器奔溃。
- 优化过程:浏览器先访问 WEB 缓存器,如果里面没有想要的数据,则再往上游找数据,最后返回数据,并将数据存放在 WEB 缓存器里。
- 优点:减少对客户请求的响应时间,减少了数据中心的通信量,改善应用性能。
- PS:WEB 缓存器会定时向上游服务器请求更新数据。
HTTPS 协议#
HTTPS:具有安全性的 SSL 加密传输协议
HTTPS 在 HHTP 通信的中间过程添加 SSL/TLS(加密 / 解密)过程。
HTTPS 特点:
- 它需要到 CA 申请证书,需要交费;
- 它是具有安全性的 SSL 加密传输协议,而 HTTP 超文本传输协议,信息是明文传输;
- 它与 HTTP 使用的是完全不同的连接方式,端口也不一样,前者是 443,后者是 80。
HTTP/2 协议#
新特性:连接复用。没有同步的限制,一次可以传输多条消息,而不用一来一回。
FTP 协议#
FTP:文件传输协议
用户连接远程服务器,给用户展示一个远程桌面文件夹,用户可以对其进行操作。
双连接——FTP 的 TCP 连接:
- 控制连接:21 端口,长连接;
- 数据连接:20 端口,短连接。
- 特点:适用于并发量不高的场景,可以简化业务实现。
PS:个人用户用的少,一般服务于局域网。
SMTP、POP3、IMAP 协议#
邮件相关,最早期的互联网业务
先从用户 A 的代理,通过 SMTP 连接自己的邮箱服务器,再连线用户 B 的邮件服务器,最后到达用户 B 的代理。
- 邮箱服务器会检查邮件内容是否合规;
- SMTP 协议只负责推,最后一步是用户 B 基于其它协议主动请求拉取
PS:
- 不是直接与用户主机通信
- 底层是基于 TCP
DNS 协议#
将主机名 / 域名转换为 IP 地址;提供负载均衡服务
- 解析域名
- 负载均衡:同一个域名根据流量转换到不同的合适的 IP 地址,主要是用来分流。
集中式 DNS 存在的问题:
- 单点故障:一个小问题会影响到全局(现在流行微服务,减少各种服务之间的耦合度)
- 通信容量大
- 距离远会导致时延高
- 维护不易(目前银行也有这个问题,系统版本低,想迁移却难以迁移)
DNS 域名系统
- 根 DNS 服务器,因特网上有 13 个,都不在中国
- 顶级域 DNS 服务器,简称 TLD,如 com、cn
- 权威 DNS 服务器,如腾讯等 DNS 服务提供商
- 本地 DNS 服务器,可能有多个,如局域网、学校
DNS 解析过程:
主机到本地 DNS 属于递归式,主机只发一次请求,只有本地 DNS 得到结果,才会返回。
本地 DNS 发起请求属于迭代式,返回失败就再次请求,可看图感受。
DNS 记录
- Name:名称 / 主机 / 别名
- Value:IP 地址 / 应答地址 / 目标地址
- Type:记录的类型
- TTL:域名 - IP 关系的有效时间,即本地缓存的时间
常见的类型有:
可以尝试去自己的 DNS 服务平台里添加 DNS 记录~
PS:规范主机名的可读性稍弱,可参考DNS records——CloudFlare
附加知识点#
- 网络协议的三要素:语法、语义、同步(有迹可循)