admin管理员组文章数量:1616032
这个仅仅是我个人对于访问网站流程的一个理解,我相信肯定有不全面也有错漏的地方,如果是的各位可以给我指出来让我可以有所提高~
五层协议体系结构中各层运用到的协议:
应用层:HTTP、DNS;
传输层:TCP、UDP;
网络层:IP、ARP;
网络接口层:MAC。
浏览器访问百度过程:
1、电脑开机,确保清空ARP、DNS等。在cmd 窗口中通过arp –a 和ipconfig /displaydns查询ARP、DNS。
2、连接网络,打开浏览器访问百度:www.baidu。
①向浏览器输入百度:www.baidu,浏览器将信息http:// www.baidu传递给应用层,到达应用层后加上应用层首部,成为HTTP GET 报文段,请求该网站根目录下默认文件。然后传送到运输层,但由于TCP连接没有建立,因此HTTP GET 缓存。
②在运输层中使用TCP协议以建立TCP连接,封装后传送到网络层。TCP报文段到达网络层后再次封装形成IP数据报,但由于百度是域名,因此在HOST文件和DNS缓存中查找,但由于刚开机所以查找失败,因此将IP数据报缓存,且返回应用层。
③返回应用层后启动DNS,利用DNS请求报文查询www.baidu的IP地址,传送到运算层封装为UDP数据报,再传送到网络层封装为IP数据报。再传送到数据链路层查询网关的MAC地址,但由于ARP缓存为空,因此查询MAC地址失败。因此将含有DNS请求报文段的IP数据报缓存,且返回网络层。
④返回网络层后启动ARP,发送ARP请求分组“谁是 10.0.153.254? 告诉 10.0.153.10”查找网关的MAC地址。将ARP请求分组封装为广播帧,传送到物理层转换为比特流通过电缆在本局域网上发送。
广播帧发送到集线器,然后在发送到PC2和R1。PC2不对应该目的IP地址因此丢弃该数据帧。网关R1接收到该广播帧后,传送到物理层,在传送到数据链路层,在传送到网络层,去掉首部,判断IP是否一致,IP地址一致则R2对应该目的IP地址,接收请求报。然后生成ARP应答包封装成单播帧,传送到数据链路层,在传送到物理层网关通过单播发送到集线器返回在发送给PC1。PC1接收到ARP应答包“10.0.153.254 在 00:0F:E2:AA:97:12”从而获得网关的MAC地址。
主机收到ARP响应分组后在ARP高速缓存中写入网关的IP地址到硬件地址的映射。
序号 | 源地址 | 目标地址 | 协议 | 大小 | 概要 |
187 | 78:E3:B5:A4:8A:15 | FF:FF:FF:FF:FF:FF | ARP | 46 | 谁是 10.0.153.254? 告诉 10.0.153.10 |
188 | 00:0F:E2:AA:97:12 | 78:E3:B5:A4:8A:15 | ARP | 64 | 10.0.153.254 在 00:0F:E2:AA:97:12 |
在cmd 窗口中通过arp –a 查询ARP 。
⑤得到MAC网关后取出缓存的含有DNS请求报文段的IP数据报,封装为单播帧,传送到数据链路层,再传送到集线器,然后传送到R1,IP数据报排队等待。等待结束后,R1接收该IP数据报,传送到物理层,再传送到数据链路层,再传送到网络层。R1选择路由器接口,然后选择为右接口,TTL-1。便传送将IP数据报传送到网络层,再传送到数据链路层,再传送到物理层转换为二进制比特流,在传送到下一个路由器R2,IP数据报排队等待。
R2接收该IP数据报,传送到物理层,再传送到数据链路层,再传送到网络层。R2选择路由器接口,然后选择为右接口,TTL-1。便传送将IP数据报传送到网络层,再传送到数据链路层,再传送到物理层转换为二进制比特流,再传送到交换机。
交换机接收该IP数据报,传送到物理层,再传送到数据链路层。交换机查寻转发表,得到DNS服务器的接收端口。再传送将IP数据报传送到数据链路层,再传送到物理层转换为二进制比特流,再传送到DNS服务器。
DNS服务器依据源MAC地址进行学习然后生成DNS应答包并封装成单播帧,按原路回送。PC1接收到DNS应答包,得到www.baidu的IP 地址。
序号 | 源地址 | 目标地址 | 协议 | 大小 | 概要 |
789 | 10.0.153.10:54401 | 10.0.15.11:53 | DNS | 77 | C: Q=baidu.(A) |
790 | 10.0.15.11:53 | 10.0.153.10:54401 | DNS | 363 | S: Q=www.baidu(A) A=112.80.248.74 A=112.80.248.73 |
发送问题一条,收到答案7条,权威答案13条,附加答案2条。其中答案如下:其中答案如下:
⑥得到百度的IP地址:112.80.248.74后取出缓存的含TCP连接请求的IP数据报,封装为单播帧,转换为比特流再发送到集线器,R1,R2,交换机,百度服务器。百度服务器接收到TCP连接请求,便按原路返回,发送同意TCP连接的IP数据报。PC1接收到同意TCP连接的IP数据报后,再发出确认收到同意TCP连接的IP数据报的数据报。完成“三次握手”,成功建立TCP连接。
序号 | 源端口 | 目标端口 | 协议 | 大小 | 序列号 | 确认号 | ACK | SYN |
879 | 63117 | 80 | TCP | 70 | 3873156153 | 0 | 0 | 1 |
889 | 80 | 63117 | TCP | 70 | 3586524917 | 3873156154 | 1 | 1 |
884 | 63117 | 80 | TCP | 58 | 3873156154 | 3586524918 | 1 | 0 |
⑦TCP连接建立后,取HTTP GET 报文段缓存,将HTTP GET报文段传送到运输层,封装成IP数据报,然后发送到数据链路层,再发送到物理层转换为比特流。依次发送到集线器,R1,R2,交换机,百度服务器。
序号 | 源端口 | 目标端口 | 协议 | 大小 | 序列号 | 确认号 | ACK | PSH |
885 | 63117 | 80 | HTTP GET | 634 | 3873156154 | 3586524918 | 1 | 1 |
⑧百度服务器接收到HTTP GET 的IP数据报后确认收到IP数据报。并依据文档标签文件名在WWW.root 中寻找 index.htm 文件。
序号 | 源端口 | 目标端口 | 协议 | 大小 | 序列号 | 确认号 | ACK | PSH |
886 | 80 | 63117 | TCP | 64 | 3586524918 | 3873156730 | 1 | 0 |
887 | 80 | 63117 | HTTP Text | 486 | 3586524918 | 3873156730 | 1 | 1 |
888 | 80 | 63117 | HTTP Text | 273 | 3586525346 | 3873156730 | 1 | 1 |
序号887内容:S: HTTP/1.1 302 Moved Temporarily; Content-Type: text/html
序号888内容:S: HTTP数据包,负载数据215字节
⑨浏览器解释回应信息,并显示在浏览器中。
序号 | 源端口 | 目标端口 | 协议 | 大小 | 序列号 | 确认号 | ACK | PSH |
889 | 63117 | 80 | TCP | 58 | 3873156730 | 3586525561 | 1 | 0 |
⑩关闭浏览器
百度是HTTP协议,而HTTP的端口号80,TCP连接控制为保持连接,因此在抓包中无法抓取TCP连接断开时产生的4次挥手的数据包
小提示:
其实我还是一个学生,因此一开始时候我用的是校园网然后就发现了一些问题:
1.在宿舍内使用校园网访问百度时目标断开不正确。
由于在宿舍内访问校园网是通过登录iNode登录客户端然后进行访问网络的,因此目标端口不会是80,而是443。另外尝试通过电脑连接WIFI进行网络访问,发现无论目标端口号甚至是ARP请求,DNS的访问也会有极大的差异。因此如果要求目标端口为80的话,需要选择在不需要通过其他软件登录上网的电脑上进行抓包。
2.TCP链接断开的数据包无法抓取。
正常情况下TCP链接断开会有“四次挥手”,但由于TCP的链接断开时有服务器控制的,而端口号为80的服务器通常是无法进行“四次挥手”断开链接的,因此在访问百度抓包过程中是无法抓取“四次挥手”的数据包的。
另外正常情况下,“四次挥手”情况如下:
第一次:client to server FIN=1;第二次:server to client ACK=1;第三次:server to client FIN=1,ACK=1;第四次:client to server ACK=1。
版权声明:本文标题:浏览器访问网站 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728735616a1170865.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论