计算机网络知识-面试点1

1. 三握四挥

定义:

++在计算机网络中,特别是TCP/IP协议中,"三握"指的是三次握手(Three-way Handshake),而"四挥"则指的是四次挥手(Four-way Handshake)。这两个过程分别用于TCP连接的建立和断开。++

三握:

三次握手(Three-way Handshake)

三次握手是TCP协议中用于建立连接的过程,确保通信双方能够正常地接收和发送数据。具体过程如下:

  1. 第一次握手 :客户端向服务器发送一个SYN(同步序列编号)标志位的数据包,并等待服务器确认。此时,客户端进入SYN_SENT状态。
    • SYN:同步序列编号,用于初始化连接序列号。
  2. 第二次握手 :服务器收到客户端的SYN包后,向客户端发送一个SYN/ACK(同步/确认)标志位的数据包,表示服务器已经收到请求并准备建立连接。此时,服务器进入SYN_RECV状态。
    • SYN/ACK:表示服务器既确认了客户端的SYN包,又发送了自己的SYN包。
  3. 第三次握手 :客户端收到服务器的SYN/ACK包后,再次向服务器发送一个ACK(确认)标志位的数据包,表示客户端已经收到服务器的确认信息,连接建立成功。此时,客户端和服务器都进入ESTABLISHED(TCP连接成功)状态。
    • ACK:确认包,用于确认对方发送的数据包。

意义:三次握手的主要目的是确认双方的接收能力和发送能力是否正常,并同步双方的初始序列号,为后续的可靠性传输做准备。

简单描述:

首先要发送数据前

第一次握手:客户端向服务器端发送请求(我准备好了,你准备好了么)

第二次握手:服务器端收到了请求,并告诉服务器端(我准备好了,你能听到我的么)

第三次握手:客户端收到了服务器端的请求,但是需要告知服务器端收到了他的请求(我收到了)

此刻:双方都确认对方已经准备好,通话(连接)正式开始。

四挥:

四次挥手(Four-way Handshake)

四次挥手是TCP协议中用于断开连接的过程,确保通信双方能够优雅地结束数据传输。具体过程如下:

  1. 第一次挥手 :客户端向服务器发送一个FIN(结束标志位)标志位的数据包,请求与服务器断开连接。此时,客户端进入FIN-WAIT-1(终止等待1)状态。
    • FIN:结束标志位,用于请求断开连接。
  2. 第二次挥手 :服务器收到客户端的FIN包后,向客户端发送一个ACK标志位的数据包,表示已经收到请求。此时,服务器进入CLOSE-WAIT(关闭等待)状态。
    • ACK:确认包,用于确认收到对方的FIN包。
  3. 第三次挥手 :服务器向客户端发送一个FIN包,表示服务器也准备与客户端断开连接。此时,服务器进入LAST-ACK(最后确认)状态。
    • FIN:由服务器发送,表示服务器也请求断开连接。
  4. 第四次挥手 :客户端收到服务器的FIN包后,再次向服务器发送一个ACK标志位的数据包,表示已经收到服务器的确认信息,连接成功断开。此时,客户端进入TIME-WAIT(时间等待)状态,等待一段时间后(通常是2MSL,即两倍的最大报文段寿命),才进入CLOSED(关闭)状态。服务器收到客户端的ACK包后,立即进入CLOSED状态。
    • ACK:用于确认收到对方的FIN包,完成断开连接的过程。

意义: 四次挥手的主要目的是确保双方都能够正常地结束数据传输,并释放相关的资源。TCP协议支持半关闭特性,即一方可以在结束发送数据后仍然接收来自另一方的数据。

简单描述:

首先要发送数据前

第一次挥手:客户端向服务器端发送请求断开连接**(我准备好了断了,你准备好了告诉我)**

第二次挥手:服务器端收到了请求,并告诉客户端(好的,我准备好了就告诉你)

第三次挥手:服务器端向客户端发送请求(我已经准备好了)

第四次挥手:客户端收到了服务器端的请求,并告知服务器端我收到了

此刻:双方都确认对方已经准备好,通话(连接)此时断开连接。

2.Http和Https

介绍:

HTTP(HyperText Transfer Protocol,超文本传输协议)和HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是两种在网络中用于传输数据的协议,它们在多个方面存在显著差异。

区别:

安全性和连接方式

HTTP协议以明文方式发送内容,不提供任何方式的数据加密。这意味着如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。

HTTPS是HTTP的安全版,它在HTTP的基础上加入了SSL/TLS协议。SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS协议的主要作用可以分为两种:一是建立一个信息安全通道,来保证数据传输的安全(使用SSL/TLS协议对数据进行加密);二是确认网站的真实性。(证书验证)

简单说就是: HTTP协议运行在TCP之上,HTTPS是运行在SSL/TLS之上的HTTP协议(Https先把数据给到SSL/TLS,通过SSL/TLS给到TCP上)所以HTTP不安全是明文的,Https是安全的是加密传输

兼容性

HTTP:HTTP协议的兼容性较好,可以在各种设备和操作系统上使用。

HTTPS:由于HTTPS需要使用CA证书,因此在某些情况下可能会出现兼容性问题。例如,某些操作系统或浏览器可能不支持某些类型的证书或SSL/TLS协议版本。然而,随着技术的发展和普及,HTTPS的兼容性问题正在逐渐得到解决。

3. TCP和UDP

UDP:

UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等

TCP:

TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。

主要区别

  1. 连接性
    • TCP:面向连接,需要建立连接后才能传输数据。
    • UDP:无连接,发送数据前不需要建立连接。
  2. 可靠性
    • TCP:对数据的可靠性要求非常严格,通过确认和重传机制确保数据的完整性和正确性。
    • UDP:对数据的可靠性要求较低,不保证数据的完整性和正确性,不进行重传。
  3. 速度和效率
    • TCP:由于需要建立连接和使用确认重传机制,通常比UDP的速度更慢。
    • UDP:没有连接建立和确认重传的开销,且不受拥塞控制的限制,因此在数据传输速度方面通常比TCP更快。
  4. 数据包大小
    • TCP:将数据划分为较小的数据包进行传输,并根据网络状况进行调整。
    • UDP:允许将多个数据包打包成一个较大的数据报进行传输,数据报的大小一般在应用层决定,但通常受到网络MTU(最大传输单元)的限制。

工作机制

  • TCP
    • 三次握手:建立连接时,客户端和服务器之间通过三次握手来同步双方的序列号和确认号,并交换TCP窗口大小信息。
    • 数据传输:在连接建立后,双方可以开始传输数据。TCP保证数据的可靠传输,包括超时重发、丢弃重复数据、检验数据等功能。
    • 四次挥手:当数据传输完毕或需要断开连接时,双方通过四次挥手来关闭连接。
  • UDP
    • 发送数据:UDP在发送数据时不需要建立连接,直接将数据封装成数据报并发送出去。
    • 接收数据:接收方在收到数据报后进行处理,但不进行确认或重传操作。

4. uri和url的区别

区别:

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。

  • URL(Uniform Resource Location) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

重点:

URL:就是访问网址时的全路径。URL=协议://IP或域名:端口URI

注意再注意:端口和URI之间没有/的。因为/也是URI。

例如:https://www.hh.com:11/a/b.html url:就是全部 uri就是/a/b.html

https://www.hh.com:11/ url:就是全部 uri就是/

5.HTTP长连接和短连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

6.HTTP/1.0 和http1.1

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

  1. 长连接 : 在HTTP/1.0中,默认使用的是短连接 ,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。

  2. 错误状态响应码 :在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

  3. 缓存处理 :在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

  4. 带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

7.HTTP1.x和HTTP/2.0

HTTP/2.0是HTTP协议的最新版本,它旨在提供更高效、更安全、更快速的互联网连接。HTTP/2.0在HTTP1.x的基础上进行了全面的改进和扩展,主要特点包括:

  1. 二进制传输:HTTP/2.0采用二进制格式传输数据,而非之前的文本格式,大大提高了传输效率。二进制格式在协议的解析和优化扩展上带来了更多的优势和可能。

  2. 多路复用:HTTP/2.0支持多个请求和响应在同一个连接上同时进行,这称为多路复用。通过使用不同的流标识符,可以区分不同的数据流,从而实现并行处理请求和响应,提高了应用的响应速度和效率。

  3. 头部压缩:HTTP/2.0采用了头压缩技术,通过使用字典来压缩请求和响应头信息,从而减少数据传输量。这有助于减少网络延迟和提高传输效率。

  4. 服务器推送:HTTP/2.0引入了服务器推送机制,服务器可以在客户端请求之前主动向客户端推送数据。这可以提高客户端的响应速度,并减少不必要的网络请求。

  5. 流量控制:HTTP/2.0引入了流量控制机制,以防止客户端或服务器端接收数据过快而无法处理的情况。通过使用流控制窗口和流控制令牌等机制,可以实现流量控制,确保数据传输的平稳和可靠。

  6. 安全性增强:HTTP/2.0通常部署在HTTPS上,采用了TLS 1.2或更高版本的加密协议,提供了更强的安全性保护,有效防止了中间人攻击等安全风险。

**重点:**HTTP/2.0采用多路复用,不管是HTTP/1.0的短连接还是http1.1长连接都不能同时并行处理多个请求,HTTP 2.0就提出了多路复用的技术,支持多个请求和响应在同一个连接上同时进行

有人可能疑惑 不是可以用HTTP/1.1长连接流水线解决么?

**HTTP/1.1长连接流水线:**客户端可以在收到前一个请求的响应之前,在同一个连接上发送后续的请求。然而,尽管可以发送多个请求,但服务器仍然是按照请求的顺序依次返回响应。重点:之前那个请求的响应没有回复,之后的响应就不能回复

**多路复用的技术:**你可以连续发送多个请求,可以不用收到回复就继续发送请求。

相关推荐
徐*红25 分钟前
java 线程池
java·开发语言
尚学教辅学习资料25 分钟前
基于SSM的养老院管理系统+LW示例参考
java·开发语言·java毕设·养老院
2401_8576363925 分钟前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
1 9 J27 分钟前
Java 上机实践4(类与对象)
java·开发语言·算法
Code apprenticeship28 分钟前
Java面试题(2)
java·开发语言
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
憨子周1 小时前
2M的带宽怎么怎么设置tcp滑动窗口以及连接池
java·网络·网络协议·tcp/ip
霖雨3 小时前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
Fiercezm3 小时前
JUC学习
java