导学
- 传输层及以下已经提供了完整的通信服务,应用层是面向用户的
- 首先,应用层无需考虑通信问题了,可以理解成调用TCP/UDP通讯接口即可
- 主要有两种场景:
- 应用层软件主要定义:
- 应用进程的报文类型,包括请求和应答
- 报文的语法、格式
- 应用进程发送数据的时机、规则
- 总的来说,更关注逻辑业务,而非底层传输
- 回顾一下传输层:
DNS
- 域名系统(domain name system)
- IP+端口可以唯一指定应用进程,但是谁能记住这么多的点分十进制?一般都是记忆域名例如
www.baidu.com
- 域名由字母、数字和点组成
- 域名可分为顶级域、二级域、三级域
- DNS的作用就是将域名转换为IP地址和端口号
- DNS服务器工作流程:
- 客户机发起域名解析请求,包含两种查询方式
- 递归查询:类似递归程序,一直往下查(本地—根—顶级—权限),再回归
- 迭代查询:本地域名服务器一个接一个问,找到答案后返回
- 客户机发起域名解析请求,包含两种查询方式
- 注DNS占用53端口,权限server使用TCP向主域名服务器(顶级)更新,解析域名时使用UDP
DHCP
- 动态主机配置协议(dynamic host configuration protocol)
- 是一个局域网协议
- 局域网:采用NAT技术的内部网络
- 基于UDP协议通信
- 场景:我们周围的网络环境可能会经常变化,IP地址也会改变,不能总是人为配置吧
- 作用:DHCP可以给我们提供当前环境的临时IP
- Windows查看网络配置:这个自动就是用了DHCP
- Windows查看网络配置:这个自动就是用了DHCP
- 工作流程:
- 主机广播发现报文,例如IP全为1,DHCP收到后就知道这个主机需要分配IP
- DHCP服务器也不是直接回应一个IP,而是告诉主机:“我有,你要不要?”
- 主机发送请求报文,得到IP
- 主机广播发现报文,例如IP全为1,DHCP收到后就知道这个主机需要分配IP
- 小结:你会发现这里的协议都有服务器,或者说都在定义应用功能,像网站一样等待被请求;而不是下层关注于通信过程,确保传输
HTTP
- 超文本传输协议(HyperText Transfer Protocol)
- 浏览器客户端访问服务器最常用的协议
- 统一资源标志符(Uniform Resource Identifier, URI),可以唯一标识服务器的资源
- 常见的还有统一资源定位符URL(Uniform Resource Locator),访问资源时使用
- 区别是:只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL;URL是URI的子集
- 例子:htps://<主机>:<端口>/<服务器路径>
- 底层由TCP协议实现:可靠的数据传输协议,C/S架构
- Server端即Web服务器,由硬件和软件组成
- Web服务器的处理流程:
- 发起请求的方法很多:GET/POST/DELETE/UPDATE
- 请求报文内容
- 请求头中包含cookies
- 应答报文内容:主要解释一下状态码(status code)
- 发起请求的方法很多:GET/POST/DELETE/UPDATE
- 工作结构
- Web缓存
- 热点数据(经常访问)和冷门数据一般遵循二八原则
- 为了提高效率,一般将热门数据放在缓存中
- 支持缓存的硬件:Cache、Redis等
- 代理:客户端看不到服务器架构
- 正向代理:
- 反向代理:
- 正向代理:
- Web缓存
- CDN(Content Delivery Network:内容分发网络):加速访问
- 由于空间距离的不同,不同地方的用户得到响应的时间不一样
- 如图,上海访问北京的服务器就快
- 若想让重庆深圳也能快速得到响应,可以在广州将视频图片之类的大文件信息缓存
- 即通过中心平台的负载调度,使用各地的边缘服务器就近提供访问,减少网络拥塞
- 如图,上海访问北京的服务器就快
- 由于空间距离的不同,不同地方的用户得到响应的时间不一样
- 爬虫:搜索引擎的本质,即拉取页面内容并索引
- 可能会增加网络拥塞、损耗服务器资源
HTTPS
- HTTP协议没有保护用户敏感信息的措施
- 非对称加密算法
- 使用一组密钥进行加密传输,用过git吗?你得把自己电脑生成的公钥送上去,本地私钥会在每次pull/push的时候解密/加密
- 使用一组密钥进行加密传输,用过git吗?你得把自己电脑生成的公钥送上去,本地私钥会在每次pull/push的时候解密/加密
- 数字证书:可信任组织颁发给特定对象的认证
- 使用https的网站需要申请证书,相当于得到一组密钥,即非对称加密
- 加密传输的过程就交由SSL(安全套接层)完成,这是个协议
- 重点看一下参数握手过程:
- 第四步:
- 即综合使用了对称加密和非对称加密
- 双方分别生成密钥,没有传输密钥,降低了泄露的可能性
- 将非对称转为对称是为了提高效率
- 使用https的网站需要申请证书,相当于得到一组密钥,即非对称加密
- 至此,也应该知道了HTTP和HTTPS的主要区别(常考)
- HTTPS=HTTP+SSL
- HTTPS端口443,HTTP端口80
小结
- 本篇介绍应用层,主要是DNS、DHCP、HTTP、HTTPS协议;最后对HTTPS的加密传输简单解释
- 下一篇是基础篇的最后,通过实现一个网络嗅探工具,分析IP/UDP/TCP报文,更进一步理解协议
- 最后提一下,协议的实现基于硬件,例如使用Perl语言对路由器或服务器编程(调用硬件程序),这里只是对其功能的解读