前言
Wireshark解析剖析浏览器输入网址如何看到网页的过程。
Wireshark剖析浏览器请求过程
打开Wireshark抓包软件
选择对应的网卡,即马上就好看到网卡所在活动的内容
通过chrom浏览器打开163首页官网
切换至Wireshark就会对对应的网络请求进行抓包
解释以下步骤:通过搜索163查找到对应的请求包
首先可以看到的就是浏览器需要请求DNS对www.163.com进行域名解析,获取到真实的ip地址(请求)
Frame:包头信息(整体包大小71字节长度)
Ethernet II:数据链路层头,源:TendaTec(是我的PC网卡),目的地:Tp-link(路由器),这里是获取DNS对应的ip,之类找Tp-link肯定是获取不到的,这里Tp-link只是作为一个转发站点
Internet Protocol:网络IP层的头(IP协议)
User Datagram:UDP的头(请求DNS的请求是作为UDP协议发出去的,不需要预先的去建立连接)
Domain Name System(Query):UPD真正的内容(query)这里是发送给DNS需要获取的www.163.com对应的ip(这里Wireshark告诉了你它对应的Response包为772编号),这里相当于找DNS只问了一个问题,获取www.163.com对应的ip地址,实际上这里可以发送多个问题出去。
以下为请求DNS的ack响应包,可以看到它对应返回的真实ip为:14.17.80.101,然后通过ip.addr == 14.17.80.101过滤对应的ip
所以说当通过浏览器打开一个网址的时候,浏览器首先会去请求DNS服务器获取对应网址的真实ip,接下来就是三次握手了,可以可以看看对应的包是如何交互的,第一个包叫做Syn,第二个包叫做Syn + Ack,第三个包叫做Syn。
下面三个包就是tcp3次握手。
可以看到首先由浏览器发送tcp请求(SYN)去连接http的80端口(这里有一个网络请求的滑动窗口的概念,这里滑动窗口的大小为8192,用来维持发送方/接收方的缓冲区,解决丢包、乱序等问题),这里有个Sequence Number(即请求序号)为0,然后等待相应。
Destination Port:80(目标端口),这是需要跟163的http端口做连接
Tcp Segment len:0(请求内容),这里代表没有请求内容发送
Sequence Number:包的编号0,类似刚才的滑动窗口包的编号一样(请求编号)
Acknowledgment Number:0,这里代表没有收到任何包来ack(相应),因为是初次连接,如果有值,则代表期待你发送下一个包,说明之前的包我已经收到了。即如果为1,则代表我浏览器收到了你的0号包,期待你发送1号包过来
Flags:0x002(Syn:代表连接请求,Ack代表相应请求)
Window Size value:8192(滑动窗口大小)
以上的3个包一旦一方确认后,窗口马上滑动到10号包,准备就绪发送
163.com服务器端收到这个Syn请求后,即需要相应(请求Syn+相应Ack),以下为请求相应信息。包括后面的一个Ack,这样子通过3次握手建立完连接之后,后续的发送请求数据就会在一个比较安全的环境中进行了。
连接建立完之后发送Http请求获取数据:
Sequence Number = 1
TCP Segment len = 392
Next Sequence Number(393) = TCP Segment len(392) + Sequence Number(1)
以下的Ack就都是由服务器返回的信息,然后再由浏览器进行渲染显示。
Tcp segment of a reassembled代表会有连续的1454大小的包发送过来(由于内容过来,它就行的拆成多个包进行发送)
总结