在浏览器地址栏输入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 ...
随机推荐
- IOS系统定时APP
将页面分为时间显示部分,控制部分,显示计次共三个部分.实现的功能有:启动定时器,计次,停止,复位. 计算:当前显示的时间 = 当前计次的累积时间 + 已经结束的所有计次的累积时间和: 关于 new D ...
- 200G网盘资源分享
今日偶得大量网盘资源,遂写一博文以分享! 来源:HACK学习呀,微信公众号:HACK学习呀 文件名 链接 提取密码 2015cracer入侵入门到精通视频教程 点我查看 trf3 一笔√带过入侵教程 ...
- Python3 函数基础1
目录 定义函数 定义函数的三种形式 空函数 有参函数 无参函数 函数的调用 函数的返回值 函数的参数 形参 (parameter) 实参(argument) 位置形参与位置实参 默认形参 关键字实参 ...
- 【CuteJavaScript】Angular6入门项目(4.改造组件和添加HTTP服务)
本文目录 一.项目起步 二.编写路由组件 三.编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四.编写服务 1.为什么需要服务 2.编写服务 五.引入RxJS 1.关于RxJS 2.引 ...
- Docker私有仓库搭建与界面化管理
一.关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去. 但是有时候我们的使用场景需要我们拥有一个私有的镜 ...
- Shell排序 C&&C++
Shell排序 Shell排序是大量数据需要排序时,更为高效的插入排序.它的算法思想基于插入排序的算法思想 流程: (1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等 ...
- 在VS2017中连接到SQLite数据源(dbfist)
在VS2017中配置.连接到SQLite数据源(dbfist) 需要安装的VS插件 SQLite/SQL Server Compact ToolBox 这个插件安装后,在选择数据源时已经可以选择SQL ...
- Java环境变量配置超详细教程
https://blog.csdn.net/Mxdon_on/article/details/89461365 概述 Java的环境配置并不是特别难,但是对刚上手的新手来说确实是一个大问题 首先下载j ...
- Java并发编程系列-(6) Java线程池
6. 线程池 6.1 基本概念 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理.如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数 ...
- django----cookie与session 和 中间件
目录 cookie与session简介及操作 cookie django中操作cookie cookie超时时间 删除cookie session session操作 设置 key value发生了什 ...