第二讲 TCP发送与接收数据
一、TCP协议介绍
当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP将在两个应用程序之间建立一个全双工(full-duplex)的通信。
这个全双工的通信将占用两个计算机之间的通信路线,直到它被一方或双方关闭为止。
1.三次握手
下图为初版,四次握手:
进化后成了三次握手,server应答和发送请求可以变成一条:
2. 数据传输
以下图为例,TCP协议是一个全双工通信,发送方和接收方建立了信息发送和接收渠道:
在一方发送消息后,另一方一定会回复信息,表明信息已接收,TCP协议的安全性体现在这里。
3.四次挥手
断开连接为何是四次而不是三次,可以查一下资料,这里有一篇详解,由于不是计算机专业所以还看不懂,关于TCP三次握手和四次挥手
4.TCP特点
- 面向连接
- 可靠传输
• TCP采用发送应答机制
• 超时重传
• 错误校验
• 流量控制和阻塞管理
二、UDP协议介绍
当应用程序希望通过UDP与一个应用程序通信时,传输数据之前源端和终端不建立连接。
当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。
三、TCP与UDP之间的区别
- TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
- 每一条TCP连接只能是点到点的:UDP支持一对一,一对多和多对一和多对多的交互通信。
- TCP对系统资源要求较多,UDP对系统资源要求较少。
四、UDP通信
其顺序如下图所示:
五、TCP通信
六、TCP客户端构建流程
- 创建socket
- 链接服务器
- 接收/发送数据
- 关闭套接字
我们通过一段简短的代码来看一下。
首先将网络调试助手调成TCP server的角色:
然后编写代码:
import socket
def main():
# 1.创建套接字,注意type为TCP流式套接字
tcp_client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
tcp_client.bind(('',8000)) # 绑定端口
# 2.连接服务器
tcp_client.connect(('192.168.59.1',8080))
# 3.发送数据
send_data = input('你想要发送的数据:')
tcp_client.send(send_data.encode('gbk')) # 已建立TCP连接,使用send方法即可
# 4.接收数据,到这里会产生阻塞等待
rec_data = tcp_client.recv(1024*3