网络是怎么样连接的?浏览器输入一个地址之后的过程?

网络是怎么样连接的这本书就是在讲**浏览器输入一个网址之后,到页面渲染计算机网络层和软件层面发生了什么变化。**

在腾讯面试的时候经常会问到网络是怎么样连接的,考察对网络的理解。

在现在主要是 TCP\IP 四层架构的方式: 也会问道传统的TCP\IP七层的结构

应用层、传输层、网络层、网际连接层

alt

DNS解析

1.首先对网址进行解析,我们输入的一个http://www.baidu.com/ 如果后面不带任何的资源路径,默认访问的 nginx 目录下面的index.html。

这个要有了解,前端 vue 项目 build 打包完成之后页面中都是 index.html,所以默认就访问的是 index.html

alt

路由器转发需要根据IP地址进行转发的,IP地址比较难记住,我们用一个域名来对应IP地址。所以第一步就是域名解析,将URL域名转为IP地址,这个过程叫做DNS 解析。

DNS解析的过程包括了递归查询和迭代查询,正常时递归查询和迭代查询一起使用。

域名服务器的层次结构:本质就是一个数据库,域名和 ip 地址进行对应起来。

alt

首先检查浏览器和本地缓存是否有,如果没有,发送给本地DNS服务器,就是电脑配置的DNS服务器,如果本地DNS缓存中有就直接返回,如果没有向根域名服务器发送请求、根域名向顶级域名发送请求、顶级域名向权威域名发送请求。权威域名返回对应的IP地址告诉本地DNS。最后本地DNS进行缓存。

https://blog.csdn.net/bangshao1989/article/details/121913780 DNS 解析过程

全球一共有13台根域名服务器。

封装HTTP请求

2.生成HTTP消息。

HTTP请求消息包含了** 请求行、请求头、请求体。使用的端口默认80**,https使用的端口是443

alt

HTTP常用的包括 get、put、post、delete请求。需要区分get请求和post请求,get请求是将参数放在请求行中的,是可以直接看到的,post请求将请求参数放在请求体中。get请求是幂等性安全的,而post请求是不安全的

幂等性: 就是两次修改结果是一样的。

TCP三次握手建立连接

.在传输层,TCP进行三次握手连接,保证双方都有接收的能力。

alt

alt

这边可以往TCP三次握手、四次挥手、流量控制、拥塞控制、滑动窗口继续深挖。

包括还有一些其他的操作:

进行数据的封装,如果请求的数据块大于了MSS,就需要进行分片。

alt

如果是 https 的协议,还需要进行 SSL 和 TLS 的握手。

网络层

层的功能主要是转发和路由,主要的协议就是IP协议,携带源ip地址和目的ip地址。将TCP层传下来的数据封装成IP数据包。

对于IP数据包这个也需要有些了解,常用的有哪些字段,他们有什么含义。

alt

这一层还有子网掩码的概念,和ip地址进行与操作就得到了所在网络的地址。

IP 地址可以考察的有 TTL 生命周期,这个不是时间,是 IP 数据包可以经过的路由器个数。

IP 数据包可能会比较大,当大于 MTU1500 字节的时候需要进行切片传输操作,类似于文件传输也需要切片。 和标志、片偏移有关。

标志用来告诉用户是否切片和当前是否最后一个,片偏移告诉用户在原来数据包的位置。

数据链路层

封装MAC地址,IP就是类似于小区,MAC地址是全球唯一的,用来确定你的具体位置。每一个网络设备在出场的时候 MAC 地址就已经固定了。

alt

MAC 的协议类型 一般是 IP 和 ARP。

想要获得对方的MAC地址,使用的协议是ARP地址解析协议,通过给局域网的内的所有主机进行广播,如果某个主机和目的IP地址一样,那么就单播回来。将结果还需要放入到ARP缓存中去。

alt

对于查询到的ip地址放入arp缓存中,便于下一次查询。

在windows中用arp -a,查看本地的arp缓存表。

alt

网卡

上面的所有都完成之后就需要从网卡中出去了。

网络包只是存储的二进制的数据,在光纤中传输的是电信号,需要将数字信号转为电信号。

alt

将数字信号转为电信号,在网线中进行传输。 alt

交换机和路由器

传输过程中数据包需要经过多个设备,包括了交换机和路由器。

alt

路由器进行转发 查询路由表进行数据的转发

alt

当找不到对应的路由表的时候选择默认路由 0.0.0.0.

整体的过程

alt

到达服务器端,网上还是层层脱衣服,如果发现不是自己的,那么就丢弃掉

alt

解析HTML

浏览器接收到服务器的响应后,会开始解析 HTML 文档,首先并构建 DOM 树。

浏览器从上到下解析 HTML 文档,遇到标签时创建对应的 DOM 节点,并按照层级关系构建 DOM 树。

在解析 HTML 的过程中,浏览器会遇到 CSS 文件或内联样式,并开始解析 CSS,构建 CSSOM 树。

一颗DOM树结构的结构:
https://blog.csdn.net/wei1273356078/article/details/106543967 alt

完成解析之后 进行 TCP 四次挥手,释放连接。

参考:https://blog.csdn.net/spade_Kwo/article/details/119464901?ops_request_misc=%257B%2522request%255Fid%2522%253A%25229e069b679f997623d9f5e26f46f40c9e%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=9e069b679f997623d9f5e26f46f40c9e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-119464901-null-null.142^v101^pc_search_result_base8&utm_term=%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B&spm=1018.2226.3001.4187

alt

TCP 四次挥手的过程图: alt

#浏览器输入一个地址后发生了##网络面试#
牛牛的面试专栏 文章被收录于专栏

牛牛的面试专栏,希望自己在25年可以拿到一份大厂的SP Offer 你的点赞和收藏都是我持续更新的动力

全部评论
看到好多面试都问了这个
点赞 回复 分享
发布于 03-16 18:06 江苏
点赞 回复 分享
发布于 03-13 11:18 江苏

相关推荐

06-04 19:53
已编辑
东北林业大学 Java
查看18道真题和解析 面试问题记录
点赞 评论 收藏
分享
05-20 22:38
已编辑
南京理工大学 Java
45min提问1. 讲一下你实习时候这个项目的大概业务流程2. 二级缓存怎么设计的,像二维码的同时核销的并发,在你这个缓存里效果是怎么样的(感觉他没问清楚..)3. 提到Jmeter,怎么设计线程组,用了多少个线程组,使用多少个并发请求4. Jmeter是在本地还是服务器部署,讲一下你使用的过程5. Jmeter本地跑一万个线程能跑起来吗(问Jmeter的瓶颈)6. 布隆过滤器怎么实现的,原理,效果7. Redis是单机部署还是分布式部署,为什么不用分布式(因为实习的公司只要单机阿..)8. Redis常用数据结构,List和Set的区别,存商品id用哪个9. 缓存的过期机制如何设计的,设计随机过期机制的作用10. 缓存读写策略,多个服务节点对Redis操作怎么办11. 大key或者热点key会导致什么问题,如何解决12. Redis哨兵机制13. 数据库锁的类别14. 数据库事务的隔离级别,幻读的现象15. 优惠券秒杀,如何测试(界面,功能,兼容,安全等..)16. Netty核心组件了解吗,作用分别是什么17. NIO和BIO区别18. Bootstrap/ServerBootstrap的区别19. Netty的长连接和心跳监听20. TCP沾包问题的解决21. 拿到一个慢sql,如何分析定位问题22. 索引失效的情况,数据的类型和大小影响索引的功能吗23. 回表查询24. MySQL日志了解哪些,他们的功能25. 介绍bin log26. 为什么主从数据同步不用redo log 要用bin log手撕:链表相交的结点(10min)用常规的指针遍历(到尾节点就跳到另一条链表)让我回去思考一下再优化时间复杂度反问..感觉一面面了别人两面的量,应该凉了
查看26道真题和解析 面试问题记录
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务