http协议和TCP协议 的关系

768 阅读2分钟

传输层协议TCP和UDP

应用层协议HTTP

之间有什么关系?

实际上应用层协议(HTTP)报文就是按照指定格式构建的字符串。通俗来讲,应用层协议规定了如何构建字符串,比如字符串开始和结束,各种分隔符等等。

按照应用层协议构建的字符串添加一个首部,就得到了传输层协议报文。其实首部也是一个字符串,这个字符串是传输层规定的。你可以这么理解:传输层协议规定了传输层的报文应有的结构,其实也是一个字符串,只不过这个字符串包括了应用层的那段字符串 ,同时还有自身规定的按照一定格式拼接的字符串。同时传输层协议规定了该如何传输,比如有连接(tcp)还是无连接(udp)?

目前来说,我们用的http协议貌似都是基于TCP协议实现,因此站在TCP层面来说,他就是有连接的。但是,HTTP协议有一个特性就是他的一次请求对应一次响应,响应完毕,TCP连接就会关闭,这个所谓的TCP连接不可以用来持续传输数据,所以经常听见有人说HTTP是无连接的。

但是,不同HTTP协议似乎有不同的规定,在报文头中可以使用connection:keep-alive来保持传输层的连接,这就是长连接。如果没有connection:keep-alive则为短连接。所谓的长连接和短连接其实是针对TCP协议的,因为这是TCP协议的特性。

总结一下:HTTP本身是无连接的(协议自身规定一次请求一次响应,并且协议对各种交互性场景没有记忆能力),但是他可以通过请求头控制传输层协议的长连接和短链接。

所以回归主题,HTTP只是规定了自身报文结构,并没有规定如何传输。由于他使用TCP协议实现,而TCP协议是有连接的,所以有三次握手四次挥手,和http协议本身并没有关系。

网络分层

三次握手 四次分手

概念:MSL是报文在网络中最长生存时间(Maximum Segment Life)。

场景:
1. A发出ACK后,等待一段时间T,确保如果B重传FIN自己一定能收到

分析:
1. ACK从A到B最多经过1MSL,超过这个时间B会重发FIN
2. B重发的FIN最多经过1MSL到达A

结论:如果B重发了FIN,且网络没有故障(重发的FIN被丢弃或错误转发),那么A一定能在2MSL之内收到该FIN,因此A只需要等待2MSL。