http1到http2有哪些新增和区别
HTTP/1.0版本主要增加了
1,增加了HEAD,POST等方法
2,增加了状态码
3,增加了请求头和响应头
4,引入content-type,传输不在仅限于文本
5,在请求中加入了HTTP版本号
HTTP/1.1版本新增了
1,新增链接管理keepalive,允许持久链接
2,支持pipeline,无需等待上一个请求返回就可以发送下一个请求
3,支持数据分块
4,新增缓存控制和管理
5,加入host头,一台服务器有多个服务,因为ip相同所以需要区分,使用host头就可以确定访问的到底是哪个服务 ,Host:服务器域名+:端口号
HTTP/2.0版本新增了
1,二进制传输,不在是纯文本
2,支持一个TCP链接发送多个请求,移除了pipelin
3,利用HPACK压缩头部,减少数据传输量
4,允许服务端主动推送数据
TCP链接是什么
TCP是一个面向链接的、可靠的数据传输层协议,广泛用于计算机网络中进行数据传输。TCP协议为应用程序提供了可靠的,循序的,无差错的字节流服务。
TCP的特点
面向链接:TCP是一个面向链接的传输协议,也就是在传输之前需要先建立链接,建立链接的方式是通过三次握手,终止链接的方式是四次挥手
可靠性:TCP在传输数据包的过程中如果产生了丢包或者损坏,会重新发送这些包
顺序传输:TCP会按顺序发送数据包,如果数据包顺序错误会重排顺序,这里的顺序是按照应用层传输来自动排列的,是有序但随机的,比如应用层发送“holle word”,TCP传输排序是按照32位排序,上述例子就可以是“holle”排序1000 “word”排序10005,然后按照序列号依次传输。
流量控制:TCP使用流量控制机制来确保发送方发送的数不会超出接收方的处理能力(滑动窗口:这个滑动窗口可以理解为一个入口通道的放大缩小,就像是一个水阀,口越大可以通过的即时水量越多,大概的过程就是,发送方发送一个10K的数据,然后这时候的窗口就是10K,然后接收方接收到后返回一个ack,此时的窗口还是10K,如果接收方的处理能力是10k,则发送方再发送一个5K的数据,检测到接收方不能在处理了,这时候窗口就会变为0,当接收方处理完一部分数据后,释放了内存,并更新窗口5K,然后发送ack包给发送方,发送方接收到通知后重新发送这个5K的数据包)
阻塞控制:在发送过程中,TCP会根据网络和接收方处理能力来调节拥塞控制和流量控制,以避免网络拥塞和数据丢失。
说说三次握手和四次挥手
TCP通过三次握手来和服务端建立连接,
就像串门一样,客户端拿着礼物SYN来服务器串门,服务器收下了礼物并且做了一些修改,换换包装里面塞点自己的东西,然后准备走的时候服务器跟客户端一顿寒暄推让,不只是没收礼甚至还回了礼物表示友好,SYN+ACK,后来两个人又一顿墨迹,最后客户端临走前又把回礼丢给了服务器并且往里面塞了100块钱,变成新的ACK,然后达成了友好联系。
客户端 服务器
|------SYN--------->|
|<-----SYN-ACK-----|
|------ACK--------->|
| <----连接建立成功----|
TCP通过四次挥手来结束链接
就像两口子吵架一样,客户端说这个衣服(FIN)是你买的,还给你,然后服务器说这个玩具熊(ACK)是你买的是你给的还给你,然后客户端更上头了,扯下了内裤(FIN)还给了服务器,服务器也生气了,退回了化妆品(ACK),然后冷战开始。相互不理了。
客户端 服务器
|------FIN--------->|
|<-----ACK---------|
|<-----FIN---------|
|------ACK--------->|
| <----连接关闭成功----|
http2和http3的区别
1,传输层协议不同,http2使用的tcp协议,http使用的是QUIC协议,解决了TCP头部阻塞的问题(一个数据丢失会导致后续所有数据的延迟)
2,链接建立过程和安全性不同,http2使用三次握手达成建立链接,需要额外的TLS握手来加密链接,而http3只一次握手就可以达成链接。
3,性能和效率,http2使用HPACK压缩,减少头部大小,提升效率,http3使用QPACK压缩,进一步优化了压缩体积。效率更高。由于QUIC的特性,在高丢包和网络延迟较高的环境下http3的表现更好。
4,兼容性,http2向后兼容,能够在支持http1.1的环境下使用,http3不向后兼容。
小知识----查看当前网络链接http版本
http和https的区别是什么
1,安全性,http是一个无状态,不加密的协议,也就是说这意味着在客户端和服务器进行数据传输的时候数据都是明文未加密的,容易被篡改或者泄露。https是利用了ssl或者tls加密传输数据。数据传输更安全
2,端口号,http端口号默认是80,https默认是443
3,证书,http不需要证书,https需要CA签发的证书
4,url格式不同,http以 http://
开头,https 以 https://
开头
5,性能,http不需要加密在有些时候可能较快,
6,搜索引擎优化(SEO),搜索引擎更倾向于https协议,所以在搜索的时候排名更靠前一些。
TCP和UDP的区别
1,链接方式,TCP是面向链接的传输协议,传输数据必须通过建立链接传输,UDP是面向报文的传输协议,不需要建立链接,可以直接向目标发送数据。
2,可靠性,TCP是提供可靠传输,在传输过程中数据包不会丢失,丢失了会重新传输,而且数据到达后接收方会重新排序,而UDP是不可靠传输,传输的数据可能丢失,错乱,重复等情况。而且接收方不知道是否已经成功接收
3,数据传输顺序,TCP是有序传输,UDP是无序的
4,流量控制和拥塞控制,tcp可以提供流量控制和拥塞控制,UDP不提供
5,数据包大小,TCP将应用层数据流分割成适合网络传输的数据段,并且为每段添加头部信息,UDP则是每个数据包都是独立单位,包含UDP头部信息。
6,头部开销,tcp的头部开销大,一般为20K,UDP的头部开销小,固定8K
7,应用场景不同,TCP应用web应用,电子邮件,文件传输等,UDP适用于游戏,视频流,通话等。
为什么TCP链接关闭后需要有TIME-WAIT状态
当发送方主动关闭(第四次挥手发送了FIN)后,就会关闭当前链接,因为TCP是面向链接传输数据,可以理解为是一根水管,关闭了水龙头以后如果立马断开当前链接,那么水管内的水就会停留在水管中,而数据传输我们希望的是水管内的水完全流向外面。这个状态主要是用来确保最后的ACK被接收,处理延迟的数据,还有防止端口冲突。
确保ACK被接收和处理延迟数据都可以用水管来说明,也容易想象,这个防止端口冲突说一下,当TCP链接断开后,是不允许在TIME-WAIT状态下再次重用这个源端口号的,防止端口号冲突传输的数据混在一起。这里的端口号说的是发送方的IP端口号。举个例子,我们请求了一个8080的接口,然后关闭了TCP协议,然后很快的重新请求该8080的接口,看似同一个接口我们可以访问,实际上发送端的接口已经重新分配了。
TCP的超时重传机制解决了什么问题
一句话概括,保证了数据完整性,确定接收方可以接收到数据
TCP的滑动窗口的作用是什么
上面也有滑动窗口的说明,作用就是确保不超出接收方处理能力的情况下发送数据过去。