

顾名思义,网络编程就是让在不同的电脑上的软件能够互相进行数据传递,进行通信。网络编程有三大要素:IP地址、端口和协议。
在文章Python基础篇 - 网络编程 - 协议 - socket中,介绍了IP与端口、通信端点-socket套接字与协议的关系,以及对协议的概念解释。前面提到过,IP相当于地址、端口相当于房间号,设备交流依托通信端点socket绑定IP和端口,在socket对象中遵循相关协议,从而完成通信。Python基础篇 - 网络编程 - 协议 - UDP介绍了传输层的UDP协议。今天要介绍的协议是传输层两大协议之TCP。

一.协议-TCP
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,这与UDP的无连接通信是显著不同的。TCP协议的运行可划分为三个阶段:连接建立、数据传送和连接终止。

1. 面向连接
通信前必须建立专属通道,不像UDP协议直接发包。
2. 可靠传输
自带确认应答机制,丢包会重传,数据100%送达。
自动排序,不会出现数据乱序问题。
二.协议-TCP-核心原理
目的:双向确认客户端和服务端的收发能力都正常,安全建立专属通信通道。
第一次握手:客户端→服务端(我要建立连接)。
第二次握手:服务端→客户端(收到请求,我准备好了)。
第三次握手:客户端→服务端(我也准备好了,连接正式建立)。
通俗点:你问我、我答你、你确认,双方互通,正式连通。
目的:优雅断开连接,确保双方数据全部传输完毕,不丢数据。
第一次挥手:主动方告知对方,我没有数据要发了。
第二次挥手:被动方确认收到,停止接收新数据。
第三次挥手:被动方数据传输完毕,告知对方可以断开。
第四次挥手:主动方确认,连接彻底断开。
TCP读写通道是独立的,因此断开需要四次交互,保证数据完全落地。
三.协议-TCP-简单案例
TCP服务端
import socket# 1.创建TCP套接字,SOCK_STREAM代表TCP协议tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.绑定IP和端口tcp_server.bind(("127.0.0.1", 8888))# 3.开启监听tcp_server.listen(5)print("服务端已启动,等待客户端连接...")# 4.等待客户端连接conn, addr = tcp_server.accept()print(f"客户端{addr}已连接")# 5.循环收发数据while True:# 1024为缓冲区大小:单次最大接收1024字节data = conn.recv(1024)if not data:breakprint("收到客户端数据:", data.decode("utf-8"))# 回复数据conn.send("收到!".encode("utf-8"))# 关闭连接conn.close()tcp_server.close()
TCP客户端
import socket# 1.同样创建TCP套接字,SOCK_STREAM - TCPtcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.连接服务端tcp_client.connect(("127.0.0.1", 8888))# 3.发送数据tcp_client.send("Hello TCP!".encode("utf-8"))# 4.接收回复res = tcp_client.recv(1024)print("服务端回复:", res.decode("utf-8"))# 关闭连接tcp_client.close()
总结:今日我们学习了Python基础篇-网络编程-协议-TCP。TCP是面向连接的可靠传输协议,通信前需建立三次握手连接,传输完成后经四次挥手断开,能保证数据完整、有序送达,适合文件传输、网页访问等场景。对比此前学习的UDP,UDP无需提前建立连接,属于无连接协议,传输速度更快,但不保障数据可靠性,易出现丢包、乱序问题。在Python基础篇,后续我们将持续学习Python基础知识,介绍各种算法,祝每一位study er学习愉快。

