1、Http https区别
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是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七层模型
- 物理层:负责传输比特流,包括电气、光学和机械接口。
- 数据链路层:负责在直接相连的节点之间传输数据帧,并提供物理地址寻址和错误检测等功能。
- 网络层:负责在不同网络之间进行路由选择和数据包转发,实现端到端的数据传输。
- 传输层:负责提供可靠的端到端数据传输,包括流量控制、拥塞控制和错误恢复等功能。
- 会话层:负责建立、管理和终止应用程序之间的会话连接。
- 表示层:负责数据的格式化、加密和压缩等操作,以确保不同系统之间的数据交换。
- 应用层:提供用户与网络之间的接口,包括各种应用协议,如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版本演进
-
HTTP/0.9:最早的版本,仅支持纯文本传输,没有头部信息和请求方法,只能获取HTML格式的文档。
-
HTTP/1.0:引入了请求头和响应头的概念,支持多种数据类型的传输,每个请求都会建立一个新的连接。
-
HTTP/1.1:在HTTP/1.0的基础上进行了改进和扩展。新增了持久连接、管道化、分块传输编码等特性,提高了性能和效率。同时,还引入了PUT和DELETE请求方法,用于上传和删除服务器上的资源。
-
HTTP/2:采用二进制传输格式,引入了多路复用技术,允许同时发送多个请求和响应,提高了并发性能。
-
HTTP/3:基于UDP协议的QUIC协议,提供更快的连接建立和数据传输速度,具有更好的安全性。