http 请求过程——当我们在浏览器输入 www.baidu.com,然后回车之后的详解。
1)域名解析(域名 www.baidu.com 变为 ip 地址)。
1.浏览器搜索自己的DNS缓存(维护一张域名与IP的对应表),若没有,则搜索操作系统的DNS缓存(维护一张域名与IP的对应表),若没有,则搜索操作系统的hosts文件(维护一张域名与IP的对应表)
2.若都没有,则找 tcp/ip 参数中设置的首选 dns 服务器,即本地 dns 服务器(递归查询),本地域名服务器查询自己的dns缓存,如果没有,则进行下面的迭代查询
2.1本地dns服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址。
2.2本地dns服务器向com域的顶级域名服务器发起请求,返回baidu.com权限域名服务器(保存该区中所有主机域名到IP的映射)地址。
2.3本地dns服务器向baidu.com权限域名服务器发起请求,得到www.baidu.com的IP地址。
3.本地dns服务器将IP返回给操作系统,同时缓存IP。
4.操作系统将IP返回给浏览器,同时缓存IP。
2)发起 tcp 的三次握手,建立 tcp 连接。浏览器会以一个随机端口(1024-65535)向服务端的 web 程序 80 端口发起 tcp 的连接.这个请求(原始的 http 请求,经过原始的 tcp/ip 四层模型层层封装),到达服务器端后,进入网卡,然后进入内核的协议栈(一层一层拨开),然后到达 web 应用程序,最终建立了 tcp/ip 链接。
3)建立 tcp 连接后发起 http 请求。
4)服务器响应 http 请求,客户端得到 html 代码。服务器 web 应用程序收到 http 请求后,就开始处理请求,处理之后就返回给浏览器 html 文件。
5)浏览器解析 html 代码,并请求 html 中的资源。
6)浏览器对页面进行渲染,并呈现给用户。
涉及到的协议
(1) 应用层:HTTP(WWW访问协议),DNS(域名解析服务)
(2) 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输)
(3) 网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)
ps:ARP缓存本局域网内的IP和MAC的映射。如果在本局域网不在缓存中,则广播请求信息,目的主机会以单播形式回送MAC;如果不在本局域网中,则找到本网络的路由器MAC地址,由路由器去找到目的MAC地址。
ping www.baidu.com用到的协议
DNS, UDP, ICMP, ARP。