网络协议
网络协议
网络协议
http 和 https 的基本概念
http:是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
https:是以安全为目标的 HTTP 通道,即 HTTP 下 加入 SSL 层进行加密。其作用是:建立一个信息安全通道,来确保数据的传输,确保网站的真实性。
http 和 https 的区别及优缺点?
- http 是超文本传输协议,信息是明文传输,HTTPS 协议要比 http 协议安全,https 是具有安全性的 ssl 加密传输协议,可防止数据在传输过程中被窃取、改变,确保数据的完整性。
- http 协议的默认端口为 80,https 的默认端口为 443。
- http 的连接很简单,是无状态的。https 握手阶段比较费时,会使页面加载时间延长 50%,增加 10%~20%的耗电。
- https 缓存不如 http 高效,会增加数据开销。
- Https 协议需要 ca 证书,费用较高,功能越强大的证书费用越高。
- SSL 证书需要绑定 IP,不能再同一个 IP 上绑定多个域名,IPV4 资源支持不了这种消耗。
https 协议的工作原理
客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤:
- 客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 链接。
- web 服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),传输给客户端。
- 客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。
- 客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
- web 服务器通过自己的私钥解密出会话密钥。
- web 服务器通过会话密钥加密与客户端之间的通信。
什么是HTTP/2
HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接),是HTTP协议的的第二个主要版本,使用于万维网。
HTTP/1.1和HTTP/2的主要区别
HTTP是超文本传输协议,是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准
HTTP/1.1是1997年在原始的HTTP协议基础上进行的补充和优化
HTTP/2是HTTP协议的第二个主要版本,该版本关注于减少延迟时间,从而提高页面加载速度
| HTTP/1.1 | HTTP/2 | |
|---|---|---|
| 连接方式 | 持久连接 | 采用多路复用 |
| 数据传输方式 | 文本传输 | 二进制传输 |
| 报文传输格式 | 修改了HTTP的报文传输格式 | 修改了HTTP的报文传输格式 |
TCP****三次握手
TCP握手是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
- 第一次握手:客户端向服务器发送一个SYN报文,请求建立一个TCP连接 »> 连接服务器指定端口,建立TCP连接。
- 第二次握手:服务器收到SYN报文后,向客户端发送一个SYN+ACK报文,表示同意建立连接 »> 同步连接双方的序列号和确认号。
- 第三次握手:客户端收到服务器的SYN+ACK报文后,再向服务器发送一个ACK报文,表示确认连接建立 »> 交换TCP窗口大小信息。
SYN:同步序列编号(Synchronize Sequence Numbers) 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据
TCP ****四次挥手
TCP的”挥手”是为了终止连接,其过程如下:
- 第一次挥手:客户端发送一个FIN报文,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
- 第二次挥手:服务器收到FIN报文后,发送一个ACK报文给客户端,确认序号为收到序号+1,服务器进入CLOSE_WAIT状态。
- 第三次挥手:服务器发送一个FIN报文,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
- 第四次挥手:客户端收到FIN报文后,发送一个ACK报文给服务器,客户端进入TIME_WAIT状态。经过2MSL时间后,自动进入CLOSED状态,至此完成四次挥手。
TCP和UDP的区别?在什么情况下使用UDP?
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP(User Datagram Protocol,用户数据报协议)是一种面向无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
| TCP | UDP |
|---|---|
| 面向****链接的 | 面向无连接的 |
| 可靠传输 | 不可靠传输 |
| 面向字节流的 | 面向报文的 |
| 仅支持单播传输 (一对一) | 提供了**单播,多播,广播 **(一对一、一对多以及一对全的通信) |
| 首部最小20字节,最大60字节 | 头部开销小,仅8个字节 |
在以下情况下使用UDP:
- 实时应用程序:比如视频会议、在线游戏、语音聊天等,这些应用程序通常要求实时性比较高,而且数据包丢失对应用程序的影响也不是很大。
- 数据量大的流媒体传输:在视频和音频流传输过程中,数据量非常大,而且需要实时传输,延迟较高的话会导致视频和音频的不同步。UDP可以通过抛弃部分数据包来保证传输速率,从而实现实时的视频和音频传输。
HTTP 请求跨域问题
跨域的原理
跨域:是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的。
同源策略:是浏览器对 JavaScript 实施的安全限制,只要协议、域名、端口有任何一个不同,都被当作是不同的域。
跨域原理:即是通过各种方式,避开浏览器的安全限制。
解决方案
- 使用
**jsonp**:动态插入 script,利用 script 标签没有跨域的限制,只适用于 GET 请求,不安全、携带数据较小 - 使用
**iframe**:仅限主域相同,子域不同的跨域应用场景 - 使用
**proxy**代理:在开发中使用proxy,在服务器上使用nginx代理; - 使用h5新特性
**window.****postMessage****()**:当一个窗口使用它发送消息时,接收消息的窗口可以通过监听message事件来接收消息。
[当在浏览器中输入URL后,发生了什么?](https://www.yuque.com/hutaoao/blog/xakwu0oixfn5uz2a?singleDoc# 《地址栏输入 URL 敲下回车后发生了什么》)
- URL解析
- DNS 查询
- TCP 连接
- HTTP 请求
- 响应请求
- 页面渲染
(1)浏览器分析链接指向的URL
(2)浏览器向DNS请求解析链接的IP地址
(3)DNS服务器解析出IP地址
(4)浏览器与该服务器建立TCP连接
(5)浏览器发出HTTP请求
(6)服务器通过HTTP响应把文件发送给浏览器
(7)释放TCP连接
(8)浏览器解释文件,并将web网页显示给用户
DNS的工作原理
DNS是域名系统(Domain Name System)的缩写,是一种可以将域名和IP地址相互映射的分布式数据库系统。
主要包括【域名空间】【域名服务器】【解析器】3个组成部分。
其工作原理分为以下步骤:
- 客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
- 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则直接返回结果。
- 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
- 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
- 重复第四步,直到找到正确的纪录。
- 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
什么是IP地址?请简述IPv4和IPv6的区别
定义:IP地址是指互联网协议地址,又译为网际协议地址
IP地址是IP协议提供的一种统一的地址格式,它是一个32位的二进制数,由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段;主机ID用来标识计算机在网段中的位置。
| IPv4 | IPv6 | |
|---|---|---|
| 地址空间 | 长度为32位,理论上可以有约43亿个地址 | 长度为128位,理论上可以有约340万亿万亿万亿个地址 |
| 数据包大小 | 最小数据包大小为576字节 | 最小数据包大小为1208字节 |
| 安全性 | 没有内置的安全性 | 内置加密和认证的机制,增强了网络的安全性 |
| 配置 | 需要手动配置 | 支持自动配置 |
| 路由表 | 路由表大 | 路由表小 |
在网络协议中,什么是代理服务器?它有什么作用?
代理服务器是一种网络服务器,用于转发网络请求和响应,充当客户端和目标服务器之间的中介。
代理服务器的作用有:
- 提高网络访问速度:代理服务器可以缓存常用的网页内容,减少对原始服务器的访问次数,从而提高网络访问速度。
- 突破访问限制:通过代理服务器可以访问一些不能直接访问的网站。
- 保障网络安全:代理服务器可以隐藏用户的真实IP地址,保护用户的网络安全。
- 提高工作效率:代理服务器可以同时代理多个网络请求,提高工作效率。
什么是DoS攻击?如何防范DoS攻击?
DoS是 Denial of Service 的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务(攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源)
防范DoS攻击的方法如下:
- 定期扫描:企业的服务器、网络需要定时进行扫描,通过定期扫描可以发现隐藏的安全漏洞,并对漏洞进行修补。
- 配置防火墙:防火墙能够抵御DoS攻击,过滤、控制访问设备的报文,防止未授权的操作用户入侵系统。
- 优化服务器端口:将不必要的服务和端口关闭,只开放正在使用的端口,可以避免黑客攻击。
- 部署高防服务器:高防服务器能够快速、便捷地抵御DoS攻击。
什么是WebSocket?它与HTTP有何不同?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
| WebSocket | HTTP | |
|---|---|---|
| 连接方式不同 | 客户端和服务器之间只需要建立一次连接,之后就可以保持连接状态并进行双向通信 | 每次请求都需要重新建立连接 |
| 连接状态 | 有状态的双向连接 | 无状态的 |
| 连接长度 | 持久连接 | 短连接 |
| 安全性 | 以二进制形式进行传输的,安全性更高,因此可以支持更复杂的数据类型 | 以明文形式进行传输的,通常只支持文本、图像和音频等静态数据类型 |
HTTP请求方法(GET、POST、PUT、DELETE等)的区别和使用场景
- GET请求:用来获取数据,不对服务器的数据做任何的修改,新增,删除等操作。常用于浏览网站、查询数据等。
- POST请求:向服务器端发送数据的,会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。常用于提交表单、新增数据等。
- PUT请求:向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容。
- DELETE请求:用来删除某一个资源的,该请求就像数据库的delete操作。
POST请求通常用于创建新的资源或提交数据到服务器进行处理;PUT请求通常用于更新或替换服务器上的资源。