socket编程的那些事儿

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”


猜你喜欢

转载自blog.csdn.net/scutjyj/article/details/79773106