未标明出处的,均来自小林coding、阿秀的学习笔记、GPT3.5
#OSI 的七层模型分别是?各自的功能是什么?
- 物理层:负责传输比特流,处理物理介质和电信号。
- 数据链路层:提供可靠的点对点数据传输,处理帧和物理地址。
- 网络层:将数据包从源主机传输到目标主机,处理路由和寻址。
- 传输层:提供端口到端口的可靠数据传输,处理连接和流控制。
- 会话层:管理应用程序之间的会话。
- 表示层:处理数据的表示和格式转换,提供加密和压缩功能。
- 应用层:给用户提供网络应用服务,如HTTP、FTP等。
说明
- 传输层数据被称作tcp报文段或udp用户数据报(Segments);
- 网络层数据被称做包(Packages);
- 数据链路层数据被称为帧(Frames);
- 物理层数据被称为比特流(Bits)。
总结
- 网络七层模型是一个标准,而非实现。
- 网络四层模型是一个实现的应用模型。
- 网络四层模型由七层模型简化合并而来。
#一次完整的HTTP请求过程?
- 根据域名,进行DNS域名解析;
- 拿到解析的IP地址,建立TCP连接;
- 向IP地址发送HTTP请求;
- 服务器处理请求,返回响应结果;
- 浏览器解析HTML;
- 浏览器渲染页面;
- 关闭TCP连接;
#DNS是?
DNS(Domain Name System,域名系统),是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网。
#DNS的工作原理?
将主机域名转换为ip地址,属于应用层协议,使用UDP传输。(DNS应用层协议,以前有个考官问过)
过程:
总结: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
一、主机向本地域名服务器的查询一般都是采用递归查询。
二、本地域名服务器向根域名服务器的查询的迭代查询。
- 当用户输入域名时,浏览器先检查自己的缓存中是否包含这个域名映射的ip地址,有解析结束。
- 若没命中,则检查操作系统缓存(如Windows的hosts)中有没有解析过的结果,有解析结束。
- 若无命中,则请求本地域名服务器递归解析(LDNS)。
- 若LDNS没有命中就进行迭代解析。请求根域名服务器,根域名服务器返回给LDNS一个顶级域名服务器地址。
- 此时LDNS再发送请求给顶级域名服务器, 接受请求的顶级域名服务器查找并返回这个域名对应的权威服务器的地址
- LDNS再请求权威服务器,接受的权威服务器根据映射关系表找到目标ip,返回给LDNS
- LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户再缓存到本地系统缓存中。
#为什么域名解析用UDP协议?
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。在某些情况下,域名解析可能会使用TCP来处理较为复杂的查询或处理大型响应。
#为什么区域传送用TCP协议?
区域传送(Zone Transfer)是指将一个DNS域的完整副本从一个DNS服务器传输到另一个DNS服务器的过程。需要确保可靠性和完整性,并且这个副本往往包含大量数据,适合用TCP传输。
#HTTP长连接和短连接的区别
长连接:长连接,指在一个连接上可以处理多个请求,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。
短连接:指的是一个连接上只能处理一个请求,之后断开此连接,即每次连接只完成一项业务的发送。
长连接的优点是减少了连接的建立和关闭的开销,节省了时间和资源。它可以提高性能和效率,特别是在需要频繁通信的场景下。然而,长连接也需要维护连接的状态和资源,可能会导致服务器负担增加。
#什么是TCP粘包/拆包?发生的原因?
一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和粘包问题。
原因
1、应用程序写入数据的字节大小大于套接字发送缓冲区的大小.
2、进行MSS大小的TCP分段。( MSS=TCP报文段长度-TCP首部长度)
3、进行MTU大小的IP分片。
解决方案
1、消息定长。
2、在包尾部增加回车或者空格符等特殊字符进行分割
3、将消息分为消息头和消息尾
#为什么服务器会缓存?如何实现的?
原因
- 缓解服务器压力;
- 降低客户端获取资源的延迟~~:缓存通常位于内存中,读取缓存的速度更快。并且缓存服务器在地理位置上也有可能比源服务器来得近,例如浏览器缓存。~~
实现方法
- 让代理服务器进行缓存;
- 让客户端浏览器进行缓存。
#HTTP请求方法你知道多少?
客户端发送的 请求报文 第一行为请求行,包含了请求方法字段。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
序 号 | 方法 | 描述 |
---|---|---|
1 | GET | 【获取资源】请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 【获得报文首部】类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 【传输实体文本】向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 【传输文件】从客户端向服务器传送的数据取代指定的文档的内容。PUT通常指定了资源的存放位置,而POST则没有 |
5 | DELETE | 【删除文件】请求服务器删除指定的页面。 |
6 | CONNECT | 【要求用管道协议连接代理服务器】HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 【询问支持的方法】客户端询问服务器可以提交哪些请求方法。这个方法很有趣,它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。 |
8 | TRACE | 【追踪路径】回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 【局部更新文件】是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
https://blog.csdn.net/demo_yo/article/details/123596028
#GET 和 POST 的区别,你知道哪些?
get是请求数据,post是传输实体文本,可能导致新资源的建立或者已有资源的修改
get提交的数据有限制最大是2k( 限制实际上取决于浏览器), post理论上没有限制。GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
本质区别:GET是幂等的,而POST不是幂等的
GET只允许ASCII字符,POST没有限制。
这里的幂等性:幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。 正因为它们有这样的区别,所以不应该且不能用get请求做数据的增删改这些有副作用的操作。因为get请求是幂等的,在网络不好的隧道中会尝试重试。如果用get请求增数据,会有重复操作的风险,而这种重复操作可能会导致副作用(浏览器和操作系统并不知道你会用get请求去做增操作)。
#一个TCP连接可以对应几个HTTP请求?
如果是长连接,一个 TCP 连接是可以发送多个 HTTP 请求的。如果关闭长连接,则只能一对一。
#一个 TCP 连接中 HTTP 请求发送可以一起发送么?
(比如一起发三个请求,再三个响应一起接收)
如果采用的是HTTP1.1,是不可行的,单个TCP连接在同一时刻只能处理一个请求,如果开启管道(pipelining)技术则可以实现多个http请求。
如果采用的是http2则是可行的,因为http2具备多路复用(multiplexing)的功能,多个 HTTP 请求可以在同一个 TCP 连接中并行处理。
那么在 HTTP/1.1 时代,浏览器是如何提高页面加载效率的呢?主要有下面两点:
- 维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。
- 和服务器建立多个 TCP 连接。
#浏览器对同一 Host 建立 TCP 连接的数量有没有限制?
有。Chrome 最多允许对同一个 Host 建立六个 TCP 连接。不同的浏览器有一些区别。
拓展: 如果图片都是 HTTPS 连接并且在同一个域名下,那么浏览器在 SSL 握手之后会和服务器商量能不能用 HTTP2,如果能的话就使用 Multiplexing 功能在这个连接上进行多路传输。不过也未必会所有挂在这个域名的资源都会使用一个 TCP 连接去获取,但是可以确定的是 Multiplexing 很可能会被用到。
如果发现用不了 HTTP2 呢?或者用不了 HTTPS(现实中的 HTTP2 都是在 HTTPS 上实现的,所以也就是只能使用 HTTP/1.1)。那浏览器就会在一个 HOST 上建立多个 TCP 连接,连接数量的最大限制取决于浏览器设置,这些连接会在空闲的时候被浏览器用来发送新的请求,如果所有的连接都正在发送请求呢?那其他的请求就只能等等了。
#在浏览器中输入url地址后显示主页的过程?
- 根据域名,进行DNS域名解析;
- 拿到解析的IP地址,建立TCP连接;
- 向IP地址发送HTTP请求;
- 服务器处理请求,返回响应结果;
- 浏览器解析HTML;
- 浏览器渲染页面;
- 关闭TCP连接;
#在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?
https://mp.weixin.qq.com/s/9vGRSkUNgRQWO6tVmUisOw
应用层:
- 浏览器封装 HTTP 请求报文
- DNS 解析域名获得目标服务器地址
传输层:
- 建立连接
- 将HTTP请求封装成TCP或UDP包(将HTTP 请求报文进行分割,并在各个报文上加入标记序号及端口号)
网络层:
- 利用 ARP 协议根据 IP 地址获取目的地的 MAC 地址后将数据包转发给链路层进行传输
服务端在链路层收到数据,按序往上层发送拆包,一直到应用层接收到浏览器发送来的 HTTP 请求报文,然后处理该请求并返回 HTTP 响应报文,浏览器接收到响应报文之后解析渲染界面。最后 TCP 断开连接。
#DNS负载均衡是什么策略?
当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能会崩掉。处理办法就是用DNS负载均衡技术,它的原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答对该主机的DNS查询时,DNS服务器利用这些IP地址引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等。
#HTTPS和HTTP的区别
- HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
- HTTP 连接建立相对简单。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。
HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
#什么是SSL/TLS ?
TLS协议采用主从式架构模型,用于防止两个应用程序在交换数据时受到窃听及篡改。
TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议传输的数据在通过TLS协议时都会被加密,从而保证通信的私密性。
SSL/TLS协议作用:认证用户和服务,加密数据,维护数据的完整性。