1.DNS(域名解析)
网页访问百度时首先客户端向本地缓存服务器发起请求,本地服务器查看是否有百度的域名解析条例,如果有对应的IP地址,客户端可以直接获取百度的IP地址进行访问,如果没有,就需要向根服务器查找。域名解析过程图如图1.1所示。
图1.1 客户端访问DNS服务器获取百度IP地址的过程
客户端向本地缓存服务器发出请求,查找www.baidu.com的IP,本地服务器收到请求数据包后开始查找本地缓存表,再将查找到的百度IP地址通过数据包发送过来,报文交互过程如图1.2所示。
图1.2客户端向本地DNS服务器发送报文的交互过程
当本地缓存服务器没有缓存百度IP地址信息时,需要路由器通过WAN口向上级服务器发送DNS数据包,获取百度的IP地址。
DNS报文结构如下所示:
2.ARP地址解析过程
当客户端获取到百度的IP地址后,需要查询arp表查找主机网关的MAC地址,如图2.1所示
图2.1 arp表
如果arp表中有缓存的MAC地址,则只需要主机向网关发送请求并通过路由器转发。当arp表中没有网关mac地址的缓存,则需要客户端发送ARP请求包得到网关的MAC地址,主机网卡的网关地址将自己的MAC地址填入其中的ARP响应包返回到客户端源IP地址。
二层寻址:IP数据包嵌入到数据帧(以太网数据包)中,以太网数据包需要知道双方的MAC(物理地址),发送方为本机的网卡地址,接受方为网关192.168.1.1的MAC地址(通过ARP地址解析协议得到的)。这样数据帧由头部(MAC地址)+IP数据包组成。
三层寻址:IP数据包需要知道双方的IP地址,本机IP地址假定为192.168.1.168,接受方IP地址为14.215.177.38(百度),IP数据包=头部(IP地址信息)+TCP数据包。
3.TCP三次握手建立连接过程
第一次握手:建立连接时,客户端发送SYN包(Seq=X)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号。
第二次握手:服务器收到syn包,必须确认客户端的SYN(ACK=X+1),同时自己也发送一个SYN包(seq=Y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=Y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
TCP三次握手过程如图3.1所示。
图3.1 tcp三次握手过程
TCP数据包需要设置端口,接收方的端口是443,本机的端口是一个随机生成的1024-65535之间的整数,本机端口为58170。
TCP数据包嵌入IP数据包。IP数据包需要设置双方的IP地址,再将IP数据包嵌入以太网数据包,通过DNS解析和ARP地址解析已经获得百度的IP地址和网关的MAC地址。
经过多个网关之间的数据转发后,百度的服务器端收到TCP数据包,读出数据包中的”HTTP请求”,接着做出”HTTP响应”,再用TCP协议发回来。
本机收到HTTP响应以后,就可以将网页显示出来,完成一次网络通信,HTTP数据包到客户端网关处的报文交互过程如下图3.3所示。
图3.3 局域网内HTTP报文
当客户端与百度服务器的连接建立完成后,开始数据传输交互过程,当客户端不再访问百度服务器时,向服务器发送断开连接请求。TCP四次挥手过程
(1)客户端发送一个FIN,用来关闭客户端到服务器端的数据传送。
(2)服务器端收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器端关闭与客户端的连接,发送一个FIN给客户端。
(4)客户端发回ACK报文确认,并将确认序号设置为收到序号加1。
过程如图3.4所示:
图3.4 四次挥手过程
ps:如有分析有误的地方欢迎指出!