亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

tcp鏈接的幾種狀態&tcpdump抓包

系統 1607 0

linux服務器上的11種tcp狀態


tcp鏈接的幾種狀態&tcpdump抓包
?

說明: 通常情況下:一個正常的TCP連接,都會有三個階段:1、TCP三次握手;2、數據傳送;3、TCP四次揮手

里面的幾個概念:

  • SYN: (同步序列編號,Synchronize Sequence Numbers)
  • ACK: (確認編號,Acknowledgement Number)
  • FIN: (結束標志,FINish)

TCP三次握手(創建 OPEN)

  1. 客戶端發起一個和服務創建TCP鏈接的請求,這里是SYN(J)
  2. 服務端接受到客戶端的創建請求后,返回兩個信息: SYN(K) + ACK(J+1)
  3. 客戶端在接受到服務端的ACK信息校驗成功后(J與J+1),返回一個信息:ACK(K+1)
  4. 服務端這時接受到客戶端的ACK信息校驗成功后(K與K+1), 不再返回信息,后面進入數據通訊階段

數據通訊

  1. 客戶端/服務端 read/write數據包

TCP四次握手(關閉 finish)

  1. 客戶端發起關閉請求,發送一個信息:FIN(M)
  2. 服務端接受到信息后,首先返回ACK(M+1),表明自己已經收到消息。
  3. 服務端在準備好關閉之前,最后發送給客戶端一個 FIN(N)消息,詢問客戶端是否準備好關閉了
  4. 客戶端接受到服務端發送的消息后,返回一個確認信息: ACK(N+1)
  5. 最后,服務端和客戶端在雙方都得到確認時,各自關閉或者回收對應的TCP鏈接。

詳細的狀態說明(以及linux相關參數調整)

  1. SYN_SEND
    • 客戶端嘗試鏈接服務端,通過open方法。也就是 TCP三次握手 中的第1步之后, 注意是客戶端狀態
    • sysctl -w net.ipv4.tcp_syn_retries = 2 ,做為客戶端可以設置SYN包的重試次數,默認5次(大約180s)引用校長的話:僅僅重試2次,現代網絡夠了
  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次,現代網絡夠了
  3. 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
  4. FIN_WAIT1
    • 主動關閉的一方,在發出FIN請求之后,也就是在 TCP四次握手 的第1步
  5. CLOSE_WAIT
    • 被動關閉的一方,在接受到客戶端的FIN后,也就是在 TCP四次握手 的第2步
  6. FIN_WAIT2
    • 主動關閉的一方,在接受到被動關閉一方的ACK后,也就是 TCP四次握手 的第2步
    • sysctl -w net.ipv4.tcp_fin_timeout=30, 可以設定被動關閉方返回FIN后的超時時間,有效回收鏈接,避免syn-flood.
  7. LASK_ACK
    • 被動關閉的一方,在發送ACK后一段時間后(確保客戶端已收到),再發起一個FIN請求。也就是 TCP四次握手 的第3步
  8. 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)
    • sysctl -w net.ipv4.tcp_tw_reuse =1, 快速回收并重用TIME_WAIT的鏈接, 貌似和tw_recycle有沖突,不能重用就回收?
    • net.ipv4.tcp_max_tw_buckets: 處于time_wait狀態的最多鏈接數,默認為180000.

?

相關說明

  1. 主動關閉方在接收到被動關閉方的FIN請求后,發送成功給對方一個ACK后,將自己的狀態由FIN_WAIT2修改為TIME_WAIT,而必須再等2倍的MSL(Maximum Segment Lifetime,MSL是一個數據報在internetwork中能存在的時間)時間之后雙方才能把狀態 都改為CLOSED以關閉連接。目前RHEL里保持TIME_WAIT狀態的時間為60秒
  2. keepAlive策略可以有效的避免進行三次握手和四次關閉的動作

其他網絡重要參數

net.ipv4.tcp_rmem 參數

  • 默認值: min=4096 default=87380 max=4194304

?

net.ipv4.tcp_wmem 參數

  • 默認值: min=4096 default=16384 max=4194304

?

?


?

tcpdump

??? tcpdump是linux系統自帶的抓包工具,主要通過命令行的方式,比較適合在線上服務器進行抓包操作,如果是windows或者ubuntu完全可以選擇一些圖形化的工具,ubuntu比較推薦用wireshark,安裝方式很簡單sudo apt一下即可。

?

命令行格式:

tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ][ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ][ -T 類型 ] [ -w 文件名 ] [表達式 ]

?

常用的參數:

-l    使標準輸出變為緩沖行形式;
-n    不把網絡地址轉換成名字;

-c    在收到指定的包的數目后,tcpdump就會停止;
-i    指定監聽的網絡接口;
-w    直接將包寫入文件中,并不分析和打印出來;
-s???????? 指定記錄package的大小,常見 -s 0 ,代表最大值65535,一半linux傳輸最小單元MTU為1500,足夠了

-X???????? 直接輸出package data數據,默認不設置,只能通過-w指定文件進行輸出

?

常用表達式:

  1. 關于類型的關鍵字,主要包括host,net,port
  2. 傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src
  3. 協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型
  4. 邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'or' ,'||'
  5. 其他重要的關鍵字如下:gateway, broadcast,less,greater

實際例子:

1.?? http數據包抓取 (直接在終端輸出package data)

tcpdump tcp port 80 -n -X -s 0?? 指定80端口進行輸出

?

2.? 抓取http包數據指定文件進行輸出package

tcpdump tcp port 80 -n -s 0? -w /tmp/tcp.cap

?

對應的/tmp/tcp.cap基本靠肉眼已經能看一下信息,比如http Header , content信息等

?

3.? 結合管道流

tcpdump tcp port 80 -n -s 0? -X -l | grep xxxx

?

這樣可以實時對數據包進行字符串匹配過濾

?

4. mod_proxy反向代理抓包

線上服務器apache+jetty,通過apache mod_proxy進行一個反向代理,80 apache端口, 7001 jetty端口

?

apache端口數據抓包: tcpdump tcp port 80 -n -s 0 -X? -i eth0   注意:指定eth0網絡接口

jetty端口數據抓包: tcpdump tcp port 7001 -n -s 0 -X? -i?lo???????????注意:指定Loopback網絡接口

?

5. 只監控特定的ip主機

tcpdump tcp host 10.16.2.85 and port 2100 -s 0 -X 

?

需要使用tcp表達式的組合,這里是host指示只監聽該ip

?

?

小技巧:

1. 可結合tcpdump(命令) + wireshark(圖形化)

操作: 

  • 在服務器上進行tcpdump -w /tmp/tcp.cap 指定輸出外部文件
  • scp /tmp/tcp.cap? 拷貝文件到你本地
  • wireshark &  啟動wireshark
  • 通過 File -> Open  打開拷貝下來的文件,這樣就可以利用進行數據包分析了
  • 剩下來的事就非常方便了

2.?? 服務器上直接安裝wireshark +? X11協議反向輸出到本機

注意: 

  • wireshark如果要開啟網絡監控,需要通過root方式啟動,否則無法直接通過網卡進行數據抓包
  • X11的反向輸出,需要客戶機支持X11協議,如果是ubuntu天生支持很方便,如果是windows需要安裝個軟件

?


參考資料

  1. 李濤 郵件資料
  2. man tcp
  3. http://blog.sina.com.cn/s/blog_466c66400100bi2n.html~type=v5_one&label=rela_prevarticle
  4. http://www.iteye.com/topic/624598
  5. http://baike.baidu.com/view/76504.htm ?(tcpdump)

tcp鏈接的幾種狀態&tcpdump抓包


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 奇米第四色在线观看 | 国内毛片视频 | 狠狠色很很在鲁视频 | 国内精品美女久久久久 | 欧美性狂猛bbbbxxxx | 久久综合九色综合97婷婷女人 | 视频一区二区欧美日韩在线 | a毛片免费 | 久久久久国产成人精品亚洲午夜 | 亚洲精品另类 | 国产在线看片护士免费视频 | 亚洲天堂一区在线 | 欧美黄页网 | 97久久国语露脸精品对白 | 国内精品视频一区二区八戒 | 欧美一级片在线免费观看 | 色偷偷久久 | 欧美在线成人午夜网站 | 拍拍拍精品视频在线观看 | 国产日韩欧美精品在线 | 欧美激情aa毛片 | 老子午夜精品我不卡影院 | 操天天操| 男人的天堂久久香蕉国产 | 精品国产91久久久久久久 | 七七久久综合 | 一级毛片全部免费播放 | 欧美色另类 | 97夜夜澡人人爽人人免费 | 亚洲精品久中文字幕 | 亚洲 欧美 自拍 卡通 综合 | 99视频在线免费看 | 日本一级毛片免费播 | 深夜影院老司机69影院 | 91久久精品午夜一区二区 | 精品欧美在线 | 精品视频在线视频 | 精品九九久久 | 国产亚洲精品久久精品6 | 免费一区二区三区四区五区 | 日韩中文字幕精品一区在线 |