Python高级——网络编程_04_TCP
TCP:
概述:传输控制协议
特点:
面向连接-->通信前建立连接,一对一传输数据,完成后断开连接释放资源
可靠传输
a.应答机制
b.超时重传(ACK/确认)
c.错误校验
d.流量控制和阻塞管理
基于字节流-->没有消息边界 接收的数据可能是发送方多次发送的结果
优点:可靠稳定,适合大量数据
缺点:速度慢,占用资源高
与UDP的区别:
1.tcp面向连接,udp不是面对连接
2.tcp数据传输 :无差错、不丢失、不重复、且按序到达
udp数据传输:不可靠,容易出现丢包
3.tcp需连接传输速度慢,udp不需要连接传输速度快
4.tcp 不支持发广播;udp支持发广播
5.tcp对于资源要求较多;udp对系统资源要求较少
6.tcp适合大量数据;udp适合少量数据
7.tcp有流量控制,udp没有流量控制
应用场景:
邮件传输,浏览器,QQ文件传输
客户端:
connect连接服务器
send发送数据
recv发送tcp套接字
服务器端:
listen 将服务器套接字设置为监听模式/ 被连接模式
accept 方法用于等待接收客户端的连接请求,
返回值为 客户端套接字,(ip和端口)
注:
服务器端需要绑定端口
客户端的套接字close后关闭连接时,客户端会recv解堵塞,
并且返回长度为0的字节b"",可以使用该返回值is None或者长度来区别,服务器端是否关闭
释放端口:
setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
因为程序绑定端口后,关闭时不会立刻释放端口,有一个时间段,可以使用上述参数进行忽视释放时间,让端口 立即释放,称为端口复用
三次握手:
1.listen(参数128)
在Linux上表示已就绪队列的大小,其他平台一般表示两个队列的总大小
2.accept方法意义
从已就绪队列中取出 客户端关联的套接字对象
3.connect()方法
建立和服务器的连接 发起并完成 和服务器之间的三次握手
四次挥手:close的关闭流程和释放顺序
TCP标准规定:主动断开连接的一方需要等待2MSL时间才能释放端口
-->服务器重启,立马bind端口失败
解决:重用地址和端口可以重新立即绑定
sesockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)