计算机网络知识-面试点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.mzph.cn/diannao/49056.shtml

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

相关文章

LangChain的使用详解

一、 概念介绍 1.1 Langchain 是什么? 官方定义是:LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序,它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供…

Qt实战:专栏内容介绍及目录

1、专栏介绍 Qt相比Visual Studio (VS) 的优势主要体现在跨平台能力、‌丰富的功能、‌高性能、‌现代UI设计、‌社区支持和企业支持等方面。‌ 跨平台能力:‌Qt 允许应用程序在多个操作系统上编译和运行,‌无需为每个平台编写特定的代码,‌…

构建高效园区导览系统:基于3DGIS与物联网技术的实现方案

园区导航的挑战与机遇 在现代化的大型园区中,随着面积的不断扩张和布局的日益复杂,传统的纸质地图已难以满足日益增长的导航需求。每栋楼、每层楼都有着不同的办公室,不同的业务。这种低效的寻路过程不仅影响了客户的来访体验,也…

SSD基本架构与工作原理

SSD的核心由一个或多核心的CPU控制器、DRAM缓存以及多个NAND闪存芯片组成。CPU控制器负责管理所有读写操作,并通过DRAM缓存存储映射表等元数据,以加速寻址过程。 NAND闪存则是数据存储的实际介质,其组织结构从大到小依次为通道(包…

MySQL_JDBC

目录 一、JDBC常用的接口和类 1.1 数据库连接 Connection 1.2 Statement 对象 二、JDBC的使用 总结 【Java 的数据库编程】 JDBC 即 Java Database Connectivity (Java数据库连接),是一种用于执行 SQL 语句的 Java API。这个 API 由 java.sql.*,javax.sql.* …

数据结构(Java):七大排序算法【详解】

目录 1、排序的概念 1.1 排序 1.2 排序的稳定性 1.3 内部排序&外部排序 1.4 各排序算法总结对比 2、 插入排序 2.1 🌸直接插入排序 2.2 🌸希尔排序 3、 选择排序 3.1 🌸直接选择排序 3.2 直接选择排序优化 3.3 🌸…

如何给7Z分卷文件设置密码?简单几步给文件加上安全锁

在压缩7Z文件的时候,如果文件比较大,很多小伙伴都会把文件压缩成7Z分卷文件,那想要保护7Z分卷文件,要如何设置密码呢?不清楚的小伙伴,一起来看看吧! 我们可以使用7-Zip解压缩文件,在…

qt初入门9:qt记录日志的方式,日志库了解练习(qInstallMessageHandler,qslog, log4qt)

项目中用到qt,考虑有需要用到去记录日志,结合网络,整理一下,做记录。 简单了解后,qt实现日志模块思考: 1:借助qt自带的qInstallMessageHandler重定向到需要的目的地。 2:自己封装一…

openmv学习笔记(24电赛备赛笔记)

#openmv简介 openmv一种小型,可编程机器视觉摄像头,设计应用嵌入式应用和计算边缘,是图传模块,或者认为是一种,具有图像处理功能的单片机,提供多种接口(I2C SPI UART CAN ADC DAC &#xff0…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(三)基变换与坐标变换;微分方程;李群和李代数;雅可比矩阵

一、基变换与坐标变换 字小,事不小。 因为第一反应:坐标咋变,坐标轴就咋变呀。事实却与我们想象的相反。这俩互为逆矩阵。 第一次读没有读明白,后面到事上才明白。 起因是多传感器标定:多传感器,就代表了多个坐标系,多个基底。激光雷达和imu标定。这个标定程序,网上,…

Bootstrap5 Navbar多级下拉框

实现目标&#xff1a; 1、访问 Bootstrap5-navbar 2、修改dropdown为多级 <!DOCTYPE HTML> <html lang"en-US"> <head><meta charset"UTF-8"><title></title><link rel"stylesheet" href"https…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下&#xff0c;通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

05 HTTP Tomcat Servlet

文章目录 HTTP1、简介2、请求数据格式3、响应数据格式 Tomcat1、简介2、基本使用3、Maven创建Web项目4、IDEA使用Tomcat Servlet1、简介2、方法介绍3、体系结构4、urlPattern配置5、XML配置 HTTP 1、简介 HTTP概念 HyperText Transfer Protocol&#xff0c;超文本传输协议&am…

鸿蒙 动态共享包HSP的创建和引用

1.什么是动态共享包HSP HSP&#xff08;Harmony Shared Package&#xff09;是动态共享包&#xff0c;可以包含代码、C库、资源和配置文件&#xff0c;通过HSP可以实现代码和资源的共享。HSP不支持独立发布&#xff0c;而是跟随其宿主应用的APP包一起发布&#xff0c;与宿主应…

【Django5】模板引擎

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理&#xff08;Cookies&Session&#xff09; 第八章 文件上传…

redis的学习(三):Java客户端jedis的例子和SpringDataRedis的简介

简介 Java客户端jedis的例子和SpringDataRedis的简介## Java客户端 常用的Java客户端有jedis&#xff0c;lettuce&#xff0c;redission。 优缺点&#xff1a; jedis简单实用&#xff0c;api名是redis的命令&#xff0c;学习成本低。不过jedis实例的线程是不安全的&#xff…

VideoAgent: Long-form Video Understanding with Large Language Model as Agent

VideoAgent: Long-form Video Understanding with Large Language Model as Agent 基本信息 博客贡献人 燕青 作者 Xiaohan Wang, Yuhui Zhang, et al. 标签 Large Language Model Agent, Long-form Video Understanding, Vision-Language Foundation Models 摘要 长视…

Android中systrace配置及注意问题

Android中systrace配置及注意问题 systrace配置的官方文档地址如下&#xff1a;优化启动时间 Systrace systrace 允许在启动期间收集内核和 Android 跟踪记录。systrace 的可视化可以帮助分析启动过程中的具体问题。&#xff08;不过&#xff0c;如果要查看整个启动过程中的平…

2024.7.22 作业

1.将双向链表和循环链表自己实现一遍&#xff0c;至少要实现创建、增、删、改、查、销毁工作 循环链表 looplinklist.h #ifndef LOOPLINKLIST_H #define LOOPLINKLIST_H#include <myhead.h>typedef int datatype;typedef struct Node {union {int len;datatype data;}…

win10开启Linux子系统

打开win10开发人员模式&#xff0c;在设置–>更新和安全–>针对开发人员&#xff0c;中勾选开发人员模式。 然后在控制面板中勾选添加Linux子系统。依次进入控制面板–>程序–>启用或关闭windows功能&#xff0c;勾选适用于windows的linux的子系统&#xff0c;点击…