SOCKET、TCP、HTTP之间的区别与联系


SOCKET、TCP、HTTP之间的区别与联系
(1)什么是socket
1.套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
2.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。(其实就是bind绑定)
(2)为什么需要socket
应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。
为了区别不同的应用程序进程和连接,计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。【服务端利用多进程或多线程连接多个应用程序】
应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
(3)socket分类
SOCK_STREAM,流式套接字,用于TCP
SOCK_DGRAM,数据报套接字,用于UDP
SOCK_RAW,原始套接字,对于其他层次的协议操作时需要使用这个类型
HTTP
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
(2)HTTP连接的特点
连接请求:一次连接。HTTP连接最显著的特点是客户端发送的每次请求服务器都需要回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为一次连接
连接请求:短连接(注意:socket是长连接)由于HTTP在每次请求结束后服务端都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,客户端需要向服务器不断地发起连接请求。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
TCP
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。
注意:TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
HTTP、Socket、TCP的联系
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),例如当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
从程序员的层面上来说:socket则是对TCP/IP协议的封装和应用。socket是封装好的接口,便于程序员调用。
SOCKET与HTTP
一、长连接与短连接
Socket是长连接:由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开,这称为长连接(socket会自动向服务端发送心跳包吧,这样可一直保持连接)。
HTTP是短连接:HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。【发送请求 -> 回复 -> 断开】,这称为短连接。
二、保持数据的实时同步
(1)此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;
在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
(2)若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端。因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。
TCP/IP和HTTP协议
TPC/IP协议是传输层协议,主要解决数据在网络中如何传输,而HTTP是应用层协议,主要解决如何包装数据。
“我们在传输数据时,可以只使用(传输层)TCP/IP协议,双方就能收发数据,但是无法解析数据;如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,HTTP协议解决了浏览器和服务器之间通讯协议的数据格式解析;,应用层协议有很多,比如HTTP、FTP、TELNET等。


文章作者: sinksank
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 sinksank !
评论
  目录