计算机网络
大约 4 分钟
计网基础
浏览器从输入 url 开始发生了什么
- 输入地址 输入网址的时候,浏览器会根据历史记录,书签等地方匹配可能的 url 了,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全 url 地址
- 浏览器查找域名的 IP 地址
- 先查看本地硬盘的
hosts
文件 - 发出一个 DNS 请求到
本地DNS服务器
(本地 DNS 服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动) - 本地 DNS 服务器会向
根DNS服务器
发起请求,得到顶级域名服务器地址 - 本地 DNS 服务器继续向
顶级域名服务器
发出请求,得到权威 DNS 服务器地址 - 本地 DNS 服务器向
权威 DNS 服务器
发出请求,得到 ip 地址
- 先查看本地硬盘的
- 浏览器向 web 服务器发送一个 HTTP 请求 浏览器会以一个随机端口(1024<端口<65535)向服务器的 WEB 程序(常用的有 httpd,nginx 等)80 端口发起 TCP 的连接请求,之后通过三握手的方式建立 tcp 连接,并发起一个请求。
- 服务器的永久重定向响应 服务器给浏览器响应一个 301 永久重定向响应,这样浏览器就会访问http://www.google.com/而非http://google.com/。(搜索引擎排名)
- 服务器处理请求 后端从在固定的端口接收到 TCP 报文开始,它会对 TCP 连接进行处理,对 HTTP 协议进行解析,并按照报文格式进一步封装成 HTTP Request 对象,供上层使用。(一些网站会将请求转到
NGINX反向代理服务器
中,将同一个应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。) - 服务器返回一个 HTTP 响应 服务器收到了我们的请求,也处理我们的请求,到这一步,它会把它的处理结果返回,也就是返回一个 HTPP 响应。
- 浏览器显示 HTML
- 解析 html 以构建 dom 树 -> 构建 render 树 -> 布局 render 树 -> 绘制 render 树
- 浏览器在解析 html 文件时,会”自上而下“加载,并在加载过程中进行解析渲染。在解析过程中,如果遇到请求外部资源时,如图片、外链的 CSS、iconfont 等,请求过程是异步的,并不会影响 html 文档进行加载。
- 解析过程中,浏览器首先会解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。(期间会涉及到回流重绘)
- 浏览器发送请求获取嵌入在 HTML 中的资源(如图片、音频、视频、CSS、JS 等等)
tcp/ip 的网络模型
- 同一台设备上的进程间通信,管道、消息队列、共享内存、信号等方式
- 不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多种多样的设备,就协商出了一套通用的网络协议。
应用层
只需要专注于为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP 等。传输层
有两个传输协议,分别是 TCP 和 UDP。大部分应用使用的正是 TCP 传输层协议,比如 HTTP 应用层协议,TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。应用间数据传输的媒介,帮助实现应用到应用的通信网络层
最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片,得到一个即将发送到网络的 IP 报文。网络层负责将数据从一个设备传输到另一个设备- 网络号,负责标识该 IP 地址是属于哪个「子网」的;ip 和子网掩码按位与运算得到网络号
- 主机号,负责标识同一「子网」下的不同主机;ip 和取反后子网掩码按位与运算得到主机号
网络接口层
在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上。为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。