TCP
TCP简介:
TCP协议,传输控制协议(Transmission Control Protocol)是一种面向连接的,可靠的,基于字节流的传输层通信协议,由IETF的RFC793定义.
TCP协议三次握手:
TCP通信需要经过创建连接,数据传送,终止连接三个步骤.
TCP特点:
1.面向连接: 通信需要双方先建立连接.完成数据交换后,双方必须断开次链接,释放资源.连接是一对一的
2.可靠传输:
1)TCP采用发送应答机制.
2)超时重传
3)错误校验
4)流量控制和阻塞管理
3.效率低
TCP与UDP的不通点:
面向连接(确认有创建三方交握,连接已创建才作传输)
有序数据传输
重发丢失的数据包
舍弃重复的数据包
无差错的数据传输
阻塞/流量控制
UDP通信模型:
在通信之前,不需要建立相关的连接,只需要发送数据即可,类似于”写信”“.
TCP通信模型:
在通信之前一定要先建立相关的连接,才能发送数据,类似”打电话”.
TCP客户端构建流程:
创建socket:
tcp_client_socket = socket(AF_INET, SOCK_STREAM)
链接服务器:
tcp_client_socket.connect((server_ip, server_port))
发送数据(编码格式):
tcp_client_socket.send(send_data.encode(“编码格式”))
接收数据(接受最大字节):
recvData = tcp_client_socket.recv(1024)
关闭socket:
tcp_client_socket.close()
TCP服务器构建流程:
创建socket:
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
绑定本地信息:
tcp_server_socket.bind(“IP(默认本地为空)”, port)
将socket设置为被动(最大连接数)(该方法不会阻塞):
tcp_server_socket.listen(128)
新客户端连接服务器,创建一个新的socket接收这个客户端服务(该方法会阻塞):
client_socket, clientAddr = tcp_server_socket.accept() # accept()监听到连接,返回一个元组
接收对方发送的数据:
recv_data = client_socket.recv(1024).decode(“解码格式”) # 接收1024个字节
发送数据到客户端(编码):
client_socket.send(“thank you !”.encode(‘编码格式’))
关闭客户端socket(该方法会解recv阻塞,接收长度为0):
client_socket.close()
关闭服务器socket:
tcp_server_socket.close()
TCP断链接四次挥手:
不接受 不发送
不发送 不接受
TCP短连接:
1.client向server发起连接请求
2.server接到请求,双方建立连接
3.client向server发送消息
4.server回应client
5.一次读写完成,此时双方任何一个都可以发起close操作(一般client发起close操作)
TCP长连接:
1.client向server发起连接
2.server接到请求,双方建立连接
3.client向server发送消息
4.server回应client
5.一次读写完成,连接不关闭
6.后续读写操作
7.长时间操作之后client发起关闭请求