<>系列文章目录
tcp介绍
tcp特点
tcp客户端
一、tcp介绍
Tcp协议,传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义
TCP通信需要经过创建连接、传输数据、终止连接三个步骤
TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中的“打电话”(注:之前学习的udp,在通信前,不需要建立相关的链接,只需要发送数据即可,类似于“写信”,数据有可能丢失,没有tcp安全)
二、tcp特点
1. 面向连接
通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输
双方间的数据传输都可以通过这一个连接进行
完成数据交换后,双方必须断开连接,以释放系统资源
这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用udp协议
2. 可靠传输
1)tcp采用发送应答机制
Tcp发送每一个报文段都必须得到接收方的应答才认为这个tcp报文段传输成功
(举个例子:平时我们用迅雷下载电影,明明是在下载东西,而流量监控会显示我们的下载速度是几兆每秒,同时也会显示一个上传速度,可能显示十几K每秒,这个上传的就是反馈回去的应答。因为一部电影一般都是很多个G的大小,不可能一次性下载完成,实际上是分成了很多个小片段下载的,我们下载成功一个,程序就会上传反馈提示这个片段下载成功,然后再进行下一个片段的下载)
2)超时重传
发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段
tcp为了保证不发生丢包,就给每一个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收
然后接收端实体对已经成功收到的包发回一个相应的确认(ACK),如果发送端实体在合理的往返时延(RTT)内收到确认,name对应的数据包就被假设为丢失将会进行重传
3)错误校检
Tcp用一个校检和函数来检验数据是否有错误,在发送和接收时都要计算校检和
4)流量控制和阻塞管理
流量控制用来避免主机发送的过快而是对方来不及完全收下
Tcp和udp的不同点
·面向连接(确认有创建第三方交握,连接已创建才做传输)
·有序数据传输
·重发丢失的数据包
·丢弃重复的数据包
·无差错的数据传输
·阻塞/流量控制
总的来说,tcp比udp更加高效,稳定,可靠。现在我们基本上都是用的tcp
三、Tcp客户端
所谓的服务器端:就是提供服务的一方。二客户端:就是需要被服务的一方
Tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机,插电话卡,设置铃声,等待别人打电话的流程话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程少很多
大概思路:
第一步:创建套接字
第二步:链接服务器
第三步:收发数据
第四部:关闭套接字
比之前的udp多了一步链接服务器
操作:
注:tcp使用send发送数据,而且tcp是发送之前就已经建立了连接,就不需要再写端口号了
代码:
import socket def main(): # 1. 创建tcp套接字 tcp_socket =
socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 链接服务器 #
tcp_socket.connect(("192.168.2.101", 8080)) server_ip = input("请输入要链接的服务器的ip:")
server_port = int(input("请输入要链接的服务器的port:")) server_addr = (server_ip,
server_port) tcp_socket.connect(server_addr) # 3. 发送数据/接收数据 send_data =
input("请输入要发送的数据:") tcp_socket.send(send_data.encode("utf-8")) # 4. 关闭套接字
tcp_socket.close() if __name__ =="__main__": main()
输出结果:
控制台:
服务器端:
<>