刚才无意间看到这么一个面试题,觉得有点意思,我想从五层网络模型的角度说说我的看法。

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到打开百度首页这期间到底发生了什么?的更多相关文章

  1. 调出js控制台可以在浏览器地址栏输入about:blank

    调出js控制台可以在浏览器地址栏输入about:blank,如果不输入about:blank,直接 打开一个新的页面,有可能输出的结果不准确.也就是说变量有可能被其他的影响到, 造成结果不准确.

  2. 从浏览器地址栏输入url到显示页面的步骤

      在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期 HTTP1.1增加了Cache-Cont ...

  3. 从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)

    在浏览器地址栏输入URL 浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤 如果资源未缓存,发起新请求 如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证. 检验 ...

  4. 经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

  5. 在浏览器中输入 www.baidu.com 后执行的全部过程

    现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作: ...

  6. 在浏览器中输入www.baidu.com后执行的全过程

    链接 http 请求过程——当我们在浏览器输入 www.baidu.com,然后回车之后的详解. 1)域名解析(域名 www.baidu.com变为 ip 地址). 1.浏览器搜索自己的DNS缓存(维 ...

  7. 浏览器地址栏输入url回车之后发生了些什么

    1.输入地址 当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全ur ...

  8. 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

    原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有 ...

  9. 【转】当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

    http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/panx ...

随机推荐

  1. JavaScript数组去重的7种方式

    1.利用额外数组 function unique(array) {    if (!Array.isArray(array)) return;     let newArray = [];    fo ...

  2. Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置

    服务端配置 Silo通过SiloHostBuilder和许多补充选项类以编程方式进行配置. Silo配置有几个关键方面: Orleans集群信息 集群提供程序(不知道咋翻译) Silo到Silo和Cl ...

  3. pyplot概述

            matplotlib.pyplot 是命令行风格的函数集,让matplotlib看起来像MATLAB.Each一样工作.pyplot函数能够对画布(figure)进行一些改变,例如:创 ...

  4. Windows安装MSYS2_切换zsh_整合cmder

    MSYS2是什么 MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境.同时它也是一个在Cygwin (POSIX 兼容性层) 和 Mi ...

  5. kubernetes-集群构建

    本实验参考:https://github.com/gjmzj/kubeasz kubernetes官方github地址 https://github.com/kubernetes/kubernetes ...

  6. Vue ---- 组价 组件化 子传父 父传子

    目录 补充js的for循环: 组件 1.组件的分类: 2.组件的特点 3.创建局部组件 4.全局组件 二.组件化 一.组件传参父传子 二.组件传参:子传父 补充js的for循环: // for in遍 ...

  7. CCF-CSP题解 201809-3 元素选择器

    题目要求写一个简易的CSS Selector. 首先用结构体\(<lev,label[],hasId,id[]>\)存储元素.其中\(lev\)表示元素在html树中的深度(这个是因为逻辑 ...

  8. python多线程编程-queue模块和生产者-消费者问题

    摘录python核心编程 本例中演示生产者-消费者模型:商品或服务的生产者生产商品,然后将其放到类似队列的数据结构中.生产商品中的时间是不确定的,同样消费者消费商品的时间也是不确定的. 使用queue ...

  9. DevExpress的LookUpEdit怎样不显示列名

    场景 DevExpress的下拉框控件LookUpEdit的使用.添加item选项值.修改默认显示值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...

  10. 使用docker运行dotnetcore站点

    使用docker运行netcore站点 1.新建一.netcore测试站点,dotnet publish 发布到publish目录下 2.编写Dockerfile文件 3.打包上传到centos服务器 ...