phpsocket连接有几种(61phpsocket通信说明)

socket是应用层与tcp/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在socket接口后面,对用户来说,一组简单的接口就是全部,让socket去组织数据,以符合指定的协议。

1、socket基本操作

服务器端先初始化socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,这样这一次交互就结束。如下图所示

phpsocket连接有几种(61phpsocket通信说明)(1)

2、socket中TCP的三次握手建立连接详解

我们知道tcp建立连接要进行“三次握手”,即交换三个分组。大致流程如下:

  • 客户端向服务器发送一个SYN J
  • 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J 1
  • 客户端再想服务器发一个确认ACK K 1

但是这个三次握手发生在socket的那几个函数中呢?请看下图:

phpsocket连接有几种(61phpsocket通信说明)(2)

从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J 1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J 1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K 1时,accept返回,至此三次握手完毕,连接建立。

总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。

3、socket中TCP的四次握手释放连接详解

上面介绍了socket中TCP的三次握手建立过程,及其涉及的socket函数。现在我们介绍socket中的四次握手释放连接的过程,请看下图:

phpsocket连接有几种(61phpsocket通信说明)(3)

图示过程如下:

  • 某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
  • 另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
  • 一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;
  • 接收到这个FIN的源发送端TCP对它进行确认。
4、php如何操作socket

4.1、采用socket

基本操作和c的socket接口一样,可以设置很多socket选项

4.2、采用stream

php自带的接口,不需要安装任何扩展,接口使用非常简单

4.3、两者的异同

  • socket更偏向于底层,操作起来相对于繁琐
  • stream相对简单,由于是stream类型,因此可用stream相关的函数操作,fread、fwrite等,也可使用stream相关的高级特性,过滤器、streamWrapper、ssl加密等

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页