1、python的socket编程中socket.SO_REUSEADDR的含义:Socket中SO_REUSEADDR详解
2、Python的socket模块:
s.send(),当对端使用(RST或者FIN)关闭了socket时,会抛出socket.error,即[Errno 10053];而当对端的TCP 接收窗口满了,则会抛出socket.timeout。
3、当解决NAT打洞问题时,需要掌握:NAT的四种类型,另一篇参考
一般来讲, NAT可以分为四种类型,分别是:
1, 全锥型(Full Cone)
2, 受限锥型(Restricted Cone), 或者说是IP受限锥型
3, 端口受限锥型(Port Restricted Cone), 或者说是IP + PORT受限锥型
4, 对称型(Symmetric)
其中1,2,3属于同一种类型,都是锥型,区别只是路由器的不同的安全策略。
还有些NAT不属于这四种中的任何一种,就不在讨论范围了。
client(192.168.0.3, 100)和server(1.1.1.1, 1111)在路由器上建立好映射关系后,如果这个时候路由器(8.8.8.8)在800端口上收到从另外一台server(2.2.2.2, 2222)发来的数据,是不是应该转发给(192.168.0.3, 100)呢?
有四种情况:
1, 无条件转发给(192.168.0.3, 100), 这就是全锥型(Full Cone)NAT。
2, 如果(192.168.0.3, 100)之前给(2.2.2.2)发送过数据,则转发, 这就是受限锥型(Restricted Cone)。
3, 如果(192.168.0.3, 100)之前给(2.2.2.2, 2222)发送过数据,则转发, 这就是端口受限锥型(Port Restricted Cone)。
4, 丢弃报文,拒绝转发, 这就是对称型NAT。
从上面也描述也可以看出,安全性系数, 对称型 > 端口受限锥型 > 受限锥型 > 全锥型
4、select.select(rlist, wlist, xlist[, timeout])参数相关:
“The first three arguments are sequences of ‘waitable objects’: either integers representing file descriptors or objects with a parameterless
method named fileno() returning such an integer”