计算机网络高频知识点(二)

news2024/12/27 13:49:06

目录

一、三次握手

二、为什么是三次握手而不是两次握手

三、四次挥手

四、挥手为什么需要四次

五、websocket

1、是什么

2、原理

3、websocket与http的关系

4、特点

六、http结构

七、HTTP头都有哪些字段

八、http1.0和http1.1,还有http2有什么区别

九、https和http有什么区别

十、https的实现原理

十一、indexDB与localStorage的区别

十二、服务端渲染和客户端渲染的区别

十三、JWT(Json Web Token)

十四、tcp 和udp有什么区别

十五、tcp 是如何保证可靠传输的

十六、为什么 TCP 要进行流量控制

十七、TCP 为什么会重传

十八、TCP的四种拥塞控制算法

十九、tcp 的四元组、五元组、七元组


一、三次握手

指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。

刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。

第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。

第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号 ISN(s)。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。

第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。

二、为什么是三次握手而不是两次握手

三次握手才能确认双方的接收与发送能力是否正常,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。

三、四次挥手

建立一个连接需要三次握手,而终止一个连接要经过四次挥手。TCP 连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),客户端或服务端均可主动发起挥手动作。

刚开始双方都处于ESTABLISHED 状态,假如是客户端先发起关闭请求。四次挥手的过程如下:

  • 第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于 FIN_WAIT1 状态。即发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。
  • 第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。即服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。
  • 第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。即服务端没有要向客户端发出的数据,服务端发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),服务端进入LAST_ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态,服务端收到 ACK 报文之后,就处于关闭连接了,处于 CLOSED 状态。即客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。

四、挥手为什么需要四次

因为当服务端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,“你发的FIN报文我收到了”。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四次挥手。

五、websocket

1、是什么

  • WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议
  • 它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
  • Websocket是一个持久化的协议

2、原理

  • websocket约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似tcp的连接,从而方便它们之间的通信
  • 在websocket出现之前,web交互一般是基于http协议的短连接或者长连接
  • websocket是一种全新的协议,不属于http无状态协议,协议名为"ws"

3、websocket与http的关系

相同点:

  1. 都是基于tcp的,都是可靠性传输协议
  2. 都是应用层协议

不同点:

  1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向
  2. WebSocket是需要浏览器和服务器握手进行建立连接的。而http是浏览器发起向服务器的连接,服务器预先并不知道这个连接

 联系:

  • WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的

4、特点

  • 是真正的全双工方式,建立连接后客户端与服务器端是完全平等的,可以互相主动请求。而HTTP长连接基于HTTP,是传统的客户端对服务器发起请求的模式。
  • HTTP长连接中,每次数据交换除了真正的数据部分外,服务器和客户端还要大量交换HTTP header,信息交换效率很低。Websocket协议通过第一个request建立了TCP连接之后,之后交换的数据都不需要发送 HTTP header就能交换数据,这显然和原有的HTTP协议有区别所以它需要对服务器和客户端都进行升级才能实现(主流浏览器都已支持HTML5)

六、http结构

请求行 请求头 空行 请求体

  • 请求行包括 http版本号,url,请求方式
  • 响应行包括版本号,状态码,原因

七、HTTP头都有哪些字段

  • 请求头
    • cache-control 是否使用缓存
    • Connection:keep-alive 与服务器的连接状态
    • Host 主机域
  • 返回头
    • cache-control
    • etag 唯一标识,缓存用的
    • last-modified最后修改时间

八、http1.0和http1.1,还有http2有什么区别

1、Http0.9只支持 get请求

2、http1.0增加了 POST,HEAD,OPTION,PUT,DELETE 等

  • HEAD请求:和get请求差不多,但是没有body,用来检查资源是否有效,不需要消耗更多的带宽去请求这个url
  • OPTION请求:预检请求,判断是否支持跨域(CORS)
  • PUT一般是用来更改资源,post是增加资源

3、http1.1增加了长连接 keep-alive、增加了 host 域、更节约带宽了、还有缓存中的 max-age(之前是 expire)

  • 强缓存在 http1.0用的是Expire, 在1.1中用的是Max-age,为什么换了呢,因为 Expire 记录的是一个时间点,有可能服务端和客户端的时间不一致,后来直接改成了一个时长就完美解决问题了

4、http2.0增加了服务器推送、多路复用、头部压缩、以及更接近二进制了

5、http3.0增加了 QUIC 协议,是基于 udp 来完成建立连接的

九、https和http有什么区别

  • http无状态无连接,而且是明文传输,不安全,默认连接80端口
  • https 是有不可否认性的,可以保证对方身份的真实性,默认端口是443端口,加密传输,而且会保证数据的完整性

十、https的实现原理

  1. 首先客户端向服务端发送一个随机值和一个客户端支持的加密算法,并连接到443端口。
  2. 服务端收到以后,会返回另外一个随机值和一个协商好的加密算法,这个算法是刚才发送的那个算法的子集
  3. 随后服务端会再次发送一个 CA 证书,这个 CA 证书实际上就是一个公钥,包含了一些信息(比如颁发机构和有效时间等)
  4. 客户端收到以后会验证这个 CA 证书,比如验证是否过期,是否有效等等,如果验证未通过,会弹窗报错。
  5. 如果验证成功,会生成一个随机值作为预主密钥,客户端使用刚才两个随机值和这个预主密钥组装成会话密钥;再使用刚才服务端发来的公钥进行加密发送给服务端;这个过程是一个非对称加密(公钥加密,私钥解密)
  6. 服务端收到以后使用私钥解密,随后得到那两个随机值和预主密钥,随后再组装成会话密钥。
  7. 客户端在向服务端发起一条信息,这条信息使用会话秘钥加密,用来验证服务端时候能收到加密的信息
  8. 服务端收到以后使用刚才的会话密钥解密,在返回一个会话密钥加密的信息,双方收到以后 SSL 建立完成;这个过程是对称加密(加密和解密是同一个)
     

十一、indexDB与localStorage的区别

indexDB类似于数据类似于数据库的概念,异步存储,而且支持事务(提供errorabortcomplete三个事件,不会出现失败后只改写了一部分的情况)

十二、服务端渲染和客户端渲染的区别

服务端渲染(SSR Server Site Rendering)

  • 有利于 SEO,首屏加载快,但是重复请求次数多,开发效率低,服务器压力大
  • 渲染的时候返回的是完整的 html 格式
  • 应用场景:可能被搜索到的

客户端渲染(CSR Client Site Rendering)

  • 不利于 SEO,首屏加载慢,前后端分离开发,交互速度快、体验好
  • 渲染的时候返回的是 json 数据格式,由浏览器完成渲染
  • 应用场景:app 内部"嵌套"的 h5页面

十三、JWT(Json Web Token)

在没有 JWT 之前,验证客户端的方式就是通过 token。JWT出现后,可以把 token 保存在客户端。

JWT 相当于把数据转换成 JSON 对象,这个特殊的 JSON 对象分为三部分:头部、负载、签名,他们之间分别用.区分开

  • 头部(header)
    • 保存的是JWT 的元数据,表明所使用的 hash 算法,以 JSON 对象的方式存储,然后转换成 Base64URL 的格式
  • 负载(payload)
    • 也是 JSON 对象格式,用来存放自己的数据
  • 签名(Signature)
    • 确保消息的完整性

十四、tcp 和udp有什么区别

连接方面

  • tcp面向连接,udp不需要连接
  • tcp需要三次握手四次挥手请求连接

可靠性

  • tcp是可靠传输;一旦传输过程中丢包的话会进行重传
  • udp是不可靠传输,但会最大努力交付

工作效率

  • UDP实时性高,比TCP工作效率高
  • 因为不需要建立连接,更不需要复杂的握手挥手以及复杂的算法,也没有重传机制

是否支持多对多

  • TCP是点对点的
  • UDP支持一对一,一对多,多对多

首部大小

  • tcp首部占20字节
  • udp首部占8字节

十五、tcp 是如何保证可靠传输的

  • 校验和

    • 数据传输的过程中,每一个数据段都有一个16位的编号,将这些编号加起来并取反得出一个校验和,看收到后是否和之前的一致
  • 序列号和确认应答

    • 每次发送数据的时候,服务端都会返回一个确认应答以及将要发送的序列号
  • 超时重传、滑动窗口、拥塞控制

十六、为什么 TCP 要进行流量控制

为了解决发送方和接收方的速率不一致问题,如果发送方的速率过快的话,接收方处理不过来,只能放在缓存区,缓存区满了,就只能丢包了。所以需要进行流量控制

十七、TCP 为什么会重传

TCP 传输是一应一答的,如果中间丢包了的话,那么就会处于僵持状态,所以在发送发会设置一个定时器,一段时间(这个时间应该略大于一个发送来回的时间)如果没有收到对方ACK确认的话,就会重新发送数据,这就是超时重传

十八、TCP的四种拥塞控制算法

1.慢开始
2.拥塞控制
3.快重传
4.快恢复

十九、tcp 的四元组、五元组、七元组

  • 四元组:

    • 源 IP地址,目标 ip 地址,源端口,目标端口
  • 五元组:

    • 源 IP 地址,目标 IP 地址,协议号,源端口,目标端口
  • 七元组:

    • 源 IP 地址,目标 IP 地址,协议号,源端口,目标端口,服务类型以及接口索引

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

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

相关文章

同样做软件测试,和月薪30K 的学弟聊了一晚上,我心态崩了...

过去的一年,你攒到钱了吗? 在一条话题为“今年你存了多少钱”的微博下,网友们贡献了近 3000 条“成绩单”,大多数称自己没攒到钱,甚至负债累累。 攒钱,为什么就这么难呢? 工资水平赶不上房价…

TDengine | 03 | TDengine2.4.0监控部署

1 前提条件 1.1 服务 TDengine 集群已经部署并正常运行taosAdapter 已经安装并正常运行TDengine 集群 REST API 地址,如:http://tdengine:6041TDengine 集群认证信息,做监控用的用户名和密码 1.2 版本 Linux : Ubuntu 18.04.5 LTS TDengi…

MySQL主从复制+读写分离详细方案

MySQL主从复制读写分离详细方案一、MySQL主从复制1.1mysql的复制类型1.2mysql主从复制的工作过程1.3MySQL的四种同步方式1.3.1异步复制(Async Replication)1.3.2同步复制(Sync Replication)1.3.3半同步复制(Semi-Sync …

2023上半年软考中/高级报名+学习备考+考试重点

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…

CentOS7.6快速安装Docker

快速安装 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/ 确定你是CentOS7及以上版本,yum是在线安装! [rootVM-4-5-centos ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)接下来您只管自上向下执行命令即可&#x…

阿里云服务器ECS适用于哪些应用场景?

云服务器ECS具有广泛的应用场景,既可以作为Web服务器或者应用服务器单独使用,又可以与其他阿里云服务集成提供丰富的解决方案。 云服务器ECS的典型应用场景包括但不限于本文描述,您可以在使用云服务器ECS的同时发现云计算带来的技术红利。 阿…

【项目】实现对接京东财务余额管理页面

目录需求实现后端京东财务余额Controller京东财务余额Service前端index.vuejdbalance.jsapi/jdbalance.js效果需求 通过调京东财务余额接口,在项目中开发相应管理页面。 实现 后端 因为京东的接口返回值里面已经有分页的参数了,因此会和平常自己写分…

【竞赛/TPU】算能TPU编程竞赛总结

如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【竞赛/TPU】算能TPU编程竞赛总结 1 基础知识 1.1【Ubuntu】 Ubuntu操作系统中有很多不同的文件夹,每个…

论文阅读——FECANet:应用特征增强的上下文感知小样本语义分割网络

代码:NUST-Machine-Intelligence-Laboratory/FECANET (github.com) 文章地址:地址 文章名称:FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 摘要 Few-shot semantic segmentation 是学习…

4年经验之谈,什么是接口测试?怎样做接口测试?

一、什么是接口?【文末学习资源分享】赶紧嫖!冲!!!! 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过…

Nydus 在约苗平台的容器镜像加速实践

文 | 向申 约苗平台运维工程师 关注云原生领域 本文字数 9574阅读时间24分钟 本文是来自向申同学的分享,介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。 Nydus 是蚂蚁集团,阿里云和字节等共建的开源容器镜像加速项目,是 CNCF Dragon…

Spring Boot 3.0系列【3】基础篇之使用Spring Initializr快速创建项目

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录前言安装JDK 17创建Spring Boot 项目方式1:网页在线生成方式2&#…

PyQGIS开发--自动化地图布局案例

前言创建地图布局是 GIS 作业结束时的一项常见任务。 它用于呈现最终结果的输出,作为与用户交流的一种方式,以便从地图中获取信息、知识或见解。 在包括 QGIS 在内的任何 GIS 软件中制作地图布局都非常容易。 但另一方面,当我们必须生成如此大…

centos7上安装mysql8.0

1、检查一下自己电脑上安装了哪些mysql [rootlocalhost ~]# find / -name mysql 2、把安装的mysql全部删掉 [rootlocalhost ~]# rm -rf /usr/lib64/mysql/ [rootlocalhost ~]# rm -rf /usr/local/mysql/ [rootlocalhost ~]# rm -rf /etc/selinux/targeted/active/modules/100…

《Roller: Fast and Efficient Tensor Compilation for Deep Learning》

《Roller: Fast and Efficient Tensor Compilation for Deep Learning》 用于深度学习 快速高效的张量编译器 作者 微软亚洲研究院以及多伦多大学等多所高校 摘要 当前编译为了产生高效的kernel时,搜索空间大,通常使用机器学习的方法 找到最优的方案…

管理逻辑备数据库(Logical Standby Database)

1. SQL Apply架构概述 SQL Apply使用一组后台进程来应用来自主数据库的更改到逻辑备数据库。 在日志挖掘和应用处理中涉及到的不同的进程和它们的功能如下: 在日志挖掘过程中: 1)READER进程从归档redo日志文件或备redo日志文件中读取redo记…

Apache Airflow Provider Sqoop 模块远程代码执行漏洞

漏洞描述 Apache Airflow 是一个以编程方式管理 workflow 的平台,Sqoop 模块用于在 Hadoop 和结构化数据存储(例如关系数据库)之间高效传输大量数据。 apache-airflow-providers-apache-sqoop 3.1.1 之前版本中,由于 SqoopHook …

【ONE·C || 自定义类型:结构体、段位、枚举、联合】

总言 C语言:自定义类型介绍。 文章目录总言1、结构体1.1、结构体声明1.1.1、基本声明方式1.1.2、特殊的声明:不完全声明1.2、结构体自引用1.2.1、结构体自引用说明1.2.2、typdef对结构体重命名1.3、结构体变量的定义和初始化1.4、结构体变量大小计算&…

VMware虚拟机安装Ubuntu(超详细图文教程)

VMware虚拟机安装Ubuntu(超详细图文教程) 1、Ubuntu下载 Ubuntu下载地址:点这里 注:但官网下载比较慢 也可关注公众号Time木回复: ubuntu22 获取 2、打开VMware VMware安装过程:待更新 2.1 创建新的虚…

5个面向开发人员的顶级报表工具

报表工具对有处理大量数据需求的公司至关重要。实际上,报表可以帮助公司实时访问公司资源,同时能够以可读和调整的格式分析和显示数据。本文为大家推荐五种成熟且强大的报表工具,重点介绍它们的功能和优势。 Stimulsoft Stimulsoft主要用于…