浅入深出,简单的打开网页里面藏着多少复杂理论
基础背景
听过计算机网络基础、TCP/IP协议群
打开页面的过程
- 我们在浏览器输出 GitHub.com然后按下enter键
- 首先浏览器会查看缓存(没过期的)的ip指向或者host里面有没配置指向,假设都没有就向远程DNS服务器发起解析域名的请求
- 通过UDP的传输协议,如果就近DNS解析不了还会向根DNS继续发起,中间还有运营商DNS服务器。不过正常情况下我们还是能得到IP地址的返回。
- 拿到IP之后,我们就能发起HTTP请求,TCP的传输层协议通过著名的三次握手后,开始发送http请求给ip服务器,相应返回,浏览器解析(可能还有其他请求),四次挥手。
DNS请求不区分域名大小写,dig指令可以追踪其链路 这里还会经过重定向,因为默认是http,但正常会重定向回去https 平时我们配置的DNS服务器114.114.114.114也一定程度决定了我们拿到什么样的服务器IP
网络层次
常用的三个体系架构,通过协议,功能划分。其中第四层完成数据传送服务,上面三层面向用户
正常消息就从应用层开始,逐层封装,到最后的二进制在物理媒介中传输到正确的服务器逐层解包获得消息,然后响应,原路返回。
- 应用层——为操作系统或网络应用程序提供访问网络服务的接口
这里协议很多常用的TCP系的:HTTP、FTP、SMTP、TELNET…… UDP系的:DHCP、NTP、TFTP…… TCP和UDP都用的:DNS、SOCKS、MSN…… - 表示层——加密解密、转换翻译、压缩解压缩
- 会话层——不同机器用户之间的建立和管理
目录访问协议、SSL/TLS协议就是在这一层,也是我们常说的RPC协议 - 传输层——最重要的一层,负责数据接受,并视情况分割,保证数据可靠传输到对端。差错控制和流量控制问题。两个重点TCP和UDP
- 网络层——控制子网、路径选择、路由及逻辑寻址
IP协议:提供不可靠、无连接的传送服务。配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP - 数据链路层——物理寻址、数据组合成帧、以太网协议。
- 物理层——传输数据的物理媒介,通信信道上的原始比特流传输。IEEE 802.2
DNS是基于TCP和UDP的,简单来说客户端与DNS服务器用UDP节省时间,DNS服务器之间用TCP因数据量大
HTTP协议
基于TCP协议的应用层传输协议,无状态(请求之间独立),以请求/响应方式运行
格式
请求——
返回——
GET / HTTP/1.1
Host: baidu.cn
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
HTTP/1.1 302 Moved Temporarily
Server: bfe/1.0.8.18
Date: Mon, 28 Jun 2021 03:53:55 GMT
Content-Type: text/html
Content-Length: 161
Connection: Keep-Alive
Location: https://www.baidu.com/
Expires: Tue, 29 Jun 2021 03:53:55 GMT
Cache-Control: max-age=86400
Cache-Control: privae
XXX
//只是刚好都没有消息正文
- 消息正文比并不是必须
- 换行符和空格必须严格按规范
- 头部字段名key与值value用:分割,CRLF换行表示字段结束
- key不区分大小写,不能使用_或者空格,没有顺序意义
请求类型
HTTP/1.0定义了三种请求方法:GET、POST 和 HEAD,到了HTTP/1.1,新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT。 HTTP的规范要求
- GET用于信息获取,而且应该是安全和幂等的
- POST请求表示可能修改服务器上资源的请求
- HEAD类似于GET请求,不过返回的响应中没有具体内容,用于获取报头
- OPTIONS返回所有可用的方法,检查服务器支持哪些方法
- PUT从客户端向服务器传送的数据取代指定的文档的内容
- DELETE发出一个删除指定文档的请求
- TRACE回显服务器收到的请求,主要用于测试或诊断。
- CONNECT用于ssl隧道的基于代理的请求
GET和POST请求的区别
- 按规范看,他们负责的功能不一样
- 其次URI是有长度限制的(浏览器对URL限制,我没试过)
- 习惯上GET是没有body,但其实可以带body,但部分服务器会忽略(很旧的服务器了吧)
- 最重要的GET正常都是有缓存服务的,URI会作为缓存的KEY(浏览器自带)
- 执行效率GET好(我蒙的)
HTTP-S
就是HTTP的基础上多了一层SSL/TLS协议,来确保信息安全。使用了非对称加密,对称加密以及HASH算法。
http默认端口80,https默认端口443
没有Https之前,就直接通过Socket调用TCP明文传输数据,这样的话有可能途中被截取串改数据,所以为了确保安全性,会多了一层SSL/TLS去确保信息安全。
过程
- 首先要保证TCP三次握手成功,可以可靠的传输数据。
- 客户端发送加密套件列表给服务端
- 服务端选择最安全的加密套件(RSA,发送公钥),和公钥数字证书发送
- 客户端校验证书(这里通过证书链去逐层校验,直至浏览器上绑定的跟证书),确保信息来自服务端没有被篡改。生成随即秘钥(为了对称加密),并用公钥加密发给服务端
- 这样生成的随机秘钥只有服务端可以用私钥去解密
- 成功的对称加密双向传输
摘要算法:md5,sha1,sha2,sha256 对称加密:AES,异或,RC4 非对称加密:DH、RSA、DSA、ECC
巧妙了运用非对称加密的安全,摘要算法校验数据完整性,对称加密的高效,来保证HTTP传输过程的安全
总结
一次打开网页的过程,清晰的了解。http协议格式,作用。https又是如何保证安全。当然最重要的TCP还没说,内容太多就放到下次整理了。
不能再卷了,每次听到GET和POST的区别我都只能答,规范上负责的功能不一样。当然我避开了中继器、集线器、网桥、交换机、路由、网关……毕竟我也不会哈 知其然而不知其所以然
|