TCP 三次握手: SYN  -->  SYN+ACK  -->  ACK

四次挥手:  FIN --> ACK (FIN)  --> ACK

TCP十种状态: LISTEN  SYN_SENT  SYN_RECV  ESTABLISHED  FIN_WAIT1 FIN_WAIT2  CLOSE_WAIT  LAST_ACK  TIME_WAIT  CLOSED

MSL: 报文最大生存时间

4次握手完成连接的关闭,主动关闭连接一方在第3次握手完成后发送了第四次握手的ACK包后就进入了TIME_WAIT状态,必须在此状态上停留两倍的MSL时间,等待2MSL时间主要目的是怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。

TCP服务器模型 实现的几种方式:  单进程非堵塞: 用 select.setblocking() 把套接字变成非堵塞类型.

用 select 实现 select.select() 可以用轮询的方式去询问哪些套接字有任务.(收发数据,异常)

epoll  : select.epoll() 时间通知机制,效率极大提升

协程 : python 里面的协程模块 greenlet 类似于线程但不等于线程,需要用 greenlet.switch() 手动切换调用协程.

如果想自动切换,那就要用 gevent : gevent把耗时的东西(函数,类) 都重写了一遍.所以只能用它里边的东西才能实现遇到耗时操作时自动切换协程 如 gevent.socket()  ,  gevent.sleep()  , 创建协程 用 gevent.spawn() ,执行协程代码前需要加上一句 gevent.monkey.patch_all() 它会修改代码,重新编译,使得协程像线程一样可以操作.只不过是遇到耗时操作来回切换而已.

05-28 17:44