一些用户无法访问网站的问题

一些用户无法访问网站的问题,经过分析试验,最终确认和proc参数tcp_tw_recycle/tcp_timestamps相关; 1. 现象 第一个现象:模块A通过NAT网关访问服务S成功,而模块B通过NAT网关访问服务S经常性出现connect失败,抓包发现:服务S端已经收到了syn包,但没有回复synack;另外,模块A关闭了tcptimestamp,而模块B开启了tcp timestamp; 第二个现象:不同主机上的模块C(开启timestamp),通过NAT网关(1个出口ip)访问同一服务S,主机C1connect成功,而主机C2 connect失败; 2. 分析 根据现象上述问题明显和tcp timestmap有关;查看linux2.6.32内核源码,发现tcp_tw_recycle/tcp_timestamps都开启的条件下,60s内同一源ip主机的socketconnect请求中的timestamp必须是递增的。 源码函数:tcp_v4_conn_request(),该函数是tcp层三次握手syn包的处理函数(服务端); 源码片段: if (tmp_opt.saw_tstamp &&am … 继续阅读“一些用户无法访问网站的问题”

Django中URL正则表达式匹配

Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则: 符号 匹配 . (dot) 任意单一字符 \d 任意一位数字 [A-Z] A 到 Z中任意一个字符(大写) [a-z] a 到 z中任意一个字符(小写) [A-Za-z] a 到 z中任意一个字符(不区分大小写) + 匹配一个或更多 (例如, \d+ 匹配一个或 多个数字字符) [^/]+ 一个或多个不为‘/’的字符 * 零个或一个之前的表达式(例如:\d? 匹配零个或一个数字) * 匹配0个或更多 (例如, \d* 匹配0个 或更多数字字符) {1,3} 介于一个和三个(包含)之前的表达式(例如,\d{1,3}匹配一个或两个或三个数字) 元字符 含义描述 * 匹配O次、1次或多次其前的原子 + 匹配1次或多次其前的原子 ? 匹配0次或1次其前的原子 . 匹配除了换行符外的任意一个字符 | 匹配两个或多个分支选择 {n} 表示其前面的原子恰好出现n次 {n,} 表示其前面的原子出现不少于n次 {n,m} 表 … 继续阅读“Django中URL正则表达式匹配”

WiFi小知识:WiFi信道

信道,又被称为通道或频道,是信号在通信系统中传输的通道,由信号从发射端传输到接收端所经过的传输媒质所构成。而无线信道就是以辐射无线电波为传输方式的无线电信道,简单来说就是无线数据传输的通道。 虽然物理世界中无线电信道很多,但能够被Wi-Fi协议所用的信道却是寥寥无几,并主要集中在2.4GHz和5GHz频段。此外,由于各国对于无线电信道的用途不同,因此即使是在2.4GHz和5GHz这两个公共频段,信道的开放程度也是不同的,这其中既有出于国家安全的考虑,也有被其他应用占用的情况。下面就为大家盘点一下各国或地区的信道开放程度。 各国2.4GHz频道信道规划 可以看到,在2.4GHz频段,我国所提供的可用信道还是非常丰富的,在2.412-2.472GHz,共有13个信道可供选择。 各国(地区)5GHz频道信道规划 再来看看5GHz频段,包含5150MHz-5825MHz的无线电频段,一共拥有201个信道,但能用的确实不多,特别是在我国,仅有5个信道(149,153,157,161,165)可用。考虑到信道就是无线数据的传输通道,也就是说,在人员密集的情况下,5个信道的体验效果肯定会受影响;不过目前来看,支持5GHz频 … 继续阅读“WiFi小知识:WiFi信道”