美文网首页
HTTP 和 Socket 的区别

HTTP 和 Socket 的区别

作者: stormfu | 来源:发表于2018-02-05 11:19 被阅读0次

    要弄明白 http 和 socket 首先要熟悉网络七层:物 数 网 传 会 表 应,如图1

    图一

    HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据.

    TCP/UDP 协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。

    IP 协议:对应于网络层,同样解决数据在网络中的传输。

    传输数据的时候只使用 TCP/IP 协议(传输层),如果没有应用层来识别数据内容,传输后的协议都是无用的。

    应用层协议很多 FTP,HTTP,TELNET等,可以自己定义应用层协议。

    web 使用 HTTP 作传输层协议,以封装 HTTP 文本信息,然后使用 TCP/IP 做传输层协议,将数据发送到网络上。

    一、HTTP 协议

    http 为短连接:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接,因此为短连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。

    HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。

    HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

    HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

    1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

    2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

    由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

    二、Socket 连接

    要想明白 Socket,必须要理解 TCP 连接。

    Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。

    创建 Socket 连接的时候,可以指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之。

    手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。

    建立一个TCP连接需要经过“三次握手”,具体如下:

    第一次握手:客户端发送请求包到服务器,等待服务器确认

    第二次握手:服务器响应客户端请求,同时也发送一个回应包给客户端

    第三次握手:客户端收到服务器的回应包后,向服务器发送确认包

    握手过程中传送的包里,不包含数据,三次握手完毕后,客户端与服务端才正式的开始传递数据。

    TCP一旦连接起来,在客户端和服务端任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

    断开连接时,服务器和客户端都可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”

    握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP

    连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)

    Socket 原理

    Socket 连接,至少需要一对套接字,分为 clientSocket,serverSocket 连接分为3个步骤:

    (1) 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态,实时监控网络状态,等待客户端的连接请求。

    (2) 客户端请求:客户端的套接字要描述它要连接的服务器的套接字,提供地址和端口号,然后向服务器套接字提出连接请求;

    (3) 连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式建立连接。而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.

    Socket为长连接:通常情况下Socket 连接就是 TCP 连接,因此 Socket 连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接。在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接,因此要通过轮询高速网络,该节点处于活跃状态。

    很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步。

    若双方是 Socket 连接,可以由服务器直接向客户端发送数据。

    若双方是 HTTP 连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。

    因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。

    相关文章

      网友评论

          本文标题:HTTP 和 Socket 的区别

          本文链接:https://www.haomeiwen.com/subject/evybzxtx.html