socket小解

Posted 炎泽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket小解相关的知识,希望对你有一定的参考价值。

要理解socket,首先得理解TCP/IP协议族,

TCP/IP (Transmission Control Protocol/Internet Protocol)传输控制协议/网间协议

定义: TCP/IP指的是因特网整个TCP/IP协议族而不是单纯TCP与IP协议的统称,它将所有的TCP\\IP协议归类到四个抽象层

 

应用层: TFTP, HTTTP, SNMP, FTP, SMTP, DNS, Telnet等

传输层: TCP, UDP

网络层: IP, OSPF,EIGRP,IGMP

数据链接层: SLIP,CSLIP,PPP,MTU

大致如下:

每一层建立在低一层的服务上,并且为高一层服务

功能: 定义主机如何连入互联网以及数据如何在它们之间传输的标准

--------------------------------------------------------------------------------------------------------------------------------------------------------

socket

网络中,两个进程要进行通讯一个基本前提上能将其唯一标识,IP的IP地址能唯一标识一个主机,TCP的协议和端口号可以唯一标识主机上的一个进程,因此我们使用ip地址+ TCP协议+ 端口号来唯一标识一个网络进程,

接下来就能利用socket进行通讯了

定义: socket是应用层与运输层间的一个抽象层,将TCP,IP层复杂的操作抽象为几个简单的接口供应用层调用来实现网络通信

 

socket起源于UNIX,在其“一切皆为文件”思想的影响下,以“打开--读/写--关闭”的模式实现,即服务端与客户端各自维护一个文件,在建立连接后,往自己的文件里写入内容供对方读取或读取对方的信息,

通讯结束后关闭文件,如下

 

解析:

服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket

服务器为socket绑定ip地址和端口号

服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开

客户端创建socket

客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket

服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求

客户端连接成功,向服务器发送连接状态信息

服务器accept方法返回,连接成功

客户端向socket写入信息

服务器读取信息

客户端关闭

服务器端关闭

 

三次握手

在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接

第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手

 

以上是关于socket小解的主要内容,如果未能解决你的问题,请参考以下文章

io.sockets.socket(socket_id).emit() - 没有方法'socket'

同步socket, 异步socket, 多线程socket, 多进程socket

为什么有监听socket和连接socket,为什么产生两个socket

socket.join 不起作用(socket.io)

socket通信的流程

Socket详解