Http高级interview

embedded/2024/11/15 8:34:07/
http://www.w3.org/2000/svg" style="display: none;">

https_0">1、Http https区别

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、httphttps使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议>网络协议,比http协议安全。

2、tcp/ip的五层模型:

Http位于TCP/IP模型中的第几层?为什么说Http是可靠的数据传输协议?

HTTP位于TCP/IP模型中的应用层,它是基于TCP协议实现的

从下到上:物理层->数据链路层->网络层->传输层->应用层

其中tcp/ip位于模型中的网络层,处于同一层的还有ICMP(网络控制信息协议)。http位于模型中的应用层

由于tcp/ip是面向连接的可靠协议,而http是在传输层基于tcp/ip协议的,所以说http是可靠的数据传输协议。

3、OSI七层模型

  1. 物理层:负责传输比特流,包括电气、光学和机械接口。
  2. 数据链路层:负责在直接相连的节点之间传输数据帧,并提供物理地址寻址和错误检测等功能。
  3. 网络层:负责在不同网络之间进行路由选择和数据包转发,实现端到端的数据传输。
  4. 传输层:负责提供可靠的端到端数据传输,包括流量控制、拥塞控制和错误恢复等功能。
  5. 会话层:负责建立、管理和终止应用程序之间的会话连接。
  6. 表示层:负责数据的格式化、加密和压缩等操作,以确保不同系统之间的数据交换。
  7. 应用层:提供用户与网络之间的接口,包括各种应用协议,如HTTP、FTP、SMTP等。

这个模型帮助了网络工程师理解和设计网络协议>网络协议和系统,并促进了不同厂商之间的互操作性。

4、TCP和UDP的区别

tcp是面向连接的,由于tcp连接需要三次握手,所以能够最低限度的降低风险,保证连接的可靠性。

udp 是无连接的,udp建立连接前不需要与对象建立连接,无论是发送还是接收,都没有发送确认信号。所以说udp是不可靠的。

由于udp不需要进行确认连接,使得UDP的开销更小,传输速率更高,所以实时行更好。

http请求是在协议哪层上封装的

http是应用层协议,tcp是传输层协议,http本来就是基于传输层协议做的封装。

5、Tcp/IP三次握手,四次挥手

1.第一次握手

客户端向服务端发送连接请求报文段。该报文段的头部中同步SYN=1,确认ACK=0,同时选择一个初始序号seq=x。请求发送后,客户端便进入SYN-SENT状态。

SYN=1,ACK=0表示该报文段为连接请求报文

x为本次TCP通信的字节流的初始序号

TCP规定:SYN=1的报文段不能有数据部分,但要消耗掉一个序号

2.第二次握手

服务端收到连接请求报文段后,如果同意连接,会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。发送完应答后服务端进入SYN-RCVD状态。

SYN=1,ACK=1表示该报文段为连接同意的应答报文

seq=y表示服务端作为发送者时,发送字节流中的第一个字节序号

ack=x+1表示服务端希望客户端发送的下一个数据报初始序号是从x+1开始

3.第三次握手

客户端收到服务端连接同意的应答后,还会向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。该报文段的头部为:ACK=1,seq=x+1,ack=y+1。

客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

四次挥手

1.第一次挥手

客户端数据发送完成,则它向服务端发送连接释放请求。该请求只有报文头,头中携带的主要参数为:FIN=1,seq=u。此时,客户端将进入FIN-WAIT-1状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。

FIN=1表示该报文段是一个连接释放请求

seq=u,u-1是客户端向服务端发送的最后一个字节的序号

2.第二次挥手

服务器收到客户端连接释放报文,通知相应的高层应用进程,告诉它客户端向服务器这个方向的连接已经释放了。

此时服务端进入了CLOSE-WAIT(关闭等待)状态,并向客户端发出连接释放的应答,其报文头包含:ACK=1,ack=u+1,并且带上自己的序列号seq=v。

ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答

seq=v,v是服务端释放应答报文段第一个字节序号

ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节客户端收到该应答后,进入FIN-WAIT-2状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。

第二次挥手完成后,客户端到服务端方向的连接已经释放,服务端不会再接收客户端的数据,客户端也没有数据要发送了。但服务端到客户端方向的连接仍然存在,服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。

3.第三次挥手

服务端将最后的数据发送完毕后,就向客户端发送连接释放报文,其报文头包含:FIN=1,ack=u+1,由于在CLOS-WAIT状态,服务端很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

4.第四次挥手

客户端收到服务器的连接释放报文后,向服务端发出确认应答,报文头:ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。

该状态会持续2MSL(最长报文段寿命)时间,这个期间TCP连接还未释放,若该时间段内没有服务端的重发请求的话,客户端就进入CLOSED状态,撤销TCB。

服务端只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 作者:Xia_燚 https://www.bilibili.com/read/cv17017914 出处:bilibili

6、Http版本演进

  1. HTTP/0.9:最早的版本,仅支持纯文本传输,没有头部信息和请求方法,只能获取HTML格式的文档。

  2. HTTP/1.0:引入了请求头和响应头的概念,支持多种数据类型的传输,每个请求都会建立一个新的连接。

  3. HTTP/1.1:在HTTP/1.0的基础上进行了改进和扩展。新增了持久连接、管道化、分块传输编码等特性,提高了性能和效率。同时,还引入了PUT和DELETE请求方法,用于上传和删除服务器上的资源。

  4. HTTP/2:采用二进制传输格式,引入了多路复用技术,允许同时发送多个请求和响应,提高了并发性能。

  5. HTTP/3:基于UDP协议的QUIC协议,提供更快的连接建立和数据传输速度,具有更好的安全性。


http://www.ppmy.cn/embedded/88341.html

相关文章

记录一个k8s集群zookeeper部署过程

由于网管中心交维要求必须是支持高可用配置,原先单节点的zookeeper不被允许。所以在k8s集群中做了一个高可用版本的zookeeper。 期间有点小波折,官方给的镜像版本太老,业务不支持,所以手动做了下处理,重新打了一个镜像…

SQL labs-SQL注入(三,sqlmap使用)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言: 盲注简述:是在没有回显得情况下采用的注入方式,分为布尔盲注和时间盲注。 布尔盲注:布尔仅有两种形式,ture&#…

【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 引导程序(boot loader)--(十)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

python opencv 绘制多边形 闭合

示例 假设有四个点:(x1, y1), (x2, y2), (x3, y3), (x4, y4)。 不闭合的多边形 如果 isClosed 参数设置为 False,cv2.polylines 将绘制三根线段,连接前三个点,而不会将最后一个点与第一个点连接起来。 python import cv2 impo…

nvidia系列教程-AGX-Orin基础环境搭建

目录 前言 一、Agx-Orin(32GB)介绍 1.1 GPU 1.2 CPU 1.3 NVDLA(NVIDIA Deep Learning Accelerator) 1.4 内存 1.5 存储 二、安装JetPack SDK 三、基础环境配置 四、jetpack软件版本 总结 前言 NVIDIA Jetson AGX Orin 是…

【项目实战】—— 高并发内存池

文章目录 什么是高并发内存池?项目介绍一、项目背景二、项目目标三、核心组件四、关键技术五、应用场景六、项目优势 什么是高并发内存池? 高并发内存池是一种专门设计用于高并发环境下的内存管理机制。它的原型是Google的一个开源项目tcmalloc&#xff…

利用动态规划的思想改进杨辉三角,并进一步优化;c++实现

杨辉三角&#xff08;Pascals Triangle&#xff09;是一个经典的数学问题&#xff0c;也可以用递归算法来生成。下面是一个使用C递归计算杨辉三角指定行列值的代码示例。 普通递归 #include <iostream> using namespace std;// 计算杨辉三角中指定行列的值 int pascal(…

程序员纯粹八股文的危害有哪些,应该如何来解决?

“八股文”这个词在程序员面试的上下文中通常指的是那些被广泛讨论、反复练习的问题和答案&#xff0c;它们往往围绕着一些经典的技术知识点&#xff0c;例如算法、数据结构、设计模式等。这些知识在面试中被频繁提及&#xff0c;以至于应聘者经常会提前准备并背诵这些答案&…