http协议篇

什么是HTTP协议?

HTTP 协议,全称超文本传输协议,是一个无状态协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。HTTP 是应用层协议,它以TCP(http 3之前)作为底层协议,http 3开始采用UDP协议。

什么是 TCP协议?什么是 UDP 协议?

TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢。需要三次握手和四次挥手。

UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施控制。适用于实时应用,例如:IP电话、视频会议、直播等,以报文的方式传输,效率高

TCP 的头部格式?

在这里插入图片描述

  1. 序列号:在初次建立连接的时候,客户端和服务端都会为「本次的连接」随机初始化一个序列号。(纵观整个TCP流程中,序列号可以用来解决网络包乱序的问题
  2. 确认号:该字段表示「接收端」告诉「发送端」对上一个数据包已经成功接收(确认号可以⽤来解决网络包丢失的问题
  3. 标记位就很好理解啦。SYN为1时,表示希望创建连接。ACK为1时,确认号字段有效。FIN为1时,表示希望断开连接。RST为1时,表示TCP连接出现异常,需要断开。

什么是三次握手?

TCP三次握手的过程其实就是在:确认通信双方(客户端和服务端)的序列号
请添加图片描述
过程
请添加图片描述

  1. 首先一开始客户端和服务端都处于close,服务的监听端口,于是处于listen状态。
  2. 客服端要发起请求,于是初始化序列号(client_isn),标志位设为SYN,然后把报文发送给服务端,进入syn_send状态;
  3. 服务端收到请求,也初始化序列号(server_isn),将确认号设为client_isn+1,并且把 SYN 和 ACK 设为1。然后把报文发送给客户端,进入SYN-REVD状态;
  4. 客户端收到后,将确认号改为server_isn+1,并把ack设为1。客户端在发送报文之后,进入established状态
  5. 服务端收到后,也进入established状态,此后就可通信了。

总结:就好比初次见面打招呼:
who are you(syn)? Im find,think you,and you(syn+ack)? Im find too(ack).

那两次握手行吗?

由上图可知,如果只有两次,只能确保服务端收到了客户端的序列号,但是不知道客户端是否收到,所以不行。

既然网络是不可靠的,那要是在中途丢了,怎么办?

前面两次,如何丢包,在一定时间内会重发。

最后一次,客户端已经就绪,如果丢包,下一次会将数据和ack一起发过去。

什么是四次挥手?

四次挥手就是确认断开的过程,可由任意一方发起。

请添加图片描述

过程

  1. 客户端需要断开时,将FIN设为1,发送报文给服务的,将进入FIN_WAIT_1状态;
  2. 服务的收到请求后,回复ACK报文,之后服务端进入CLOSE_WAIT状态;
  3. 客户端收到后,进入FIN_WAIT_2状态;
  4. 这时,如果服务端还是数据就接着传,没有就发送FIN给客户端,然后进入LAST_ACK状态;
  5. 客户端收到后,回应ACK报文,自己进入 TIME_WAIT 状态。
  6. 服务端收到客户端的ACK报文之后,服务端就进入 CLOSE 状态
  7. 客户端在TIME_WAIT等到2MSL,也进入了 CLOSE 状态。

TIME_WAIT 状态,你知道这个状态干什么用的吗?(等待 2MSL)

主要有两个原因

  1. 保证最后的 ACK 报文 「接收方」一定能收到(如果收不到,对方会 重发 FIN 报文)
  2. 确保在创建新连接时,先前网络中残余的数据都丢失了

总结:就好比离职。给领导说你要离职(FIN),领导收到后,回复你好的(ACK)。然后领导可能找你谈话(…),如果没有想谈的,他就说尊重你的决定(fin)。你就会回复感谢领导(ACK)。然后你就等到手上没事了就可以走了。

HTTP各个版本之间的区别?

请添加图片描述

  1. HTTP1.0 默认是短连接,每次与服务器交互,都需要新开一个连接
  2. HTTP1.1 最主要的是「默认持久连接」只要客户端服务端没有断开TCP连接,就一直保持连接,可以发送多次HTTP请求。其次就是断点续传(Chunked transfer-coding)。利用HTTP消息头使用分块传输编码,将实体主体分块进行传输
  3. HTTP2 不再以文本的方式传输,采用二进制分帧层,对头部进行了压缩,支持流控,最主要就是HTTP/2是支持多路复用的(通过单一的TCP连接「并行」发起多个的请求和响应消息)
  4. HTTP3 跟前面版本最大的区别就是:HTTP1.x和HTTP2底层都是TCP,而HTTP3底层是UDP。使用HTTP3能够减少RTT「往返时延」(TCP三次握手,TLS握手)

管线化和多路复用有什么区别?

HTTP1.1提出的「管线化」只能「串行」(一个响应必须完全返回后,下一个请求才会开始传输)

TTP/2多路复用则是利用「分帧」数据流,把HTTP协议分解为「互不依赖」的帧(为每个帧「标序」发送,接收回来的时候按序重组),进而可以「乱序」发送避免「一定程度上」的队首阻塞问题

什么是HTTPS?

HTTPS是「安全」的HTTP协议(客户端与服务端的传输链路中进行加密)。HTTPS 是基于 HTTP 的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号是 443.

注:SSL 指安全套接字协议(Secure Sockets Layer)在 1999 年,SSL 3.0 进一步升级,新版本被命名为 TLS 1.0

HTTPS的过程?

HTTPS首先要解决的是:认证的问题

客户端是需要确切地知道服务端是不是「真实」,所以在HTTPS中会有一个角色:CA(公信机构)

服务端在使用HTTPS前,需要去认证的CA机构申请一份「数字证书」。数字证书里包含有证书持有者、证书有效期、服务器公钥等信息,CA机构也有自己的一份公私钥,在发布数字证书之前,会用自己的「私钥」对这份数字证书进行加密。等到客户端请求服务器的时候,服务端返回证书给客户端。客户端用CA的公钥对证书解密(因为CA是公信机构,会内置到浏览器或操作系统中,所以客户端会有公钥)。

这个时候,客户端会判断这个「证书是否可信/有无被篡改」,私钥加密,公钥解密我们叫做「数字签名」(这种方式可以查看有无被篡改),到这里,就解决了「认证」的问题,至少客户端能保证是在跟「真实的服务器」进行通信(非对称加密)。

其次就要解决保密问题,如何确保客户端与服务器的通讯内容在传输中不会泄露给第三方。

客户端从CA拿到数字证书后,就能拿到服务端的公钥。客户端生成一个Key作为「对称加密」的秘钥,用服务端的「公钥加密」传给服务端,服务端用自己的「私钥解密」客户端的数据,得到对称加密的秘钥,之后客户端与服务端就可以使用「对称加密的秘钥」愉快地发送和接收消息。(对称加密)
在这里插入图片描述

四层协议与七层协议?

7层是指OSI七层协议模型,主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。

4层是指TCP/IP四层模型,主要包括:应用层、运输层、网际层和网络接口层。

4层协议和对应的标准7层协议的关系如下图:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值