首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >懵逼的HTTP、Socket与TCP

懵逼的HTTP、Socket与TCP

作者头像
YungFan
发布2018-04-24 15:20:12
8050
发布2018-04-24 15:20:12
举报
文章被收录于专栏:学海无涯学海无涯

HTTP、Socket、TCP这三个概念在网络开发中经常被提及,也是比较容易被混淆的概念,这三者在TCP/IP协议族中的位置关系:

三者的位置关系.png

其中,HTTP是应用层的协议,也是开发中最常用的一个网络协议;TCP是传输层的协议,大学学过计算机网络的都知道,该层还有一个UDP协议;而Socket是从传输层上抽象出来的,采用IP地址加端口号的形式来标识,并不是传统意义上的网络协议,所以从协议簇来说,三者还是很好区分的。那么HTTP连接、TCP连接、Socket连接有什么区别?

1、TCP连接与HTTP连接

在网络分层中,HTTP协议是基于TCP协议的,客户端向服务端发送一个HTTP请求时,需要先与服务端建立TCP连接,也就是经典的三次握手(通常对用户来说是很难察觉的),握手成功以后才能进行数据交互。HTTP是基于请求响应模式且无状态的协议,1.1之前只支持短连接,也就是请求响应一次以后连接中断,下次请求需要重新进行TCP连接,而1.1之后支持持长连接,即进行一次TCP连接以后,客户端可以发送多次的HTTP请求给服务器端。

小结:HTTP基于TCP

2、TCP连接与Socket连接

Socket是应用层与传输层之间的同一个抽象层,它是一套接口,所以Socket连接可以基于TCP连接,也有可能基于UDP。我们知道,TCP协议是可靠的,UDP协议是不可靠的,那么基于TCP协议的Socket连接同样是可靠的;基于UDP协议的Socket连接是不可靠的,大多数的即时通讯工具都是基于后者实现的。

小结:Socket可基于TCP,亦可UDP

3、HTTP连接与Socket连接

HTTP 1.1之前是短连接,基于TCP协议的Socket连接是长连接,虽然HTTP1.1开始支持长连接,但不像Socket连接一旦建立,除非一方主动断开,否则连接状态一直保持。(网友ttdevs向我补充:基于TCP的Socket可能是短连接,也可能是长连接,长连接可能需要通过心跳等一些手段来维持,各自有不同的应用场景。而不是简单的"基于TCP协议的Socket连接是长连接"。后在网上查找了相关资料,有这么一句:"在TCP连接保持期间,如果没有数据包发送,定时发送数据包(心跳),以维持连接状态。"因为我自己没做过这块的具体工作,如果有大神可以详解,欢迎指正! )

HTTP连接中,只有客户端发起请求后服务端才会响应,服务端是无法主动向客户端发消息的。而Socket连接中,通信双方发送消息并没有先后的限制,通信双方中的任何一方可以随时向另一方发送消息。

4、HTTP Or Socket?

用HTTP:双方不需要时刻保持连接,客户端只是通过一个个HTTP请求来获取服务器的特定资源。如通过get/post请求获取网页、图片、JSON或者XML数据,还有常用的文件上传、小文件下载等。

用Socket:大部分即时通讯应用(知乎上说QQ有部分功能是基于TCP,因为TCP每次都需要三次握手,虽然可靠但是网络不好的时候就惨了)、聊天室(基于UDP+消息广播的方式)、大文件传输等。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.07.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、TCP连接与HTTP连接
  • 2、TCP连接与Socket连接
  • 3、HTTP连接与Socket连接
  • 4、HTTP Or Socket?
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕和内容审核等能力。适用于直播互动、电商带货、客服咨询、社交沟通、在线课程、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档