1.网络中进程之间如何通信 ——Socket
在本地可以通过进程PID来唯一标识一个进程,
在本地中利用三元组(ip地址,协议,端口)标识网络进程
2.什么是Socket
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,
都可以用“打开open –> 读写write/read –> 关闭close”模式来操作
使用TCP/IP协议的应用程序通常采用应用编程接口:UNIX BSD的套接字(即socket)
3、基本操作函数
1.创建Socket
int socket(int domain, int type, int protocol);
创建一个socket后,返回的socket描述字存在于协议族(第一个参数,但没有具体的地址;bind函数就是给socket在协议族赋值一个地址)
2.赋值地址
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
3.监听/连接请求
int listen(int sockfd, int backlog);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
4.接收请求
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
5.读写
read()/write()
recv()/send()
readv()/writev()
recvmsg()/sendmsg() 推荐
recvfrom()/sendto()
6.关闭
int close(int fd);
4、TCP的三次握手建立连接详解
客户端发送请求——服务端响应请求——客户端确认请求
5、TCP的四次握手释放连接详解
某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;
接收到这个FIN的源发送端TCP对它进行确认。
服务端
1、初始化Windows Socket库。
2、创建Socket。
3、绑定Socket。
4、监听。
5、Accept。
6、接收、发送数据。
客户端
1、初始化Windows Socket库。
2、创建Socket。
3、连接Socket。
4、接收、发送数据。