计网相关知识点

news/2025/4/3 2:21:10/文章来源:https://www.cnblogs.com/vizzini/p/18805028

HTTP 1.0 ~ 3.0 有什么区别?

  • HTTP 1.1

持久连接: 引入了Keep-Alive机制,多个请求可以复用同一个TCP连接,减少了建立连接的开销。

管道化: 允许在同一个TCP连接上同时发送多个请求,提高了并发效率。

Host字段: 可以在同一个IP地址上运行多个虚拟主机。

断点续传: 支持文件传输中断后从断点处继续传输。

  • HTTP 2.0

二进制分帧: 将HTTP报文分割为更小的二进制帧,提高了传输效率,并支持多路复用。

头部压缩: 减少了HTTP头部的大小,降低了网络开销。

服务器推送: 服务器可以主动向客户端推送资源,减少了客户端的请求次数。

多路复用: 在一个TCP连接上可以同时发送多个请求和响应,解决了HTTP 1.1的队头阻塞问题。

  • HTTP 3.0

基于QUIC协议: 使用UDP协议,相较于TCP的可靠性,QUIC通过自身实现可靠传输,减少了RTT。

多路复用: 在一个QUIC连接上可以同时传输多个请求和响应,并支持流优先级。

更快的连接建立: 减少了TCP的三次握手和TLS的握手时间。

更低的延迟: 由于QUIC协议的特性,HTTP 3.0具有更低的延迟。

HTTP 和 HTTPS 有什么区别?

HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是两种用于网络通信的协议,它们的主要区别在于安全性和加密机制。以下是它们的详细对比:

  1. 安全性

HTTP

不加密:HTTP 是一种明文传输协议,数据在传输过程中以明文形式发送。

HTTPS

加密传输:HTTPS 是在 HTTP 基础上通过 SSL/TLS(安全套接层/传输层安全)协议进行加密的协议。加密过程包括对称加密和非对称加密,确保数据在传输过程中不被泄露或篡改。

  1. 协议结构

HTTP

基于 TCP:HTTP 是一个应用层协议,基于 TCP 进行数据传输。端口 80。

HTTPS

基于 SSL/TLS + TCP:HTTPS 也是应用层协议,但它在 HTTP 的基础上增加了 SSL/TLS 层。端口 443。

  1. 性能

HTTP

性能较高:由于 HTTP 是明文传输,没有加密和解密的开销,因此在某些情况下性能可能略高于 HTTPS。

HTTPS

性能稍低:HTTPS 的加密和解密过程会增加一定的计算开销,可能导致性能略低于 HTTP。

HTTP 中 GET 和 POST 的区别是什么?

  1. 用途

GET

获取资源:GET请求主要用于从服务器获取数据,而不对服务器上的数据进行修改或添加。例如,访问一个网页、获取图片或文档等。

幂等性:GET请求是幂等的,即多次发送相同的GET请求,其结果与发送一次请求相同,不会对服务器产生副作用。

POST

提交数据:POST请求主要用于向服务器提交数据,以创建或更新资源。例如,提交表单数据、上传文件、创建新记录等。

非幂等性:POST请求是非幂等的,多次发送相同的POST请求可能会导致不同的结果,例如多次提交表单可能会创建多个记录

  1. 数据传输方式

GET

通过URL传输:GET请求将数据附加在URL的查询字符串中,例如http://example.com/page?param1=value1&param2=value2。数据暴露在URL中,容易被记录和查看。因此数据量通常受到URL长度的限制。

POST

通过请求体传输:POST请求将数据放在请求体(body)中,数据不会出现在URL中。例如,表单数据通常以application/x-www-form-urlencodedmultipart/form-dataapplication/json等格式发送。因此适合传输较大的数据,如文件上传。

  1. 缓存机制

GET

可缓存:GET请求的结果通常可以被浏览器缓存。例如,当用户再次访问相同的URL时,浏览器可以直接从缓存中加载内容,而无需再次向服务器发送请求。

POST

不可缓存:POST请求通常不会被浏览器缓存,因为POST请求的结果可能会因每次提交的数据不同而变化。

如果需要获取数据且数据量较小、安全性要求不高,可以选择GET;如果需要提交数据、安全性要求高或数据量较大,应选择POST。

WebSocket 与 HTTP 有什么区别?

  1. 通信模式

HTTP

  • 请求 - 响应模式:HTTP 是一种请求 - 响应协议,客户端发起请求,服务器返回响应,每次交互都是独立的。例如,客户端向服务器请求一个网页,服务器返回网页内容后,连接关闭。

WebSocket

  • 全双工通信模式:WebSocket 是一种全双工通信协议,一旦建立连接,客户端和服务器可以随时发送和接收消息,无需每次都建立新的连接。例如,服务器可以主动向客户端推送消息,而无需客户端发起请求。
  1. 连接方式

HTTP

  • 短连接:HTTP 默认使用短连接,每次请求和响应完成后,连接立即关闭。虽然 HTTP/1.1 引入了持久连接(keep - alive),但连接仍然会在一定时间后关闭。

WebSocket

  • 长连接:WebSocket 使用长连接,一旦建立连接,客户端和服务器可以持续通信,直到连接被显式关闭。
  1. 数据传输方式

HTTP

  • 明文传输:HTTP 以明文形式传输数据,数据在传输过程中容易被窃听和篡改(HTTP/2 引入了二进制帧传输,但仍然是明文传输)。

WebSocket

  • 二进制帧传输:WebSocket 使用二进制帧传输数据,支持文本和二进制数据。数据传输效率更高,适合实时通信。

TCP 连接相关知识

  1. TCP连接的定义

TCP连接是指在两个网络终端(通常是客户端和服务器)之间建立的一种可靠的、有序的、无重复的数据传输通道。它通过TCP协议来管理数据的发送和接收,确保数据的完整性、顺序性和可靠性。

  1. TCP连接的特点

  • 面向连接:TCP连接在数据传输之前需要先建立连接,类似于打电话之前需要先拨号建立通话。一旦连接建立,数据就可以在两个终端之间可靠地传输。

  • 可靠传输:TCP通过一系列机制(如序列号、确认应答、超时重传等)确保数据能够可靠地传输。如果数据在传输过程中丢失或损坏,TCP会自动重传数据,直到数据正确到达接收方。

  • 基于字节流:TCP将数据视为一个连续的字节流,而不是像UDP那样以数据报的形式传输。这意味着TCP不保证数据的边界,接收方需要根据应用层协议来解析数据。

  • 全双工通信:TCP连接支持全双工通信,即客户端和服务器可以同时发送和接收数据,而不会相互干扰。

  • 拥塞控制:TCP通过拥塞控制算法(如慢启动、拥塞避免等)动态调整发送速率,避免网络拥塞。

  1. TCP连接的建立过程(三次握手)

TCP连接的建立需要经过三次握手的过程,具体步骤如下:

  1. 客户端发起连接请求

    1. 客户端向服务器发送一个SYN(同步)报文,表示请求建立连接。

    2. 报文中的序列号(Sequence Number)字段被设置为一个随机值x

  2. 服务器响应连接请求

    1. 服务器收到SYN报文后,发送一个SYN-ACK(同步-确认)报文作为响应。

    2. 报文中的确认号(Acknowledgment Number)字段被设置为x + 1,表示对客户端SYN报文的确认。

    3. 同时,服务器的序列号字段被设置为一个随机值y

  3. 客户端确认连接

    1. 客户端收到SYN-ACK报文后,发送一个ACK(确认)报文。

    2. 报文中的确认号字段被设置为y + 1,表示对服务器SYN报文的确认。

    3. 一旦服务器收到ACK报文,TCP连接就建立成功,双方可以开始数据传输

  4. TCP连接的关闭过程(四次挥手)

TCP连接的关闭需要经过四次挥手的过程,具体步骤如下:

  1. 客户端发起关闭请求:(客户端说我发完了)

    1. 客户端向服务器发送一个FIN(结束)报文,表示客户端已经完成数据发送,请求关闭连接。
  2. 服务器响应关闭请求:(服务端说我知道了)

    1. 服务器收到FIN报文后,发送一个ACK(确认)报文,确认收到客户端的关闭请求。

    2. 此时,服务器可能还有数据未发送完毕,因此不会立即关闭连接。

  3. 服务器发起关闭请求:(服务端说我发完了)

    1. 服务器完成数据发送后,向客户端发送一个FIN报文,表示服务器也已经完成数据发送,请求关闭连接。
  4. 客户端响应关闭请求:(客户端说我知道了)

    1. 客户端收到服务器的FIN报文后,发送一个ACK报文,确认收到服务器的关闭请求。

    2. 之后,客户端进入TIME_WAIT状态,等待一段时间(通常是2倍的报文最大生存时间)以确保服务器收到ACK报文。

    3. 一旦等待时间结束,TCP连接正式关闭。

  5. TCP连接的可靠性机制

  • 序列号和确认号:TCP为每个发送的数据包分配一个序列号,接收方通过确认号告知发送方已成功接收的数据包,从而确保数据的顺序和完整性。

  • 超时重传:如果发送方在规定时间内未收到接收方的确认应答,会自动重传数据包,确保数据不会丢失。

  • 滑动窗口协议:TCP通过滑动窗口机制动态调整发送方的发送窗口大小,从而控制数据的发送速率,避免发送方发送过多数据导致接收方缓冲区溢出或网络拥塞。

  • 校验和:TCP在每个数据包中包含一个校验和字段,用于检测数据在传输过程中是否被损坏。如果校验和检测到错误,数据包将被丢弃并重传。

  1. TCP连接的优缺点

  • 优点

    • 可靠性高:通过序列号、确认应答、超时重传等机制,确保数据的完整性和顺序性。

    • 支持全双工通信:客户端和服务器可以同时发送和接收数据,提高通信效率。

    • 拥塞控制:通过动态调整发送速率,避免网络拥塞。

  • 缺点

    • 连接开销大:建立和关闭连接需要经过多次握手和挥手过程,增加了通信开销。

    • 性能较低:由于需要进行可靠性检查和拥塞控制,TCP的传输速度可能低于UDP。

    • 不适合实时性要求极高的应用:由于TCP的可靠性机制,可能会导致数据传输延迟增加,不适合实时性要求极高的场景(如实时游戏、视频直播等)。

TCP 的粘包和拆包?

1. 什么是粘包和拆包?

  • 粘包:发送方将多个小数据包合并成一个大数据包发送,接收方收到后无法区分每个数据包的边界。例如,发送方分别发送了“Hello”和“World”,接收方收到的却是“HelloWorld”,无法区分这两个独立的消息。

  • 拆包:发送方将一个大数据包拆分成多个小数据包发送,接收方需要将这些小数据包重新组装才能获取完整消息。例如,发送方发送了一个很长的字符串,接收方可能分多次收到。

2. 为什么会出现粘包和拆包?

  • TCP的流式特性:TCP是面向流的协议,数据被视为字节流,不保证明确的边界。TCP不会保留应用层消息的边界,因此多个消息可能会被合并发送,或者一个大消息可能会被拆分发送。

  • 缓冲区大小限制:发送方或接收方的缓冲区大小可能限制了数据的发送或接收,导致数据被拆分或合并。

3. 如何解决粘包和拆包问题?

  1. 固定数据包长度

    1. 发送方将每个数据包的长度固定,接收方按固定长度接收数据。
  2. 添加特殊分隔符

    1. 在每个数据包的末尾添加特殊字符(如\r\n)作为分隔符,接收方根据分隔符拆分数据。
  3. 使用长度字段

    1. 在每个数据包的头部添加一个长度字段,指示数据包的长度,接收方根据长度字段读取完整数据。
  4. 自定义协议

    1. 设计自定义协议,明确数据包的格式和边界。

TCP 拥塞控制的步骤?

  1. 慢启动:在连接建立初期,快速增加拥塞窗口,探测网络拥塞情况。

  2. 拥塞避免:当拥塞窗口达到慢启动阈值后,按线性增长拥塞窗口,避免快速增加发送窗口导致网络拥塞。

  3. 快速重传:在检测到数据丢失时,快速重传丢失的数据段,而不是等待超时。

  4. 快速恢复:在快速重传后,调整拥塞窗口大小,恢复数据传输。

  5. 拥塞发生:当检测到网络拥塞时,调整拥塞窗口大小,减少发送速率。

  6. 动态调整:根据网络的动态情况,不断调整拥塞窗口大小,优化性能。

Cookie、Session、Token 之间有什么区别?

td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}
特性 Cookie Session Token
存储位置 客户端浏览器 服务器端 客户端(localStorage/sessionStorage)
用途 存储用户偏好设置、会话信息 管理会话数据、用户登录状态 身份验证、授权
安全性 明文存储,易被窃取 存储在服务器端,相对安全 无状态,签名验证
限制 每个域名20个,每个4KB 占用服务器资源,会话过期或重启丢失 Token较大,需设置有效期和刷新机制
状态管理 有状态,依赖Cookie 有状态,依赖Session ID 无状态,不依赖服务器存储
跨域支持 不支持跨域 不支持跨域 支持跨域
示例代码 document.cookie session_start() localStorage.setItem()

JWT Token(JSON Web Token)详解

  1. 定义

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用之间安全地传递信息。它是一种紧凑且自包含的JSON对象,能够被验证和信任,因为它是经过数字签名的。

  1. JWT的结构

JWT由三部分组成,以点(.)分隔:

  1. Header(头部):包含令牌类型(typ)和使用的签名算法(alg),例如:

    {"alg": "HS256","typ": "JWT"
    }
    
  2. Payload(负载):包含声明(claims),即实际传递的数据。声明分为三种类型:

    1. 注册声明:预定义的声明,如iss(发行者)、exp(过期时间)、sub(主题)等。

    2. 公共声明:可以由使用JWT的各方自定义。

    3. 私有声明:用于在使用JWT的各方之间共享信息的自定义声明。

    例如:

    {"sub": "1234567890","name": "John Doe","iat": 1516239022,"exp": 1516242622
    }
    
  3. Signature(签名):用于验证消息的完整性和来源。签名的计算方式如下:

    HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret
    )
    

    其中secret是一个私钥,只有服务器知道。

  4. JWT的工作原理

    1. 生成Token

      1. 用户通过用户名和密码向服务器发送身份验证请求。

      2. 服务器验证用户的凭据,生成JWT,并将其返回给用户。

    2. 存储Token

      1. 客户端接收到JWT后,通常将其存储在本地(如LocalStorage或SessionStorage)。
    3. 发送Token

      1. 客户端在后续请求中将JWT放在HTTP请求头的Authorization字段中,格式为Bearer <token>
    4. 验证Token

      1. 服务器接收到请求后,提取JWT并验证其签名的完整性。

      2. 检查负载中的声明,确保令牌未过期、发行者可信等。

  5. JWT的应用场景

JWT最典型的应用场景是登录认证

  1. 用户登录:用户通过用户名和密码请求登录。

  2. 服务器验证:服务器验证用户凭证,如果有效,生成JWT。

  3. 客户端存储:客户端接收到JWT后,存储在本地。

  4. 后续请求:客户端在每个请求中携带JWT,服务器验证JWT的有效性后处理请求。

此外,JWT还适用于信息传递,例如在分布式系统和微服务架构中,JWT可以作为用户身份认证的核心机制。

  1. JWT的优点与缺点
  • 优点

    • 无状态:服务器不需要存储会话信息,降低了服务器的负载。

    • 跨域支持:可以在不同域的系统之间轻松传递。

    • 自包含:包含了所有必要的用户信息,减少了数据库查询。

    • 安全性:签名确保了信息不被篡改。

  • 缺点

    • 令牌大小:JWT可能包含大量信息,导致令牌体积增大。

    • 无法撤销:一旦签发,在过期前无法轻易撤销。

    • 安全存储:客户端存储令牌的安全性问题。

  1. 最佳实践

    1. 合理设置过期时间:短期令牌用于正常访问,长期刷新令牌用于获取新的访问令牌。

    2. 实现令牌刷新机制:通过刷新令牌获取新的访问令牌。

    3. 使用HTTPS:始终通过HTTPS传输JWT,防止令牌被窃取。

    4. 最小权限原则:JWT中仅包含必要的信息,避免敏感数据。

JWT作为一种高效、安全的身份验证和信息传递机制,在现代Web开发中得到了广泛应用。

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

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

相关文章

4.1日报

今天完善了那个多条件查询 虽然没有做成知网那么高级的 但是查询功能已经很完善// 1. 政策标题精确查询(可根据需求改为like模糊查询)if (StringUtils.hasText(policyTitle)) {queryWrapper.like(Policy::getName, policyTitle);}// 2. 政策内容全文检索if (StringUtils.hasT…

MCP (Model Context Protocol)初体验:企业数据与大模型融合初探

简介 模型上下文协议(Model Context Protocol,简称MCP)是一种创新的开放标准协议,旨在解决大语言模型(LLM)与外部数据和工具之间的连接问题。它为AI应用提供了一种统一、标准化的方式来访问和处理实时数据,使模型不再局限于训练时获得的静态知识。 MCP由Anthropic首次提…

Redis高级篇-多级缓存

Redis高级篇-多级缓存Redis高级篇-多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存…

Redis安装说明

Redis安装说明Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:https://redis.io/ 1.单机安装Redis 1.1.安装Redis依赖…

Redis入门篇

Redis入门篇基础篇Redis 开篇导读 理想课程 小伙伴们理想的课程一定是能够通过讲解的方式,得到如下这些启发,我们的课程会从基础到精通,从redis小白,到redis大牛,还在等什么,这套课程一定就是你最适合你的课程~1.Redis简单介绍 Redis是一种键值型的NoSql数据库,这里有两…

安装Canal

安装Canal安装和配置Canal 下面我们就开启mysql的主从同步机制,让Canal来模拟salve 1.开启MySQL主从 Canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。 这里以之前用Docker运行的mysql为例: 1.1.开启binlog 打开mysql容器挂载的日志文件,我的在/tmp/…

团队项目

项目 内容这个作业属于哪个课程 软件工程这个作业要求在哪里 作业要求这个作业的目标 学习团队项目协作开发过程🚀团队展示 一、团队组成 队名:404 Not Found 成员组成:姓名 学号周戈 3123004164张荣辉 3123004162杨超民 3123004161饶博勋 3123004152李永胜 3123004148陈曦…

XN2025 集训记录 D11

那是家 , 是雪花飘飘的黑夜里沉默的足迹 , 是背后路灯的鹅黄色的光 . 只不过这个冬夜虽然温暖 , 前面的路还在等待 .XN2025 集训记录 D11 今天就进入四月份了啊 ... 回顾这一个月 , 应该总还是是有一定的进步的 , 当然这个东西比较不可量化 . 感觉上模拟赛的思路是对的 , 不用担…

20244208 2024-2025-2 《Python程序设计》实验二报告

20244208 2024-2025-2 《Python程序设计》实验二报告 课程:《Python程序设计》 班级: 2442 姓名: 王子骞 学号:20244208 实验教师:王志强 实验日期:2025年4月1日 必修/选修: 专选课 1.实验内容 设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。 考核…

a16z合伙人:语音交互将成为AI应用公司最强大的突破口之一,巨头们在B2C市场已落后太多丨Voice Agent 学习笔记

如果你愿意花些时间调研语音 AI 行业,大概率会碰到 Olivia Moore。她主笔了两次 a16z 关于语音 AI 行业的 分析报告 ,投资的语音项目如 ElevenLabs、Sesame 等都是行业明星。这次播客访谈中,她和 a16z 另外一位合伙人 Anish Acharya 分享了他们对语音 AI 市场的最新观察和分…

20244226 实验二《Python程序设计》实验报告

20244226 2024-2025-2 《Python程序设计》实验2报告 课程:《Python程序设计》 班级: 2442 姓名: 张毓格 学号:20244226 实验教师:王志强 实验日期:2025年4月1日 必修/选修: 公选课 1.实验内容 (1)设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善;…