前言
本篇文章主要讲解http协议,无论是前端开发还是后端开发者,http协议都是必须要知道一个知识。
与Http协议密切相关的DNS,TCP,IP
我们在浏览器输入一个地址后,计算机和浏览器从开始做了哪些事情,以chrome浏览器为例子:从场景1进行到场景4
场景1-DNS(应用层)
地址输入成功后,首先会到达负责域名解析的DNS服务
1. 首先Chrome搜索自身的DNS缓存。看浏览器自身的缓存中是否有输入的域名对应的ip地址。如果有直接拿过来用(这个过程需要一分钟)
2. 浏览器本身没有,搜索操作系统自身的DNS缓存(浏览器没有找到缓存或者缓存已经失效)
3. 操作系统的DNS缓存也没有找到,就会尝试读取本地的HOST文件
4. 如果Host文件中也没有找到,浏览器发起一个DNS的一个系统调用(域名解析请求,一半都是运营商提供的)
- 宽带运营上服务器查看本身缓存,找到对应的域名条目
- 如果未找到,运营商服务器会代替我们的浏览器发起一个迭代DNS解析的请求,(首先去找根域的ip地址,一层一层的询问,最后找到我们输入域名的ip地址),找到后就会把这个ip地址结果发给我们运营商服务器,运营商服务器把结果返回操作系统内核同时缓存起来。操作系统内核就会把ip地址结果返回浏览器,最终浏览器拿到了输入域名的地址
5. 浏览器获得域名对应的ip地址后
场景2-TCP(传输层)
浏览器拿到对应域名的ip地址后,带着http数据进入传输层,TCP传输层为了确保数据能到达目标,发送端与接收端经典的三次握手。
握手过程使用了TCP的标志(flag)-SYN(synchronize)和ACK(anknowlegement)
场景3-IP协议(网络层)
注意这里的IP协议和IP地址不要弄混,两个完全不同的概念。
- IP协议的作用是把各种数据包传输给对方。但是要是能保证确实传输到对方哪里,还需要满足两个重要条件IP地址和MAC地址都要是对的。IP间的通信依赖MAC地址
- 传输过程中使用ARP协议凭借MAC地址进行通信。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。查找过程也是不断中转的过程,一站一站的中转,最终确认那个ip接收端对应的正确MAC地址。这
- 确认了正确的MAC地址之后,增加了作为通信目的地的MAC地址后转,就可以继续把http数据往下传递,转发给链路层。
场景4 链路层
接收端的服务器在链路层接收到数据,就会往自己上一层发送,重新走一遍IP协议——TCP协议——最后传输到应用层,这时候真正接收到了由客户端发送过来的http请求。