TCP介绍 Transmission Control Protocol
【概述】:TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
【三步走】TCP通信需要经过创建连接、数据传送、终止连接三个步骤。
TCP客户端服务器通信流程图关于 TCP “三次握手”以及“四次挥手”
三次握手,建立连接
- ① 【连接建立】:请求连接方(客户端)发送SYN请求连接;
- ② 【数据传送】:服务器返回SYN/ACK确认收到发送端请求;
- ③ 【连接释放】:客户端回馈给服务器ACK,表示确认收到服务器发送的确认。
补充:注意事项
- ① 如果服务器没有收到客户端发送的ACK,则启动超时重传机制,这确保了TCP连接的准确性。
- ② TCP的握手至少有三次。
【拓展】:连接的建立需要经过多次交互,这就是我们日常中所说的建立连接是高成本的操作。因此,在实际生产中,通过建立连接池,来减少连接建立的频度,传输数据时直接从连接池中获取连接,而不是新建连接。
四次挥手【断开连接】
- ①请求方(客户端)数据已经发送完毕,向服务器发送FIN请求断开连接;
- ②服务器向客户端发送ACK,对客户端发送的FIN进行确认,并不需要即使断开;
- ③服务器将接收到的数据处理完毕后发送FIN,断开连接;
- ④客户端发送确认消息ACK。
【性质】:TCP是双向通信,因此关闭连接时需要双向关闭连接。首先是关闭操作的发起方关闭本端的连接,然后是关闭接收方在收到发起方的关闭请求后,除了回复关闭应答外,还要确保数据传输完成后发起一个关闭连接的请求,保证双向同时关闭。
【知识拓展】:
标志位(URG、ACK、PSH、RST、SYN和FIN)的含义介绍。
- ACK: 确认序号有效。
- RST:重置连接
- SYN:发起一个新连接
- FIN:释放一个连接
TCP编程
服务器端:
1、创建 套接字 socket
2、bind(命名IP地址和端口号)
3、listen(创建监听队列)
4、accept(拿到已经完成连接的)
5、recv/send(收发数据)
6、close(关闭)
【知识积累】
- TCP 服务器一般情况下都需要绑定端口号,否则客户端找不到这个服务器;
- TCP 服务器中通过监听可以将 套接字创建出来的主动套接字变为被动的,这是做 TCP 服务器时必须要做的;
客户端:
1、socket
2、connect
3、recv/send
4、close
- TCP 客户端一般不绑定端口号,使用随机生成的端口号即可;
4、当 TCP 客户端和服务端建立好连接才可以收发数据,UDP 是不需要建立连接,直接就可以发送数据;当一个 TCP 客户端和服务端连接成功后,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务;
5、关闭 accept 返回的套接字意味着这个客户端已经服务完毕.
6、【关于套接字】:是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
【引言】:在网络应用程序设计时,由于TCP/IP的核心内容被封装在操作系统中,如果应用程序要使用TCP/IP,可以通过系统提供的TCP/IP的编程接口来实现。在Windows环境下,网络应用程序编程接口称作Windows Socket。为了支持用户开发面向应用的通信程序,大部分系统都提供了一组基于TCP或者UDP的应用程序编程接口(API),该接口通常以一组函数的形式出现,也称为套接字(Socket)。
网友评论