什么是Socket?
socket是进城间通讯的一种机制
Socket如何实现通讯
两个进程实现通讯,首先要找到对方,由于IP只能唯一标识计算机地址,所以还要加上TCP协议和端口号,因为TCP协议+端口号可以唯一标识一台计算机中的进程
通信流程:
1. 服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket
2. 服务器为socket绑定ip地址和端口号
3. 服务器监听端口号请求,随时准备接受客户端发来的连接,这时候服务器的socket处于未开启状态
4. 客户端创建socket
5. 客户端打开socket,根据服务器ip和端口号尝试连接服务器socket
6. 服务器socket收到了客户端socket请求,被动打开,开始接收客户端请求,这时候服务器会给客户端返回一个数据包,并进入阻塞状态。客户端收到服务器的数据包后,客户端连接成功,然后客户端向服务器发送连接信息,服务器收到连接信息后,accept方法返回,解除阻塞状态,连接成功。
7. 客户端向socket写入信息
8. 服务器读取信息
9. 客户端关闭socket
10. 服务器关闭socket
流程如下图:
3次握手:
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号包),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收到客户端的syn包并确认(ack=j+1),同时向客户端发送一个syn包(syn=k),即syn+ack包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手流程如下图