Python高级——网络编程_04_TCP

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)