在浏览器地址栏输入www.baidu.com到打开百度首页这期间到底发生了什么?
刚才无意间看到这么一个面试题,觉得有点意思,我想从五层网络模型的角度说说我的看法。
1.首先通过DNS域名系统向域名服务器发送域名解析请求来得到百度的IP地址39.156.69.79;
2.系统通过ARP地址解析协议获得百度IP地址映射的MAC地址;
3.系统通过TCP三次握手向百度服务器发送请求连接的报文段并建立连接;
4.应用层形成请求百度首页的HTTP请求报文后下放到传输层;
5.传输层在请求报文前面加上包含源端口和目的端口等字段的TCP首部形成TCP报文段后下放到网络层;
6.网络层在TCP报文段的前面加上包含本机IP地址和百度IP地址的首部形成IP数据报后下放到数据链路层;
7.数据链路层对IP数据报加上含有目的MAC地址和源MAC地址的首部和含有帧检验序列FCS的尾部封装成MAC帧后下放到物理层;
8.在物理层将帧转换为比特流然后在铜线电缆光纤等物理媒介上以电信号的形式传输至北京的百度服务器;
9.百度服务器收到数据后剥洋葱似的一层层反向解包并将HTTP请求报文上传到应用层然后向客户端发送HTTP响应报文;
9.客户端收到HTTP响应报文后由浏览器解析百度首页的HTML代码并渲染出整个页面;
10.系统通过TCP四次挥手释放TCP连接。
END
补充:
在同一局域网内,如果主机A要想通过B的IP地址确定其MAC地址并和B进行数据交互,需要按照ARP协议的”广播请求和单播应答”来确定主机B的MAC地址:
1) A先查看自己的ARP高速缓存表中是否有B主机的MAC地址记录。
2) 如果A的ARP高速缓存表中有B的MAC地址记录,则直接通过这个MAC地址进行数据的传输。
3) 如果A主机的ARP高速缓存中没有B主机的记录,则会向局域网的所有主机广播一个ARP请求,寻找B主机的MAC地址。
4) 当B主机收到A主机广播的ARP请求后,就会直接给A主机回复一个ARP数据包。
5) 当A主机收到B主机发送过来的请求后,将B的MAC地址写入高速缓存中,然后通过该MAC地址,A主机向B主机进行数据的传输
跨网段:
A与B不在一个网段,A查询自己的路由表,知道如果想和B通信则必须通过gateway 来中转,所以会在与gateway 直连的接口(假定 Ethernet接口)上请求gateway 的MAC地址。 A主机先通过广播一个ARP请求,找到本网络中的一个路由器的MAC地址,然后将数据包直接给路由器。当路由收到数据包后,如果B主机在同网络中的话,这时通过ARP找到B主机,然后把数据包给B主机。如果B主机不和A主机发送数据的路由器在同一网络内的话,则路由器会通过ARP协议找到下一跳的路由器,然后把数据包发送到该路由上,以此类推。
http协议及报文详解:https://blog.csdn.net/yutiab69/article/details/82869239
在浏览器地址栏输入www.baidu.com到打开百度首页这期间到底发生了什么?的更多相关文章
- 调出js控制台可以在浏览器地址栏输入about:blank
调出js控制台可以在浏览器地址栏输入about:blank,如果不输入about:blank,直接 打开一个新的页面,有可能输出的结果不准确.也就是说变量有可能被其他的影响到, 造成结果不准确.
- 从浏览器地址栏输入url到显示页面的步骤
在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期 HTTP1.1增加了Cache-Cont ...
- 从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)
在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 如果资源未缓存,发起新请求 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证. 检验 ...
- 经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...
- 在浏览器中输入 www.baidu.com 后执行的全部过程
现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作: ...
- 在浏览器中输入www.baidu.com后执行的全过程
链接 http 请求过程——当我们在浏览器输入 www.baidu.com,然后回车之后的详解. 1)域名解析(域名 www.baidu.com变为 ip 地址). 1.浏览器搜索自己的DNS缓存(维 ...
- 浏览器地址栏输入url回车之后发生了些什么
1.输入地址 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全ur ...
- 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有 ...
- 【转】当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/panx ...
随机推荐
- 【React】383- React Fiber:深入理解 React reconciliation 算法
作者:Maxim Koretskyi 译文:Leiy https://indepth.dev/inside-fiber-in-depth-overview-of-the-new-reconciliat ...
- 国内加速git下载速度
主要是配置hosts文件 151.101.72.133 assets-cdn.github.com151.101.73.194 github.global.ssl.fastly.net192.30.2 ...
- Redis实战 | 5种Redis数据类型详解
我们知道Redis是目前非常主流的KV数据库,它因高性能的读写能力而著称,其实还有另外一个优势,就是Redis提供了更加丰富的数据类型,这使得Redis有着更加广泛的使用场景.那Redis提供给用户的 ...
- Linux服务器绑定多网卡IP
需求:在1台Linux上绑定两个公网IP,实现扩展IP用于专用的服务 问题:添加了一个网卡上绑定1个弹性IP,主网卡绑定的公网ip可以正常访问,但是扩展网卡的公网ip无法访问. 原因:没有设置路由规则 ...
- 小白学 Python 爬虫(21):解析库 Beautiful Soup(上)
小白学 Python 爬虫(21):解析库 Beautiful Soup(上) 人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前 ...
- StringBuilder、StringBuffer和StringJoiner
StringBuilder是可变对象,用来高效拼接字符串: StringBuilder可以支持链式操作,实现链式操作的关键是返回实例本身: StringBuffer是StringBuilder的线程安 ...
- ssm整合——Mybatis配置(1)
mybatis搭建-基于注解 1. 环境准备 1.1 新建maven的webapp项目 1.2 新建必要的目录和文件 1.3 文件配置 pom.xml junit默认创建是4.11,手动改成4.12 ...
- JPA中实现双向一对多的关联关系
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- Dc:7 Vulnhub Walkthrough
靶机下载地址: https://www.vulnhub.com/entry/dc-7,356/ 主机扫描: http://10.10.202.161/ Google搜索下: SSH 登录 以上分析得出 ...
- 初识PMP PMBOK初解(指南第一章引论)
引论 1.1指南概述和目的 普遍认可:大多数时候是适用于大多数项目,价值和有效性已获得一致认可. 良好实践:知识.技能.工具和技术能够达到预期的商业价值和成果,提高很多项目成功的可能性. 确定过程.输 ...