计算机网络知识-面试点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长连接流水线:客户端可以在收到前一个请求的响应之前,在同一个连接上发送后续的请求。然而,尽管可以发送多个请求,但服务器仍然是按照请求的顺序依次返回响应重点:之前那个请求的响应没有回复,之后的响应就不能回复

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/384350.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python程序发送文件(python实例二十六)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.文件上传 3.1 代码构思 3.2 服务端代码 3.3 客户端代码 3.4 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具…

k8s中部署nacos

1 部署nfs # 在k8s的主节点上执行 mkdir -p /appdata/download cd /appdata/download git clone https://github.com/nacos-group/nacos-k8s.git 将nacos部署到middleware的命名空间中 kubectl create namespace middleware cd /appdata/download/nacos-k8s # 创建角色 kub…

KamaCoder 98. 所有可到达路径 + LC 797. All Paths From Source to Target

题目要求 给定一个有 n 个节点的有向无环图,节点编号从 1 到 n。请编写一个函数,找出并返回所有从节点 1 到节点 n 的路径。每条路径应以节点编号的列表形式表示。 输入描述 第一行包含两个整数 N,M,表示图中拥有 N 个节点&…

ctfshow-web入门-php特性(web137-web141)

目录 1、web137 2、web138 3、web139 4、web140 5、web141 1、web137 直接调用 ctfshow 这个类下的 getFlag 函数,payload: ctfshowctfshow::getFlag 查看源码: 拿到 flag:ctfshow{dd387d95-6fbe-4703-8ec5-9c8f9baf2bb5} 在…

每天一个设计模式之职责链模式(第一天)

特别感谢刘伟老师,看他的书我学到了很多东西,从今天开始我要开始更新啦! 在csdn个人博客来总结知识,把他们变成自己的能力。 对三,要不起,张三李四王五几个人在玩斗地主,过过过,一…

杰发科技Bootloader(1)—— Keil配置地址

IAP方式 BootLoader方式 UDSBoot方式 AC7801的地址分配 用户空间的的地址从8000000开始分配,大小是64页,即128K。 RAM地址从20000000开始 基于UDSboot调试-Boot 烧录Boot之后,ATClinkTool无法连接 用keil查看内存,地址到8005388…

vscode 调试web后端

1、调试环境配置 一、安装python环境管理器 其中要先在vscode选择对应的python环境,最方便的是按照环境管理器后从中选择。其中在【externsions】里面安装python即可。 如下: 二、编写launch.json文件 其中如下: {// Use IntelliSense …

oracle中存储过程的写法

存储过程常规语法: 实际业务例子: CREATE OR REPLACE TRIGGER "TRI_B00_02_ONLY_GUID" BEFORE/AFTER INSERT OR UPDATE OR DELETE ON B00_02 FOR EACH ROW declare t_guid varchar2(300) : ; --GUID t_cnt int : 0; BEGIN t_guid : :NEW…

快速入门C#设计模式【2】结构型模式

结构型模式 适配器模式 (Adapter)桥接模式 (Bridge)组合模式 (Composite)装饰模式 (Decorator)外观模式 (Facade)享元模式 (Flyweight)代理模式 (Proxy) 适配器模式(Adapter Pattern) 适配器模式(Adapter Pattern)是一种结构型设计…

Pytorch深度学习实践(5)逻辑回归

逻辑回归 逻辑回归主要是解决分类问题 回归任务:结果是一个连续的实数分类任务:结果是一个离散的值 分类任务不能直接使用回归去预测,比如在手写识别中(识别手写 0 − − 9 0 -- 9 0−−9),因为各个类别…

CentOS7下操作iptables防火墙和firewalld防火墙

CentOS7下操作iptables防火墙和firewalld防火墙 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、…

【OpenCV C++20 学习笔记】调节图片对比度和亮度(像素变换)

调节图片对比度和亮度(像素变换) 原理像素变换亮度和对比度调整 代码实现更简便的方法结果展示 γ \gamma γ校正及其实操案例线性变换的缺点 γ \gamma γ校正低曝光图片矫正案例代码实现 原理 关于OpenCV的配置和基础用法,请参阅本专栏的其…

HAL STM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据

HAL STM32 SPI/ABZ/PWM方式读取MT6816磁编码器数据 📚MT6816相关资料(来自商家的相关资料): 资料:https://pan.baidu.com/s/1CAbdLBRi2dmL4D7cFve1XA?pwd8888 提取码:8888📍驱动代码编写&…

FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 加入课程 我们先看下加入课程 1.是否登录 2.课程是否存在 3.是否已经存在 4.添加 首先实现逻辑 def get_student_course(db: Session, course: int…

如何开启或者关闭 Windows 安全登录?

什么是安全登录 什么是 Windows 安全登录呢?安全登录是 Windows 附加的一个组件,它可以在用户需要登录的之前先将登录界面隐藏,只有当用户按下 CtrlAltDelete 之后才出现登录屏幕,这样可以防止那些模拟登录界面的程序获取密码信息…

【9.PIE-Engine案例——加载Terra星全球500m植被指数16天合成产品(MOD13A1 V61)数据集】

加载Terra星全球500m植被指数16天合成产品(MOD13A1 V61)数据集 原始路径 欢迎大家登录航天宏图官网查看本案例原始来源 最终结果 具体代码 /*** File : MOD13A1* Time : 2020/7/21* Author : piesat* Version : 1.0* Contact : 400-890-0662* License : …

Interesting bug caused by getattr

题意:由 getattr 引起的有趣的 bug 问题背景: I try to train 8 CNN models with the same structures simultaneously. After training a model on a batch, I need to synchronize the weights of the feature extraction layers in other 7 models. …

WARNING: Ignoring invalid distribution -ip警告信息如何去掉?

查看已安装依赖列表的时候,出现了很多警告信息,如何去掉呢? 解决办法 打开这个路径:d:\software\python\python39\lib\site-packages 这种波浪线开头的,我们将它删除掉,就可以了。

Ubuntu设置网络

进入网络配置文件夹 cd /etc/netplan 使用 vim 打开下的配置文件 打开后的配置 配置说明: network:# 网络配置部分ethernets:# 配置名为ens33的以太网接口ens33:addresses:# 为ens33接口分配IP地址192.168.220.30,子网掩码为24位- 192.168.220.30/24n…

VS2019报错:找不到导入的项目,请确认import声明

解决办法 找到项目的.vcxproj文件 用记事本打开后使用ctrlF搜索import 发现import Project后面的.props文件路径不对,将路径改为相对路径 保存后重新加载项目,即可生成成功