课程内容
概述
网络应用程序的体系结构主要分为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
附加知识点
- 网络协议的三要素:语法、语义、同步(有迹可循)