169it科技资讯


当前位置:  建站>其它
本页文章导读:
    ▪Nginx+CI 出现404错误       对于/index.php/abc这种url,Apache和Lighttpd会按”index.php?abc”来解释,而nginx会认为是请求名 字是“index.php”的目录下的abc文件的内容。所以CI在nginx下不配置rewrite是无法运行的,而在Apache 和Ligh......
    ▪tcpdump抓包工具的高级应用       tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854   0x4745 为"GET"前两个字母"GE" 0x4854 为"HTTP"前两个字母"HT" 说明: 通常情况下:一个正常的TCP连接,都会......
    ▪Windows socket之IOCP实例----IOCP开发驾照理论考试系统                Windows socket IO完成端口开发驾照理论考试系统实例 这一节我们讲解如何利用套接字完成端口开发驾照理论考试系统。该系统由服务器和客......

[1]Nginx+CI 出现404错误
    来源: 互联网  发布时间: 2013-11-02

对于/index.php/abc这种url,Apache和Lighttpd会按”index.php?abc”来解释,而nginx会认为是请求名

字是“index.php”的目录下的abc文件的内容。所以CI在nginx下不配置rewrite是无法运行的,而在Apache

和Lighttpd则正常。

Nginx里rewrite ^/(.*)$ /index.php?$1 last;来rewrite请求时,对于:/abc.abc这类请求,会

rewrite成“index.php/abc_abc”,即会把“点”变成“下划线”,不清楚是为什么。

Nginx配置文件里的rewrite规则不是只执行一次就完事的,是“执行一遍,假如没有碰到break,就按

rewrite后的新路径再执行一遍,直到不再变化或者遇到break或者执行满10次报500错误退出”,所以单纯

的用小知识二里的重写规则是不行的,需要在后面加上一句break,这样重写一遍后就不再执行了。

location /firefoxbug/
{
index index.php;
if (!-e $request_filename) {
rewrite ^/(.*)$ /firefoxbug/index.php?$1 last;
break;
}
}

作者:firefoxbug 发表于2013-1-22 22:52:00 原文链接
阅读:0 评论:0 查看评论

    
[2]tcpdump抓包工具的高级应用
    来源: 互联网  发布时间: 2013-11-02

tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

 

0x4745 为"GET"前两个字母"GE"

0x4854 为"HTTP"前两个字母"HT"


说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手

里面的几个概念:

  • SYN: (同步序列编号,Synchronize Sequence Numbers)
  • ACK: (确认编号,Acknowledgement Number)
  • FIN: (结束标志,FINish)
TCP三次握手(创建 OPEN)
  • 客户端发起一个和服务创建TCP链接的请求,这里是SYN(J)
  • 服务端接受到客户端的创建请求后,返回两个信息: SYN(K) + ACK(J+1)
  • 客户端在接受到服务端的ACK信息校验成功后(J与J+1),返回一个信息:ACK(K+1)
  • 服务端这时接受到客户端的ACK信息校验成功后(K与K+1),不再返回信息,后面进入数据通讯阶段
  • 数据通讯
  • 客户端/服务端 read/write数据包
  • TCP四次握手(关闭 finish)
  • 客户端发起关闭请求,发送一个信息:FIN(M)
  • 服务端接受到信息后,首先返回ACK(M+1),表明自己已经收到消息。
  • 服务端在准备好关闭之前,最后发送给客户端一个 FIN(N)消息,询问客户端是否准备好关闭了
  • 客户端接受到服务端发送的消息后,返回一个确认信息: ACK(N+1)
  • 最后,服务端和客户端在双方都得到确认时,各自关闭或者回收对应的TCP链接。
  • 详细的状态说明(以及linux相关参数调整)
  • SYN_SEND
    • 客户端尝试链接服务端,通过open方法。也就是TCP三次握手中的第1步之后,注意是客户端状态
    • sysctl -w net.ipv4.tcp_syn_retries = 2 ,做为客户端可以设置SYN包的重试次数,默认5次(大约180s)引用校长的话:仅仅重试2次,现代网络够了
  • SYN_RECEIVED
    • 服务接受创建请求的SYN后,也就是TCP三次握手中的第2步,发送ACK数据包之前
    • 注意是服务端状态,一般15个左右正常,如果很大,怀疑遭受SYN_FLOOD攻击
    • sysctl -w net.ipv4.tcp_max_syn_backlog=4096 , 设置该状态的等待队列数,默认1024,调大后可适当防止syn-flood,可参见man 7 tcp
    • sysctl -w net.ipv4.tcp_syncookies=1 , 打开syncookie,在syn backlog队列不足的时候,提供一种机制临时将syn链接换出
    • sysctl -w net.ipv4.tcp_synack_retries = 2 ,做为服务端返回ACK包的重试次数,默认5次(大约180s)引用校长的话:仅仅重试2次,现代网络够了
  • ESTABLISHED
    • 客户端接受到服务端的ACK包后的状态,服务端在发出ACK在一定时间后即为ESTABLISHED
    • sysctl -w net.ipv4.tcp_keepalive_time = 1200 ,默认为7200秒(2小时),系统针对空闲链接会进行心跳检查,如果超过net.ipv4.tcp_keepalive_probes * net.ipv4.tcp_keepalive_intvl = 默认11分,终止对应的tcp链接,可适当调整心跳检查频率
    • 目前线上的监控 waring:600 , critial : 800
  • FIN_WAIT1
    • 主动关闭的一方,在发出FIN请求之后,也就是在TCP四次握手的第1步
  • CLOSE_WAIT
    • 被动关闭的一方,在接受到客户端的FIN后,也就是在TCP四次握手的第2步
  • FIN_WAIT2
    • 主动关闭的一方,在接受到被动关闭一方的ACK后,也就是TCP四次握手的第2步
    • sysctl -w net.ipv4.tcp_fin_timeout=30, 可以设定被动关闭方返回FIN后的超时时间,有效回收链接,避免syn-flood.
  • LASK_ACK
    • 被动关闭的一方,在发送ACK后一段时间后(确保客户端已收到),再发起一个FIN请求。也就是TCP四次握手的第3步
  • TIME_WAIT
    • 主动关闭的一方,在收到被动关闭的FIN包后,发送ACK。也就是TCP四次握手的第4步
    • sysctl -w net.ipv4.tcp_tw_recycle = 1 , 打开快速回收TIME_WAIT,Enabling this option is not recommended since this causes problems when working with NAT (Network Address Translation)
          
  • [3]Windows socket之IOCP实例----IOCP开发驾照理论考试系统
        来源: 互联网  发布时间: 2013-11-02

              Windows socket IO完成端口开发驾照理论考试系统实例

     

    这一节我们讲解如何利用套接字完成端口开发驾照理论考试系统。

    该系统由服务器和客户端两部分组成。

     

        服务器负责对题库和学生信息的管理,主要包括以下功能:

          1:试卷管理:从题库读取试卷和向客户端发送试卷。

          2:客户端管理(CClientManager类)。从数据库读取学生信息,验证学生信息。

          3:监视考生考试状态。

          4:评分。保存学生考试状态和成绩。

        客户端负责生成试卷,主要包括以下功能:

          1:登录服务器。

          2:生成试卷。

          3:考试计时。考试时间结束考生停止答题。

     

    主要步骤如下:

     

         客户端成功连接服务器后,向服务器发送学号。服务器在收到学号后,会验证该学号是否存在于数据库中。如果存在且未登录过,则向客户端发送该学生姓名和试卷。否则,项客户端发送查无此人信息。

         客户端在收到试卷后,向考生显示准备完成,是否开始答题。考生点击开始答题后,客户端向服务器发送开始答卷消息。考生开始答卷,客户端进行计时。考试结束后,客户端向服务器发送答题结果。服务器在收到答题结果后,对该考生的试卷进行评分,并将结果保存在数据库。

        数据包设计:

        为了保证客户端与服务器之间数据的正确发送与接收,在发送数据时,先发送包头后发送包体。包头指明包体的类型和长度。包头定义如下:

     

    typedef struct _header
    
    {
    
       u_short type;//包类型。
    
       u_short len;//包体长度。
    
    }HEADER;
    
    


     

         客户端发送的数据包类型包括考生状态和心跳包两种。在考试期间为了监控考生状态,客户端定期向服务器发送心跳包,服务器根据此心跳包判断客户端状态。如果由于意外导致连接断开,服务器在一段时间内没有收到心跳包则断定客户端断线。

    客户端在发送包头后,发送考生状态,它包括以下几种:

        登录:此时考生状态为考生学号。LOGIN

        答卷:此时考生状态没有数据。DOING

        交卷:此时考生状态为答题结果。DONE

        断线:在服务器一段时间没有收到心跳包后,设置客户端为断线状态。DISCONN

     


        
    最新技术文章:
     




    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号