客户端需要发送一个dns数据包给dns服务器,可能dns服务器的ip地址和客户端的ip地址不在同一个网段内,那么客户端会将dns数据包发给默认网关,如果客户端arp缓存表里没有默认网关的mac地址,客户端需要发送arp广播获取默认网关的mac地址,然后将dns数据包封装后交给默认网关,网关路由器解封装后查看路由表,然后逐条转发到dns服务器,dns解析dns数据包,将www.baidu.com的IP地址返回给了客户端。
接下来,客户端向百度服务器发送一个syn包,请求建立连接。客户端首先封装syn包,发现没有目的mac地址,于是发送arp广播请求网关的mac地址,客户端得到网关的mac地址后封装成完整的syn包,发给网关,网关路由器解封装后查看路由表,然后逐条转发,将syn包发给了百度服务器,百度服务器收到后发一个syn、ack包原路返回给客户端,客户端收到后,继续发一个ack包给百度服务器,这样三次握手建立了连接。
由于arp缓存表里有了mac地址表,所以数据包直接逐条转发给了百度服务器,百度服务器收到数据包后将数据返回给客户端的浏览器,浏览器通过渲染,最终用户看到了网站上的主页信息。
数据接受完毕后,客户端发送一个fin包,百度服务器收到后回一个ack包和fin包,客户端收到后回一个fin包,这样通过四次挥手取消连接,完成了访问百度服务器的全过程。