TCP 和 HTTP 协议不在同一层,根本没有可比性!!!
每次提到TCP,大家都可以立刻回答三次握手建立连接,四次挥手断开连接,提到HTTP,大家也可以立刻回答HTTP的主要请求方法有GET, POST, PUT, DELETE, HEAD等,但是一到具体的业务场景分析,我们就开始疑惑,这个连接是用的TCP还是HTTP? 这个连接是可以复用的,还是每次使用都要新建,使用完后立刻断开的?今天我们就更进一步地看一下这两个协议的具体过程,使用场景。
实际上,这两个协议放在一起这么比较,本身就是有问题的。它们所属的分层就是不一样的!!! TCP是传输层协议,HTTP是应用层协议。TCP就像铺设好的马路,HTTP是在马路上面跑的小汽车。当然了,这条路上不但可以跑HTTP这样的小汽车,也可以跑FTP这样的物流专用车,还有各种其他车辆。
网络分层模型
既然说到了分层,咱们先看一下目前实际中常用的网络分层架构。
和我们的生活一样,现在中的样子总是比理想少点什么,我们在计算机网络课本上学到的 OSI 7层参考模型是理想的分层模型,而实际中应用广泛的则是TCP/IP 4层网络分层模型。
数据包在网络中的传输过程大致是这样的,当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。
TCP 是一个工作在传输层的可靠数据传输的服务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。TCP经常被拿来与UDP做比较,UDP不提供复杂的控制机制,它利用 IP 提供面向「无连接」的通信服务。
TCP 和 UDP 区别
- 连接
TCP 是面向连接的传输层协议,传输数据前先要建立连接。 UDP 是不需要连接,即刻传输数据。
- 连接对象
TCP 是一对一的两点服务,即一条连接只有两个端点。 UDP 支持一对一、一对多、多对多的交互通信
- 可靠性
TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。 UDP 是尽最大努力交付,不保证可靠交付数据。
- 拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。 UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
- 首部开销
TCP 首部长度较长,会有一定的开销。 UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
TCP 和 UDP 应用场景
由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
- FTP 文件传输
- HTTP / HTTPS
由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:
- 包总量较少的通信,如 DNS 、SNMP 等
- 视频、音频等多媒体通信
- 广播通信
HTTP
了解了TCP协议之后,我们再来看看HTTP协议。HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。我们之所以容易混淆HTTP与TCP,往往是因为经常听到TCP连接,HTTP连接,但实际上,http连接=以http协议为应用层协议的TCP连接。说到http连接,我们又经常听到长连接和短连接,但其实,tcp连接本身是不分长短的,而是根据使用方式来决定。
http短连接 == 以http协议为应用层协议的,请求一次就断开的TCP连接
http长连接 == 以hhtp协议为应用层协议的,请求多次才断开的TCP连接(主要目的是减少建立TCP连接的次数,节约资源)
HTTP协议目前已经经历了http1.0, http1.1, http2.0的发展,具体的演进过程后续继续总结。
看到这里我们再也不会tcp,http傻傻混一起了吧!