总结出来的HTTP&HTTPS协议

    科技2025-05-07  15

    前言 & 初衷

    希望能对后面面试前端工程师实习生这一岗位的小伙伴们有所帮助,也希望自己能在这次总结中能力有所提升。

    了解一下TCP/IP协议

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

    HTTP协议是构建在TCP/IP协议之上的,是TCP/IP协议的一个子集,所以要理解HTTP协议,有必要先了解下TCP/IP协议相关的知识。 由于TCP/IP协议族包含众多的协议,在这里我们无法一一讨论。接下来,我们仅介绍理解HTTP协议需要掌握的TCP/IP协议族的一些相关知识点。如果想深入理解TCP/IP协议,可以参考经典书籍《TCP/IP详解》。

    TCP的三次握手

    客户端和服务端都需要直到各自可收发,因此需要TCP的三次握手。从图片可以得到三次握手可以简化为:A发起请求连接B确认,也发起连接A确认我们再看看每次握手的作用:第一次握手:B只可以确认自己可以接受A发送的报文段、:SYN=1的报文段不能携带数据,但消耗一个序号第二次握手:A可以确认 B收到了自己发送的报文段,并且可以确认 自己可以接受B发送的报文段、:二次握手时分配服务器端的资源第三次握手:B可以确认A收到了自己发送的报文段:ACK报文段可以携带数据,不携带数据则不消耗序号。三次握手时分配客户端的资源SYN洪泛攻击: SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。防范SYN攻击措施:降低主机的等待时间使主机尽快的释放半连接的占用,短时间受到某IP的重复SYN则丢弃后续请求。

    TCP的四次挥手

    客户端主动要求断开连接,服务端把要发送的数据发送完,被动关闭连接,所以需要四次挥手第一次挥手:A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u)第二次挥手:B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v)第三次挥手:B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1)第四次挥手A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1)

    TCP和UDP的区别

    TCP是面向连接的,UDP是无连接的即发送数据前不需要先建立链接。TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;并且因为tcp可靠,面向连接,不会丢失数据因此适合大数据量的交换。UDP尽最大努力交付,即不保证可靠交付。TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP电话和视频会议等)。TCP只能是1对1的,UDP支持1对1,1对多。TCP的首部较大为20字节,而UDP只有8字节。TCP是面向连接的可靠性传输,而UDP是不可靠的。

    TCP协议为什么可靠?

    TCP是面向连接的,TCP通过三次握手的方式建立连接,并且有ACK机制保证传输的可靠性。添加笔者微信,回复:HTTP,可以获取更多笔者整理的HTTP面试干货。

    ACK机制

    由于通信过程的不可靠性,传输的数据不可避免的会出现丢失、延迟、错误、重复等各种状况,TCP协议为解决这些问题设计了一系列机制。 这个机制的核心,就是发送方向接收方发送数据后,接收方要向发送方发送ACK(回执)。如果发送方没接收到正确的ACK,就会重新发送数据直到接收到ACK为止。

    比如:发送方发送的数据序号是seq,那么接收方会发送seq + 1作为ACK,这样发送方就知道接下来要发送序号为seq + 1的数据给接收方了。

     

     

    添加笔者微信,回复:HTTP,可以获取更多笔者整理的HTTP面试干货。

    我们来看看在不同的异常情况下,ACK机制是怎么工作的:

     

    数据丢失或延迟。发送方发送数据seq时会同时起一个定时器,如果在指定时间内没有接收到ACK seq + 1,就把数据seq再发一次。(重传策略)数据乱序。接收方上一个收到的正确数据是seq + 4,它返回seq + 5作为ACK。这时候它收到了seq + 7,因为顺序错了,所以接收方会再次返回seq + 5给发送方。数据错误。每一个TCP数据都会带着数据的校验和。接收方收到数据seq + 3以后会先对校验和进行验证。如果结果不对,则发送ACK seq + 3,让发送方重新发送数据。(校验策略)数据重复。接收方直接丢弃重复的数据即可。

    ACK机制的优化

    流量控制(滑动窗口机制)

    数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。 利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。

     

     

     

    堵塞控制(慢启动机制)

    拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。 流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收

    拥塞控制的算法

    我们假定: 数据单方向传送,而另外一个方向只传送确认。 接收方总是有足够大的缓存空间,因为发送窗口的大小由网络的拥塞程度来决定。

    发送方的发送窗口的上限值应当取为接收方窗口rwnd和拥塞窗口cwnd这两个变量中较小的一个,即发送窗口的上限值为Min[rwnd, cwnd]

    当rwnd < cwnd时,是接收方的接收能力限制发送窗口的最大值 当cwnd < rwnd时,则是网络的拥塞限制发送窗口的最大值

    拥塞控制的过程一共涉及了4种算法: 慢启动 拥塞避免 快重传 快恢复 本文只介绍其中一种算法慢启动算法,其他算法各位看官可自行百度。

    慢启动

    发送方维护一个拥塞窗口cwnd的状态变量,拥塞窗口的大小取决于网络的拥塞程度,动态变化。通过逐渐增加cwnd的大小来探测可用的网络容量,防止连接开始时采用不合适的发送量导致网络拥塞。 当主机开始发送数据时,如果通过较大的发送窗口立即将全部数据字节都注入到网络中,由于不清楚网络状况,有可能引起网络拥塞。较好的方法是试探,从小到大逐渐增大发送端拥塞窗口的cwnd数值。

    例如:开始发送方先设置cwnd=1,发送第一个报文段M1,接收方接收到M1后,ACK返回给发送端,发送端将cwnd增加到2,接着发送方发送M2,再次接受到ACK后将cwnd增加到4...慢启动算法每经过一个传输轮次,拥塞窗口cwnd就加倍。添加笔者微信,回复:HTTP,可以获取更多笔者整理的HTTP面试干货。

    HTTP && HTTPS协议

    http: 超文本传输协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,HTTP下加入SSL层(SSL协议),HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 https协议的主要作用是:建立一个信息安全通道,来确保数据的传输,确保网站的真实性。

    http 和 https 区别

    http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。https协议需要ca证书,费用较高。使用不同的链接方式,端口也不同,一般而言,http协议的端口为80,https的端口为443

    https协议的工作原理(SSL层原理)

    客户使用https url访问服务器,则要求web 服务器建立ssl链接。web服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),返回或者说传输给客户端。客户端和web服务器端开始协商SSL链接的安全等级,也就是加密等级。客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。web服务器通过自己的私钥解密出会话密钥。web服务器通过会话密钥加密与客户端之间的通信。

    http1.0、http1.1、http2 的区别

    1.在http1.0h协议中,一个Request一个Response,这次http请求就结束了 2.在http1.1中进行了改进,WebSocket有一个connection:Keep-alive,也就是说,在一个http连接中,可以发送多个Request,接收多个Response。 3.http2.0中:

    3.1.允许多路复用:多路复用允许同时通过单一的HTTP/2连接发送多重请求-响应信息。改善了:在http1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞。 3.2.二进制分帧:HTTP2.0会将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码 3.3.首部压缩 3.4.服务器端推送

    讲一下对称加密算法、非对称加密算法

    对称加密算法

    发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。 相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。

     

    非对称加密算法

    接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送方收到公钥后,将待发送数据用公钥加密,发送给接收方。接收方收到数据后,用私钥解密。 在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解。 非对称加密算法的加解密速度低于对称加密算法,但是安全性更高。

     

    但是必须记住,在http1.0和http1.1中一个Request只能对应有一个Response,而且这个Response是被动的,不能主动发起。

    HTTP与TCP/IP、DNS的关系

    如果要说清楚HTTP与TCP/IP、DNS的关系,那就要清楚一次完整的HTTP事务(在浏览器输入地址(url),按下回车后,到看到完整页面之前,发生了什么?)

    我们通过一张图来解释,一共分为六步。

     

     

     

    第一步:DNS域名解析(找到域名对应的IP地址)。 第二步:建立TCP连接(包含三次握手和四次挥手)。 第三步:浏览器发起HTTP请求。 第四步:服务器端解析HTTP请求,处理并响应HTTP请求。浏览器得到html代码。 第五步:浏览器解析html代码,请求资源(如js、css、图片等)。 第六步:浏览器对页面进行渲染,呈现给用户。

     

    常用的状态码

    2XX 成功 200 OK,表示从客户端发来的请求在服务器端被正确处理 204 No content,表示请求成功,但响应报文不含实体的主体部分 206 Partial Content,进行范围请求3XX 重定向 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL 302 found,临时性重定向,表示资源临时被分配了新的 URL 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况 307 temporary redirect,临时重定向,和302含义相同4XX 客户端错误 400 bad request,请求报文存在语法错误 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息 403 forbidden,表示对请求资源的访问被服务器拒绝 404 not found,表示在服务器上没有找到请求的资源5XX 服务器错误 500 internal sever error,表示服务器端在执行请求时发生了错误 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

    总结

    至此有关与http和https的一些基本面试问题算是都列出来了!(各位看官如果喜欢本文的欢迎点赞收藏!你们的鼓励会使我更有动力,当然,如果发现我的总结还有不足之处,欢迎评论指正!)

    Processed: 0.010, SQL: 8