点击蓝字关注我

假定工作条件

  • 假定小A在某大学内读书,当他将便携机(笔记本电脑)通过网线连接到宿舍网口,该网口与学校的以太网交换机相连,交换机又与学校的路由器相连。

  • 学校的这台路由器与一个ISP相连,这里假定为Comcast.net;Comcast.net为学校提供了DNS服务,即DNS服务器驻留在Comcast网络中而不是学校网络中;DHCP仍运行在学校的路由器上。

  • 小A点击浏览器访问www.baidu.com页面时发生如下事件:

一、获取一个IP地址

当小A的便携机与网络相连时,没有IP地址它就不能做任何事情。该PC采取的第一个网络相关的动作是运行DHCP协议,以从本地DHCP服务器上获得一个IP地址以及其他信息。

  • 1. PC的操作系统生成一个DHCP请求报文,将这个报文放入具有目的地端口67(DHCP服务器)和源端口68(DHCP客户)的UDP报文段;该报文段被放置在一个具有广播IP目的地地址(255.255.255.255)和源IP地址(0.0.0.0)的IP数据报中。

  • 2. 该IP数据报被放置在以太网帧中,该以太网帧具有的目的MAC地址为FF:FF:FF:FF:FF:FF,使该帧将广播到与交换机连接的所有设备中(其中包括DHCP服务器)。该帧的源MAC地址是小A的PC固有的MAC地址00:18:F5:54:81:A8。

  • 3. 路由器在它的固有MAC地址00:25:B4:41:F1:C2的接口接收到该广播以太网帧,该帧中包含DHCP请求,并且从该以太网帧中抽取出IP数据报。该IP数据报的载荷(UDP)报文被分解,传输到运输层UDP协议,DHCP请求报文从此UDP报文段中抽取出来。此时DHCP服务器有了DHCP请求报文。

  • 4. 假定运行在路由器中的DHCP服务器能够CIDP块68.85.4.0/24分配IP地址。假定DHCP服务器分配地址68.85.4.35给小A的PC。DHCP服务器生成包含这个IP地址以及DNS服务器的IP地址(68.87.71.101)、默认网关路由器的IP地址(68.85.4.1)和子网块(68.85.4.0/24)(等价为"网络掩码")的一个DHCP ACK报文段,以同样的分层方式打包到一个以太网帧中,这个以太网帧的源MAC地址是路由器连到归属网络时接口的MAC地址(00:25:B4:41:F1:C2),目的MAC地址是小A的PC机MAC地址(00:18:F5:54:81:A8)。

  • 5. 小A的PC机接收到包含DHCP ACK的以太网帧,抽取出DHCP ACK报文。PC机的DHCP客户记录下IP地址和DNS服务器的IP地址。它还在其IP转发表中安装默认网关的地址。小A的PC机向该默认网关发送目的地址为其子网68.85.4.0/24以外的所有数据报。至此,PC机已经初始化好它的网络组件。

二、DNS和ARP

当小A将www.baidu.com的URL键入其Web浏览器时,它开启了一长串事件,这将导致百度网页最终显示在其Web浏览器上。小A的Web浏览器通过生成一个TCP套接字开始了该过程,套接字用于向www.baidu.com发送THHP请求。为了生成该套接字,小A的PC机器需要知道www.baidu.com的IP地址,使用DNS协议提供这种名字到IP地址的转换服务。

  • 6. 小A的PC机操作系统生成一个DNS查询报文,将字符串www.baidu.com放入DNS报文的问题段中。该DNS报文放置在一个具有53号目的端口的UDP报文中。该DUP报文段则被放入具有IP目的地址68.87.71.101和源IP地址68.85.4.35的IP数据报中。

  • 7. 小A的PC机将包含DNS请求报文的数据报放入一个以太网帧中,该帧将发送到学校网络中的网关路由器。然后此时小A的PC机并不知道学校网关路由器的MAC地址(因为以太网帧的传输所需要的是MAC地址而非IP地址),为了获取该网关路由器的MAC地址,PC机需要使用ARP协议。

  • 8. 小A的PC机生成一个具有目的IP地址为68.85.4.1(默认网关)的ARP查询报文,将该ARP报文放置在一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧发送给所有连接的设备,包括网关路由器。

  • 9. 在网关路由器接收到该帧后,它准备一个ARP应答,指示它的MAC地址为00:25:B4:41:F1:C2对应IP地址68.85.4.1。它将ARP应发放入一个以太网帧中,其目的地址为小A的PC机的MAC地址00:18:F5:54:81:A8。

  • 10. 小A的PC机收到该帧后,最终能够将DNS查询的以太网帧寻址到网关路由器的MAC地址。注意:此时该PC机发出的DNS查询报文的MAC地址为网关路由器地址00:25:B4:41:F1:C2,而目的IP地址为DNS服务器IP地址68.87.71.101。

三、域内路由选择到DNS服务器

  • 11. 网关路由器接收到该帧并抽取包含DNS查询的IP数据报。路由器查找该数据包的目的地址(68.87.71.101),并根据其转发表决定该数据报应该发送到对应的下一跳路由器,该路由器为连接DNS服务器的路由器。

  • 12. 在连接DNS服务器的路由器接收到该帧后,抽取IP数据报,检查该数据报的目的地址(68.87.71.101),并根据其转发表确定出接口,经过该接口朝着DNS服务器转发数据报,该转发表已根据Comcast的域内协议(如RIP、OSPF或IS-IS)以及因特网的域间协议BGP所填写。

  • 13. 最后包含DNS查询的IP数据报到达了DNS服务器。DNS服务器抽出DNS查询报文,在它的DNS数据库中查找名字www.baidu.com,找到对应包含www.baidu.com的IP地址202.108.22.5的DNS源记录。该DNS服务器形成了一个包含主机名到IP地址映射的DNS回答报文,将该DNS回答报文放入UDP报文段中送到小A的PC机上。

  • 14. 小A的PC机从DNS回答报文中抽取出服务器www.baodu.com的IP地址。到这里,小A的PC机终于准备接触www.baidu.com的服务器。

四、Web客户-服务器交互:TCP和HTTP

  • 15. 小A的PC机有了www.baidu.com的IP地址后,它能够生成TCP套接字,该套接字用于向www.baidu.com发送HTTP GET报文。当小A的PC机生成TCP套接字时,操作系统的TCP必须首先与www.baidu.com中的TCP执行三次握手。因此PC机首先生成一个具有目的端口80(针对HTTP)的TCP SYN报文段,将该TCP报文段放置在具有目的IP地址202.108.22.5的IP数据报中,将该数据报放置在MAC地址为00:25:B4:41:F1:C2(网关路由器)的帧中,并向交换机发送该帧。

  • 16. 该帧沿着学校网络、Comcast网络和谷歌网络中的路由器朝着www.baidu.com转发包含TCP SYN的数据报,使用每台路由器中的转发表。

  • 17. 最终包含TCP SYN的数据报到达www.baidu.com。从数据报抽取出TCP SYN报文并分解到与端口80相联系的欢迎套接字。在百度服务器和小A的PC机之间的TCP连接生成一个连接套接字,产生一个TCP SYNACK报文段,之后该把报文段被放入链路层帧中,最终到达小A的PC机以太网卡。

  • 18. 借助于小A的PC机上的套接字,现在终于准备向www.baidu.com发送字节了。小A的浏览器生成包含要获取的URL的HTTP GET报文。HTTP GET报文则写入套接字,其中GET报文成为一个TCP报文段的载荷,之后通过该套接字传送到www.baidu.com的HTTP服务器端。

  • 19. 在www.baidu.com的HTTP服务器从TCP套接字中读取HTTP GET报文,生成一个HTTP响应报文,将请求的Web内容放入HTTP响应体中,并将报文发送进TCP报文段中。

  • 20. 包含HTTP回答报文的数据报通过百度、Comcast和学校网络转发,到达小A的PC机。小A的Web浏览器程序从套接字的读取HTTP响应,从HTTP响应体中抽取Web网页的html,并最终显示了Web页面。

小结一下

我们可以看到,当我们平时在Surf The Internet时并未察觉到,访问一个百度主页竟然在计算机网络中做了如此复杂的操作。当然以上的20个步骤仅仅考虑了基本的必要操作,忽略了一些可能的附加协议比如无线接入、数据报加密、Web缓存等。这些底层实现操作对于我们使用者来讲是并不需要知道的。可能目前在一些网络不佳的条件下访问页面仍会有肉眼可见的时延,但将来5G的普及或许使得我们再也不会感受到浏览器时延的存在。

附专有名词缩写及全称

  • ISP(Internet Service Provider) 互联网服务提供商;

  • DNS(Domain Name System) 域名系统服务协议;

  • DHCP(Dynamic Host Configuration Protoocol) 动态主机配置协议;

  • IP(Internet Protocol) 网际协议;

  • UDP(User Datagram Protocol) 用户数据报协议;

  • TCP(TransmissionControl Protocol) 传输控制协议;

  • MAC(Media Access Control) 局域网地址/以太网地址/物理地址;

  • ARP(Address Resolution Protocol) 地址解析协议;

  • RIP(Routing Information Protocol) 路由信息协议;

  • OSPF(Open Shortest Path First) 开放式最短路径优先;

  • HTTP(Hyper Text Transfer Protocol) 超文本传输协议;

  • HTLM(Hyper Text Markup Language) 超级文本标记语言

udp需要arp请求吗_当你随便浏览一个网页时,你知道背后做了多少工作吗?相关推荐

  1. .bat是什么语言_简单说说当我们打开网页时,浏览器到底做了什么?

    前言:为什么我们需要掌握浏览器的原理 作为一名前端研发,平日里打交道最多的,就是各式各样的客户端. 不论你是针对pc端还是移动端,甚至是专门在微信端做前端研发,都需要跟一样东西接触--浏览器. 不知道 ...

  2. 04、用浏览器显示一个网页时,是否只发了一个网络请求给服务器?

    目录 服务器 思考 服务器 用户量.数据访问量越大,对服务器的性能要求越高 当我们在浏览器上输入网址的时候,比如baidu.com,那就会发送请求给这个服务器,如果同时有一亿个用户在浏览器输入百度网址 ...

  3. dueros模拟测试没有请求后台_实战 | 用手写一个骚气的请求合并,演绎底层的真实...

    来源:公众号[ java进阶架构师] 好文推荐: 字节跳动Java岗4面面经分享:索弓|+rabbitmq+spring+Redis 拼多多面经Java开发3面面经:准备好久没想到面试题超级简单 网易 ...

  4. m3u8文件在手机上用什么软件看_如何用手机从一个网页下载视频

    想必大家都有过需要下载一部影片时候.比如在上班之前用家里网络去下一部电视剧,即可以打发通勤时间,又可以节省流量.又或是飞机起飞之前下一两部片子,打发飞机上没有网络的无聊时光.再比如躲避太多的广告.等等 ...

  5. python如何调用日期函数_当前时间等于另一个时间时如何使用函数:Python

    我正在开发一个脚本,它利用我在Raspberry Pi 3上控制8通道继电器板继电器的功能.该功能正常工作,调用该功能.我正在尝试开发此脚本,因此当当前时间等于另一个时间(例如第1区开始时间)时,继电 ...

  6. bootstrap 导航菜单 折叠位置_教大家如何编写一个网页导航条

    导航条简单地说就是对你整个网站模块的简单介绍,你可以直接点击导航条某一个按钮或板块便可进入其相应的界面,如:网页.新闻.贴吧等 .在企业网站上,导航条上常见的有:产品介绍,公司简介,最新产品,联系我们 ...

  7. udp客户端与服务器端模型_客户端-服务器模型

    udp客户端与服务器端模型 As mentioned in the previous article, one of the requirements of using PHP on a page i ...

  8. #获得请求来源ip_以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解

    以太网首部 目地MAC地址(8字节) 源MAC地址(8字节) 类型(2字节) 1.IP头的结构 版本(4位) 头长度(4位) 服务类型(8位) 封包总长度(16位) 封包标识(16位) 标志(3位) ...

  9. python arp_用Python构造ARP请求、扫描、欺骗

    0. ARP介绍 首先,先回忆下TCP/IP模型,从下到上分为:数据链路层.网络层.传输层.应用层,那么ARP到底属于哪一层?有人会说是网络层,但实际是属于数据链路层,只不过还要为网络层提供服务. A ...

最新文章

  1. WCF单元测试遇到的问题
  2. 这些密码千万不要用!黑客5分钟即可破解!
  3. 他不怕被拒绝_不怕被拒绝,这几大星座男追人时最有耐心
  4. 【BZOJ 3191】[JLOI2013]卡牌游戏
  5. python如何互换两个字母_python – 通过交换多个字母来修改字符串
  6. 表单提交防止恶意修改
  7. HDU1106 排序(解法二)(废除!!!)
  8. php用while输出1到100的奇数,用while和for循环分别计算100以内奇数和偶数的和,并输出。...
  9. 鼠标离开 表格隐藏html,excel中滚动鼠标表格隐藏怎么取消
  10. .Net5使用Sqlsugar操作加密Sqlite数据库
  11. OA是什么?OA系统,OA,OA解决方案有哪些,OA有什么功能,OA有什么作用
  12. Windows Server 2022 英文版、简体中文版下载 (updated Dec 2021)(2022 年 1 月发布)
  13. 【国信安实训】——文件上传漏洞
  14. 【电气专业知识问答】问:电动机的电气性能有什么要求?
  15. 引入静态路由_网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!...
  16. Java使用AES加解密
  17. Javascript的优点和缺点
  18. PL/SQL到期后的解决办法
  19. DoraOS一款非常好用的瘦客户机系统,可将旧PC改造成瘦客户机
  20. cfg文件Linux怎么打开,cfg文件扩展名,cfg文件怎么打开?

热门文章

  1. java程序输出矩阵_java编程题之顺时针打印矩阵
  2. numpy如何直接在数组上进行添加_NumPy 论文登上了 Nature!
  3. 「数据库系列四」分布式数据库CAP理论与最终一致性
  4. 《移动项目实践》实验报告——Android网络通信
  5. gRPC——简介与Hello World
  6. 两只塔姆沃斯牛 The Tamworth Two
  7. Spark 1.2 集群环境安装
  8. centos 6.4 FTP安装和配置
  9. BUG总结—— No mapping found for HTTP request with URI
  10. Java中的enum枚举类