URL输入到浏览器响应经历了什么
HTTP —— 解析URL
开头,如 http: 表示访问数据的协议
// 后的字符串表示服务器名称
/ 之后表示文件的路径名,如index.html
DNS —— 查询真实地址
查询服务器域名对应的 IP地址,因为OS发送消息一定要通信对象的IP地址。
过程很简单,如下图:
当然,浏览器首先会看自身对于这个域名有没有缓存,有就直接返回,没有就去问OS,OS也没有就是hosts文件问,还没有才会执行上图的问路过程。
协议栈
HTTP的传输工作由操作系统中的协议栈完成。
浏览器/应用程序 通过 Socket 库,委托OS的协议栈工作。
协议栈又分为:负责收发数据的 TCP / UDP协议,和 IP 协议控制网络包(数据被切分为一个个网络包)的收发。
TCP
三次握手⭐,建立连接。
将需要传输的数据以 MSS 长度进行划分,每一块数据放入单独的网络包中,再加上TCP头信息交给IP模块发送信息,最后发出的也就是 MTU 长度。
TCP头部 + TCP数据(Http头部+数据)
IP —— 远程定位
从源IP地址,即客户端输出IP地址,发送到目标地址,即DNS域名解析得到的Web服务器IP地址。
通过路由表,将目标IP与不同的子网掩码求与运算,得到最后的结果,找到匹配的 Destination,如果都没找到匹配的,就找默认网关 0.0.0.0。
数据包加上 IP头部,其中要指明协议为TCP
MAC —— 两点传输
MAC头部只包含 发送方MAC地址、接收方MAC地址和协议类型
- 发送方MAC:网卡生产时写入到 ROM 里的,只要将这个值读取出来写入到 MAC 头部就可以了
- 接收方MAC:通过 ARP 协议获取
- 协议类型:IP或ARP