TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。
1. 面向连接:是一个双向连接,通过三次握手完成,断开连接需要通过四次挥手完成。
三次握手:
客户端->服务器:发出连接请求
服务器->客户端:同意并发出连接请求
客户端->服务器:同意连接
四次挥手(谁先都行):
客户端->服务器:断开连接请求
服务器->客户端:同意并发出断开请求
客户端与服务器断开连接(单向)
服务器->客户端:断开连接请求
客户端->服务器:同意
程序员只需调用相关函数即可,该过程将在底层完成
2. 安全:tcp通信过程中,会对发送的每一数据包都会进行校验, 如果发现数据丢失, 会自动重传
3. 流式传输:发送端和接收端处理数据的速度,数据的量都可以不一致
通信流程
服务器流程
1.创建用于监听的套接字,这是一个文件描述符
int lfd = socket();//监听是否有客户端发起连接请求
2.将得到的监听的文件描述符和本地的IP 端口进行绑定
bind();//端口用于定位主机中的某个进程
3.设置监听(成功之后开始监听, 监听的是客户端的连接)
listen();//监听客户端请求,即启动操作一
4.等待并接收客户端的请求,建立新的连接,会得到一个新的文件描述符(用于通信,有N个客户端就有N个描述符)没有新连接请求就阻塞
int cfd = accept();
5.通信,读写操作默认都是阻塞的
//接收数据
read(); / recv();
//发送数据
write(); / send();
6.断开连接, 关闭套接字
close();//即服务器端进行两次挥手
客户端流程
在单线程的情况下客户端通信的文件描述符有一个,没有监听的文件描述符
1.创建一个通信的套接字
int cfd = socket();
2.连接服务器, 需要知道服务器绑定的IP和端口
connect();
3.通信
//接收数据
read(); / recv();
//发送数据
write(); / send();
4.断开连接, 关闭套接字
close();//即客户端进行两次挥手
PS:必须先启动服务器端再启动客户端