我们知道tcp建立连接要进行“三次握手”,即交流三个分组。大致流程如下:
客户端向做事器发送一个SYN J做事器向客户端相应一个SYN K,并对SYN J进行确认ACK J+1客户端再想做事器发一个确认ACK K+1但是这个三次握手发生在socket的那几个函数中呢?请看下图:
从图中可以看出,当客户端调用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中的四次握手开释连接的过程,请看下图:
图示过程如下:
某个运用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;另一端吸收到FIN M之后,实行被动关闭,对这个FIN进行确认。它的吸收也作为文件结束符通报给运用进程,由于FIN的吸收意味着运用进程在相应的连接上再也吸收不到额外数据;一段韶光之后,吸收到文件结束符的运用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;吸收到这个FIN的源发送端TCP对它进行确认。4、php如何操作socket4.1、采取socket
基本操作和c的socket接口一样,可以设置很多socket选项
4.2、采取stream
php自带的接口,不须要安装任何扩展,接口利用非常大略
4.3、两者的异同
socket更倾向于底层,操作起来相对付繁琐stream相对大略,由于是stream类型,因此可用stream干系的函数操作,fread、fwrite等,也可利用stream干系的高等特性,过滤器、streamWrapper、ssl加密等