从问题出发,可以帮助我们更好地理解晦涩的概念。很多人都知道http协议是在Tcp协议的基础上创建的一种使用文本传输(非二进制传输)的应用层协议。TPC/IP协议是传输层协议,主要解决数据在网络中如何传输。应用层协议,主要解决如何对数据进行打包和标准化。不经过应用层协议就不能传输数据吗?当然你也可以只用(传输层)TCP/IP协议,但是就像你写了一堆字,但是你没有按照语法写。即使别人看到你的文章,也不知道你想表达什么,应用层协议就相当于语言中的语法。应用层协议有很多,如HTTP(超文本传输??协议)、FTP(文件传输协议)、TELNET(远程登录协议)、SMTP(邮件传输协议)等,现代浏览器默认支持http协议,还有也是专门为http协议定制的http服务器。你也可以自己定义应用层协议,但是所有支撑的东西都得自己重新造轮子。在TCP/IP协议中,为了提供可靠的连接服务,需要三次握手来建立可靠的连接。为什么需要三次握手才能建立可靠连接?客户端发起,服务器响应。不是两次握手就可以建立连接了吗?假设没有第三次握手,客户端发送连接请求A,由于网络原因,服务端收不到A,于是客户端再次发送连接请求B,建立连接,完成通信,断开连接。这时服务器突然又收到了A,所以认为是新的连接请求,进行第二次握手。由于没有第三次握手,此时TCP连接已经建立。但实际上,客户端并没有发起连接,所以不会传输数据,但是服务端一直在等待客户端发送数据,那么这个连接就会变成死连接,造成大量的资源浪费。所以,第三次握手的必要性:防止无效的请求段突然传给服务器,造成误判连接。断开一个TCP连接时,客户端和服务端一共需要发送4个数据包来确认断开连接,即挥手四次确认断开一个连接。为什么它挥手四次?客户端发起,服务端响应,加上上面说的确认,三次即可完成。TCP协议是一种全双工协议,这意味着双方可以同时向对方发送或接收数据。当一方要关闭连接时,它会发送命令通知另一方我要关闭连接。这时对方会返回一个ACK,一个方向的连接此时关闭(此时挥手两次)。但是另一个方向仍然可以继续传输数据。数据全部发送完后,会在这个方向发送一个FIN报文段关闭连接,接收方会发送ACK确认关闭连接(此时挥手4次)。最后,我们看一下通信领域的全双工、半双工、单工的常见概念:发送时也可以接收。两者都相当于两条平行双向传输信号线。HTTP1.0是一种遵循请求-响应模式的半双工协议,即数据可以在客户端和服务器的两个方向上传输,但不能同时传输。意思是同时数据传输只有一个方向,每根连接线相当于只有一根信号线可以双向传输。http1.1也是半双工协议,依然遵循请求-响应模式,但是引入了管道机制,建立长连接和多路复用,可以一个接一个发送多个http请求,无需等待回复,一个一个回复按顺序逐一。但是,客户端在收到所有先前请求的响应之前将阻塞后续请求(队列等待)。例如,谷歌浏览器允许同一域名下最多同时有6个并发请求。如果这6个请求都没有响应,会导致后面的所有请求都被阻塞。http2.0(冷门)是全双工协议,依然遵循请求-响应模型,但是客户端发送多个请求,服务器给出多个响应的顺序不受限制,避免了拥塞,可以让更多的人得到响应快速地。多路复用同一个TCP连接时,服务端同时(或先后)收到A和B的两个请求,先响应A的请求,但由于处理过程非常耗时,所以发送处理完的部分A请求,然后响应B请求完成后,发送A请求的其余部分。长连接是指一个TCP连接建立后,可以连续发送多个数据包。在TCP连接维持期间,如果没有数据包发送,双方都需要发送检测包来维持连接。一般需要自行在线维护。连接建立后,在断开之前,后续的每个交互数据包都不需要经过三次握手和四次挥手过程。公共头信息中的连接:keep-alive短连接是指当通信双方有数据交互时,建立一个TCP连接,发送完数据后,断开TCP连接,每次交换数据都需要摇一摇并且挥手流程繁琐,大部分银行都采用短连接。公共头信息中的连接:close
