OSI的由来
在网络传输过程中,我们会遇到很多问题,比如文本格式转换、丢包、数据完整性检查、路由、信号转换、信号衰减等。为了简化问题复杂度,人们提出了OSI模型,不同层次针对不同阶段的问题,不同层次之间提供接口,互不干涉,一个层次问题的解决可以任意方式,只要满足接口。
OSI模型
除此之外还有4层划分方式:物理层和链路层放在一起统称物理层,然后是网络层,传输层,应用层。
数据的网络传输过程
以http请求为例:
一个的http请求过程会经历2个来回。第一个是域名解析过程,目的是解析出目标的ip地址,因为客户端与服务端通讯的时候只认ip地址,不认域名;然后是http协议请求响应过程。
首先浏览器解析域名的时候会先看浏览器的缓存是否有当前域名,
如果没有则去查看本地操作系统上的host配置有没有当前域名,
如果没有就向本地操作系统DNS服务(本质是一个服务,有自己的ip地址,本地操作系统配置好的)发起DNS请求以获取目标ip地址(通过UDP协议向本地DNS服务的53端口发请求),
DNS请求是应用层协议,使用UDP协议,会调用传输层的接口加上UDP报文头,
传输层会调用网络层的接口加上IP协议头,
网络层会把请求交给数据链路层,
数据链路层(以太网/无线lan)传输只认mac地址,会把本地的mac地址加上,同时会通过网络层的ARP协议请求获取下一个的传输地址的mac地址,然后加上下一个地址的mac地址,把请求通过物理层(光纤/波)传给路由器,
路由器是一个3层传输设备,包括物理层,数据链路层,网络层。
数据链路层会检查传输过来的信息有没有mac地址,没有就抛弃,有就继续交给网络层,
网络层会把请求传给网络运营商路由器,然后再传到网络运营商的DNS服务器。
运营商DNS服务器会检查自身缓存有没有对应域名,有并且缓存没过期就正常返回,如果没有,运营商就会作为代理向根域名DNS服务发起请求(例如.com,运营商服务器会内置13个根域服务器的ip),根域名DNS会向下一层发起请求(例如 aaa.com ),然后再次被代理请求( www.aaa.com )直到查找到对应ip地址,最终返回给运营商,然后原路返回给客户端操作系统内核,再到浏览器。
http经历的OSI层级跟DNS请求一样,只不过http请求的时候已经知道了服务端地址,定向发送就可以了,同时应用层协议改为http,传输层使用的是TCP协议。
TCP的三次握手和四次挥手:
TCP的三次握手,主要的出发点是怎样 确认 客户端和服务端发送的请求被收到,因此最优解就是三次通讯,
首先客户端发起连接请求,服务端收到并返回客户端的信号,这时客户端可以确定自己的请求被收到了;
然后客户端再向服务端发送一次确认请求,携带服务端的信号,这样服务端也可以确定自己的响应被收到了。
双方都得到确认后,就可以安心收发数据了。
TCP的四次挥手,
四次挥手的原因:
https协议(TLS/SSL协议)
https协议产生的背景是http协议不够安全,因为http协议是明文传输的,难以满足一些敏感信息传输的场景。SSL(Secure Sockets Layer)是早期叫法,后来被更名为TLS(Transport Layer Security)
https协议的是基于http协议设计的,从结构上并未动http协议,只是在http基础上加了一层TLS/SSL处理,通常http协议直接调用系统socket接口发起TCP传输,现在是http协议完成后,先经过TLS/SSL协议加密,再调socket接口进行TCP传输。同理响应的时候要先经过TLS/SSL解密,再作为普通http协议报文处理。
TLS协议需要用到2种算法:
摘要加密/解密的算法分2种:
参考:
浏览器请求全过程