1、OSI 七层结构、TCP/IP 四层结构,五层协议结构
- :物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- :网络接口层、网络层、运输层、应用层。
- :物理层、数据链路层、网络层、运输层、应用层。
:按自下而上的顺序。
OSI 七层参考模型,每层功能:
对应的层 | 作用 | 相应的网络协议/硬件 |
---|---|---|
物理层 | 提供数据传输,网卡接口,传输介质。 | 中继器、集线器、网关. |
数据链路层 | 进行,将要传输的数据转换为二进制。 | 网卡、网桥、交换机 |
网络层 | 进行,网络互联。 | 、ICMP、… |
传输层 | 端到端可靠数据传输。 | 、、… |
会话层 | 建立用户级连接,选择合适的连接。 | SQL、、… |
表示层 | 用于数据、。 | JPEG、MPEG、ASII、… |
应用层 | 具体功能由应用程序提供用户服务。 | SMTP、、DNS、… |
2、TCP 和 UDP 区别? TCP、UDP 有哪些协议?
TCP 和 UDP 的区别?
-
TCP 提供的、,而 UDP 提供的是的、。
-
TCP确保数据的正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
-
TCP 传输单位称为 ,UDP 传输单位称为。
-
,,因为不需要连接等待,操作少了很多,但是安全性一般。
面向连接和非面向连接的区别?
- 对于连接服务,通信双方应在通信前建立完整的沟通渠道。在通信过程中,可以实时监控和管理整个连接。
- 非连接服务,无需提前建立联系两个通信节点连接。当需要通信地点时,发送节点可以将信息发送到网络上,以便信息可以独立传输到网络上。一般来说,在传输过程中不再进行监控。
基于 TCP、UDP 有哪些协议?
基于 TCP 的协议:
- :Web将超文本传输到本地浏览器的服务器传输协议。
- :邮件发送协议。服务器是开放的 号端口。
- :使用定义文件传输协议 端口。
基于 UDP 的协议:
- :用于将域名地址转换为服务 IP 地址。DNS 用的是号端口。
- …
TCP 与 UDP 适用场景:
TCP:对网络通信质量有要求时,例如:整个数据应准确地传递给对方,HTTP、HTTPS、FTP将使用传输文件的协议。
UDP:当强调传输性能而不是传输的完整性时,网络通信速度应尽可能快:例如 QQ语音,QQ视频等。
3、TCP 如何保证协议的可靠传输?
TCP 确保数据可靠传输的措施如下:
- :将应用数据分割成 TCP 最适合发送的数据块。
- :TCP 编号要发送的每个数据包,接收方根据编号对数据包进行排序,并将有序数据传输到应用层。
- :这是一个端到端验证,旨在检测数据在传输过程中的任何变化。如果接收端验证错误,则表明数据在传输过程中出现问题,接收端将丢弃,不再接受数据。
- : TCP 连接的每一方都有固定大小的缓冲空间,TCP接收端只允许发送端发送接收端缓冲区可接受的数据。当接收方没有时间处理发送方的数据时,可以提示发送方降低发送速度,防止包丢失。TCP 流量控制协议是可变大小的滑动窗口协议。 (TCP 使用滑动窗实现流量控制)
- :当网络拥塞时,减少数据发送。防止过多的数据注入网络,避免传输链路过载。
- :该协议还旨在实现可靠的传输,其基本原理是停止发送,等待对方确认。在收到确认后发送下一个组。
- :当 TCP 发出一个报文段后,它启动一个定时器,等待接收端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
滑动窗及流量控制:
TCP利用实现。
接收方发送的确认报告中的窗口字段可用于控制发送方的窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0.发送方不能发送数据。
TCP拥塞控制采用四种算法,即 、 和 。
- 慢开始算法的想法是,当主机开始发送数据时,如果大量的数据字节立即注入到网络中,它可能会导致网络堵塞,因为它不知道网络的符合性。经验表明,更好的方法是首先探索,即从小到大逐渐增加发送窗口,即从小到大逐渐增加拥塞窗口的值。cwnd初始值为1,每次通过一,cwnd加倍。
- : 拥塞避免算法的想法是让拥塞窗口cwnd慢慢增加,也就是往返时间RTT发送cwnd加1.
- 快传快恢复: 在 TCP/IP 快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,若数据包丢失,TCP 传输暂停将使用定时器。在暂停期间,没有发送新的或复制的数据包。有了 FRR,如果接收器接收到不按顺序的数据段,它将立即向发送机发送重复确认。如果发送机收到三个重复确认,它将假设确认件指出的数据段丢失,并立即重新传输丢失的数据段。有了 FRR,不会因为重传时要求的暂停而耽误。
- 当单个数据包丢失时,快速重传和恢复(FRR)最有效的工作。当多个数据信息包在短时间内丢失时,不能有效工作。
-
TCP 粘包是指:。
-
TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块,但是 TCP 把这些数据块仅仅看成一连串无结构的字节流,没有边界,这就可能导致字节流合并(粘包)。
- 采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据。但当发送的数据包过于的小时,那么 TCP 协议默认的会启用 ,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。
- 总结:
- 接收方采用 TCP 协议接收数据时的过程是这样的:数据到接收方,从网络模型的下方传递至传输层,传输层的 TCP 协议处理是将其放置接收缓冲区,然后由应用层来主动获取(例如C 语言用函数等);这时会出现一个问题,就是我们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等我们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)。
- 总结:
- 在每个包的末尾加上特殊字符,用以区分连续的两个包。(例如加
\r\n
标记) - 在报文首部添加包的长度。
- 为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。
- 。
- 一次握手:客户端发送带有 标志的数据包给服务端。
- 二次握手:服务端发送带有 标志的数据包给客户端。
- 三次握手:客户端发送带有带有 标志的数据包给服务端。
- 第一次握手:是为了服务端。
- 第二次握手:是为了客户端。
- 第三次握手:是为了让服务端。
- 第一次挥手:客户端发送一个 数据包给服务端,用来告诉服务端,我要关闭与你的 TCP 连接。()
- 服务端收到这个 数据包后,它返回一 个 数据包给客户端,确认序号为收到的序号加 1 (和 一样,一个 将占用一个序号),目的是告诉客户端,我收到了你的关闭连接请求。
- 服务端主动关闭到客户端的连接,并发送一个 数据包给客户端,告诉客户端我也关闭了和你的 TCP 连接。()
- 客户端收到服务端返回的 数据包后,再发送一个 数据包给服务端确认,并将确认序号设置为收到序号加 1。
- TCP 设有一个,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户请求后都会重新复位这个计时器,时间通常是设置为 2 小时,若两小时还没收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔 75 秒发送一次。若一连发送 10 个探测报文仍然没有反应,服务器就认为客户端出了故障,接着就关闭连接。
- :DNS 域名解析、TCP 连接、发送 HTTP 请求、服务器处理请求并返回 HTTP 报文、浏览器渲染、结束。
- 解析出 地址后,浏览器根据 地址和默认端口 向网站的服务器发起请求,三次握手,建立 连接。
- 建立好 TCP 连接后,浏览器 (客户端) 通过 HTTP 协议发送请求,请求从服务器端获取数据。
- 服务器处理客户端的 HTTP 请求后,就将请求的数据返回给浏览器。
- 浏览器与服务器数据传送完毕后,四次握手,释放 TCP 连接。
- 浏览器对数据进行解析并渲染显示。
- HTTP 是超文本传输协议,,即在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
- HTTP 最凸出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。
- 客户端发送请求时,用来指定服务器的域名。
- 服务器在返回数据时,会有
Content-Length
字段,表明本次响应的数据长度。 Connection
字段最常用于客户端要求服务器,以便其他请求复用。Content-Type
字段用于服务器回应时,告诉客户端,本次数据是什么格式。Content-Encoding
字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式。- :GET 参数可见(通过拼接 URL 进行传递参数),POST 参数不可见。
- :GET 请求是可以缓存的,POST 请求不可以缓存。
- :GET 一般传输数据大小不超过
2k-4k
(根据浏览器不同,限制不一样,但相差不大),POST 请求传输数据的大小根据php.ini
配置文件设定,也可以无限大。 - :GET 不安全,POST 安全。
- :GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
- HTTP 协议的特性「」既是优点也是缺点,同时还有一大缺点「」。
-
无状态的:服务器不用去记忆 HTTP 的状态,不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存资源用在对外提供服务上。
-
无状态的**坏处:**服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。
- 例如,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要确认一遍用户身份信息。
- 明文意味着在传输过程中的信息,是可方便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。
- 但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取,如果里面有你的账号密码信息,那==。==
- :HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 可以保证信息传输安全,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
- :HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
- :HTTP 的端口号是 80,HTTPS 的端口号是 443。
- :HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。而 HTTP 协议不需要。
- 在通信建立前采用的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用的「会话秘钥」的方式加密明文数据。
- HTTPS 采用来确保,解决了数据被篡改的风险。
- 能够为数据生成独一无二的「标识」,用于校验数据的完整性,从而解决了篡改的风险。
- 。比如我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;
- **Session 的主要作用就是通过服务端记录用户的状态。**典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。
- Cookie 数据保存在客户端,Session 数据保存在服务器端。
- Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
- Cookie ⼀般⽤来保存⽤户信息,
- https://blog.csdn.net/sinat_38719275/article/details/102607458
- https://blog.csdn.net/qq_32595453/article/details/80563142
- :是,可以唯一标识一个资源。
- :是,可以提供该资源的路径。URL 是 URI 的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。
-
,浏览器每次请求都需要与服务器建立一次 TCP 连接,服务器处理完成后立即断开 TCP 连接(无连接),服务端不记录客户端的请求状态(无状态)。
-
:默认使用,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码:
// Keep-Alive不会永久保持连接,它有一个持续时间,可以在不同的服务器软件中设定这个时间。 // 实现长连接需要客户端和服务端都支持长连接。 Connection:keep-alive
- 的概念,支持多路复用、服务器推送,支持使用,而 HTTP 1.0 依然使用文本格式传输。
- :双方持有,进行,典型对称加密算法:DES、AES。
- :密钥成对出现(),私钥只有自己知道,不在网络中传输;而公钥可以公开。相比对称加密速度较慢,典型的非对称加密算法有:RSA、DSA。
- 客户端向服务器索要并验证服务器的公钥。
- 双方协商生产「会话秘钥」。
- 双方采用「会话秘钥」进行加密通信。
4、什么是 TCP 粘包,它的产生原因以及解决方法?
TCP 粘包产生的原因:
① 发送方产生的粘包
② 接受方产生的粘包
如何避免粘包?
避免粘包有以下两种方式:
5、TCP 三次握手和四次挥手
5.1、三次握手图解
如下图所示,下面的两个机器人通过 3 次握手确定了对方能正确接收和发送消息:
上图流程为:
5.2、为什么要三次握手?
所以三次握手,缺一不可。
5.3、第二次握手服务端传回了 ACK 为什么还要传回 SYN ?
5.4 为什么要四次挥手?
如图所示:
:
5.5、如果已经建立了连接,但是客户端突然出现故障了怎么办?
6、在浏览器中输入URL 地址,回车后经历了那些过程
下面来逐步分析一下:
① DNS 域名解析
当我们在浏览器中输入一个域名然后回车时,首先检查本机的C:\Windows\System32\drivers\etc\hosts
配置文件下有没有对应的域名映射,如下所示:
# 前台本机域名映射
127.0.0.1:80 web.csp1999.com
# 后端接口本机域名映射
127.0.0.1:8080 api.csp1999.com
,则返回对应的 地址。
,浏览器会发出一个 DNS 请求到本地DNS服务器找对应的 IP 地址,本地 DNS 服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动:(图片来源:Tomcat启动与配置----一个Servlet可以指定多个映射路径-----高难度面试题:谈谈网站是如何进行访问的—JSP–Maven阿里云镜像–MVC三层架构–Filter—JDBC_帆浆的博客-CSDN博客)
② 建立 TCP 连接:三次握手
③ 发送 HTTP 请求
④ 关闭 TCP 连接:四次挥手
⑤ 浏览器回显
7、什么是HTTP协议?
HTTP的概念:
HTTP 的特性(优点):
HTTP的常见字段:
① Host 字段
Host: www.A.com
有了 Host
字段,就可以将请求发往「同一台」服务器上的不同网站。
② Content-Length 字段
Content-Length: 1000
如上面则是告诉浏览器,本次服务器回应的数据长度是 1000 个字节,后面的字节就属于下一个回应了。
③ Connection 字段
HTTP/1.1 版本的默认连接都是持久连接,但为了兼容老版本的 HTTP,需要指定 Connection
首部字段的值为 Keep-Alive
。
Connection: keep-alive
一个可以复用的 TCP 连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段。
④ Content-Type 字段
Content-Type: text/html; charset=utf-8
上面的类型表明,发送的是网页,而且编码是UTF-8。
客户端请求的时候,可以使用 Accept
字段声明自己可以接受哪些数据格式。
Accept: */*
上面代码中,客户端声明自己可以接受任何格式的数据。
⑤ Content-Encoding 字段
Content-Encoding: gzip
上面表示服务器返回的数据采用了 方式压缩,告知客户端需要用此方式解压。
客户端在请求时,用 Accept-Encoding
字段说明自己可以接受哪些压缩方法。
Accept-Encoding: gzip, deflate
8、GET 和 POST 的区别?
9、HTTP 的优缺点
① 无状态协议的优缺点:
对于无状态的问题,解法方案有很多种,其中比较简单的方式用 技术。
Cookie
通过在请求和响应中写入 Cookie 信息来控制客户端的状态。相当于,:
② 明文传输的优缺点:
10、HTTP 和 HTTPS 的区别是什么?
混合加密:
HTTPS 采用和结合的「混合加密」方式,将服务器公钥放到中,来。
摘要算法:
HTTPS 在 HTTP 与 TCP 层之间加入了
SSL/TLS
协议,如图:
11、Cookie 的作用是什么?和 Session 有什么区别?
Cookie 和 Session 的作用:
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但两者有所区别:
Cookie 和 Session 的区别如下:
12、URI 和 URL 的区别是什么?
参考文章:
URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。
13、HTTP 1.0 、 HTTP 1.1 、HTTP 2.0 的主要区别是什么?
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
14、简单介绍一下对称加密算法和非对称加密算法的区别?
15、HTTPS 是如何建立连接的?其间交互了什么?
HTTPS 是在 HTTP 与 TCP 之间加了一层 SSL/TLS 协议 ,所以建里连接流程如下:
:三次握手。
:
SSL/TLS 协议基本流程:
前两步也就是 SSL/TLS 的建立过程,也就是握手阶段。
。