转载请注明出处:https://blog.csdn.net/mythmayor/article/details/123116694
一、Socket简介
1.Socket定义
-
Socket即套接字,是一个对TCP/IP协议进行封装的编程调用接口(API)。
-
Socket不是一种协议,而是一个编程调用接口(API),属于传输层(主要解决数据如何在网络中传输)。
-
Socket总是成对出现的(Socket ={(IP地址1:PORT端口号),(IP地址2:PORT端口号)})
2.Socket类型
- 流套接字(
SOCK_STREAM
):基于TCP
协议,工作在传输层,需要先建立连接,采用流的方式提供可靠的字节流服务,能够保证数据传输的正确性和顺序性,如:Socket。 - 数据报套接字(
SOCK_DGRAM
):基于UDP
协议,工作在传输层,是面向无连接的服务,采用数据报文提供数据打包发送的服务,传输是无序的,并且不保证可靠、无差错,如:DatagramSocket。 - 原始套接字(
SOCK_RAM
):工作在网络层,允许直接访问底层协议,功能强大但使用较为不便,主要用于一些协议的开发。
由下图也可以看出,Socket一般是基于TCP协议或UDP协议。
上图基于计算机网络通信模型,该模型大致可以分为五层:物理层、数据链路层、网络层、传输层、应用层。
扩展1:OSI参考模型,即Open System Interconnection(开放系统互联),该模型共分为七层,由低到高依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。其中,前四层属于低层,负责网络数据传输,后三层属于高层,负责主机之间的数据传输。
扩展2:TCP/IP模型,该模型共分为四层,由低到高依次是网络接口层(链路层)、网络层、传输层、应用层。
说明:一些资料中将计算机网络通信模型分为四层,还有一些资料中将其分为五层。四层模型和五层模型的区别是,四层模型中的网络接口层可以拆分为五层模型中的物理层和数据链路层,两个模型其实是完全一致的,五层模型只是为了方便介绍计算机网络原理而设计。另请参考下图。
3.Socket(基于TCP协议)连接过程
4.Socket原理
5.Socket与Http的区别
所属层面不同
Http
协议属于应用层,解决的是如何包装数据。Socket
属于传输层,因为TCP/IP
协议属于传输层,解决的是数据如何在网络中传输的问题。
工作方式不同
-
Http
:采用请求—响应
方式。-
即建立网络连接后,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。
-
可理解为:客户端有需要才进行通信。
-
-
Socket
:采用服务器主动发送数据
的方式。- 即建立网络连接后,服务器可主动发送消息给客户端,而不需要由客户端向服务器发送请求。
- 可理解为:服务器端有需要才进行通信。
连接属性不同
Http和Socket均有短连接
和长连接
之分
- 短连接
- Http短连接:Http1.0协议不支持长连接,均为短连接。客户端与服务器每进行一次Http操作,就建立一次连接,但任务结束就中断连接。
- Socket短连接:每次请求都新建一个Socket,处理完一个请求就直接关闭Socket。
- 过程:建立连接—数据传输—关闭连接…建立连接—数据传输—关闭连接
- 用途:多用于并发量大,但是每个用户又不需频繁操作的情况。连接数量庞大时,由于每个长连接对于服务器来说要耗费一定的资源,像Web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。
- 长连接
- Http长连接:Http1.1协议以后,连接默认都是长连接。在响应头中加入Connection:keep-alive即为长连接,长连接情况下,多个Http请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗。Http的长连接并不是永久连接的,如果一段时间内(具体的时间长短,是可以在HEADER中进行设置的,也就是所谓的超时时间)这个连接没有Http请求发出的话,那么这个长连接就会被断掉。
- Socket长连接:整个通信过程客户端和服务端只用一个Socket对象,长期保持Socket的连接。
- 过程:建立连接—数据传输…(保持连接)…数据传输—关闭连接
- 用途:多用于操作频繁,点对点的通信,而且长连接数不能太多的情况。
备注:Http协议是基于请求/响应模式的,因此只要服务端给了响应,本次Http连接就结束了,或者更准确的说,是本次Http请求就结束了。所以严格来说的话,Http协议本身是并没有长连接和短连接。我们所说的Http的长连接和短连接其实本质上是说的TCP连接。