精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TCP連接建立中的異常

麥辣雞腿堡 ? 來源:盼盼編程 ? 作者:盼盼編程 ? 2023-10-08 17:01 ? 次閱讀

建連接時SYN超時問題

如果 server 端因為某種情況沒有收到 client 回來的 ACK,那么,這個連接處還處于一個未建立的狀態。于是,server端如果在一定時間內沒有收到,則 server 端的 TCP 會重發 SYN_ACK。

Linux下,默認重試次數為5次,重試的間隔時間從1s開始每次都翻倍,5次的重試時間間隔為1s, 2s, 4s, 8s, 16s,總共31s,第5次發出后還要等32s都知道第5次也超時了。如果第五次重傳之后,還未收到客戶端的 ACK,server 端的 TCP 才會把斷開這個連接。

關于SYN Flood攻擊

攻擊者短時間偽造不同 IP 地址的 SYN 報文,服務端每接收到一個 SYN 報文,就進入SYN_RCVD 狀態,但服務端發送出去的 ACK + SYN 報文,無法得到未知 IP 主機的 ACK 應答,久而久之就會占滿服務端的 SYN 接收隊列(未連接隊列),使得服務器不能為正常用戶服務。

避免方式

設置 tcp_syncookies = 1。當 SYN 隊列滿了后,TCP 會通過源地址端口、目標地址端口和時間戳打造出一個特別的 Sequence Number 發回去(又叫cookie)。

如果是攻擊者則不會有響應,如果是正常連接,則會把這個 SYN Cookie 發回來,然后服務端可以通過 cookie 建連接。

設置 netdev_max_backlog 的值,確定鏈接隊列的大小。當網卡接收數據包的速度大于內核處理的速度時,會有一個隊列保存這些數據包。

通過設置 netdev_max_backlog 的值,確定 SYN_RCVD 狀態連接的最大個數。

通過設置 tcp_abort_on_overflow 的值。當超出處理能時,對新的 SYN 直接回報 RST,丟棄連接。

斷開連接中的異常

TIME_WAIT數量太多

從上面的描述可以知道,TIME_WAIT 是個很重要的狀態,但是如果在大并發的短鏈接下,TIME_WAIT 就會太多。TIME_WAIT過多會占用大量的內存資源和端口資源。

優化法一:tcp_tw_reuse

設置tcp_tw_reuse = 1,則可以復用處于 TIME_WAIT 的 socket 為新的連接所用。

有一點需要注意的是,tcp_tw_reuse 功能只能用客戶端(連接發起方),因為開啟了該功能,在調用 connect() 函數時,內核會隨機找一個 time_wait 狀態超過 1 秒的連接給新的連接復用。

使用 tcp_timestamps = 1 選項,還有一個前提,需要打開對 TCP 時間戳的支持,即這個時間戳的字段是在 TCP 頭部的「選項」里,用于記錄 TCP 發送方的當前時間戳和從對端接收到的最新時間戳。

由于引入了時間戳,我們在前面提到的 2MSL 問題就不復存在了,因為重復的數據包會因為時間戳過期被自然丟棄。

優化法二:tcp_max_tw_buckets

這個值默認為 18000,當系統中處于 TIME_WAIT 的連接一旦超過這個值時,系統就會將后面的 TIME_WAIT 連接狀態重置。

這個方法過于暴力,而且治標不治本,帶來的問題遠比解決的問題多,不推薦使用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡
    +關注

    關注

    14

    文章

    7517

    瀏覽量

    88627
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1350

    瀏覽量

    78986
  • 連接
    +關注

    關注

    2

    文章

    95

    瀏覽量

    20950
  • 服務端
    +關注

    關注

    0

    文章

    66

    瀏覽量

    6987
收藏 人收藏

    評論

    相關推薦

    TCP和UDP建立連接的差異和可靠性的差異

    TCP 建立連接需要經過三次握手,同時 TCP 斷開連接需要經過四次揮手,這也表示 TCP 是一
    發表于 09-02 16:10 ?755次閱讀

    如何標識一個TCP連接

    tcp應用,server事先在某個固定端口監聽,client主動發起連接,經過三路握手后建立tcp
    的頭像 發表于 10-10 10:33 ?2892次閱讀

    STM32H7+FREERTOS+LWIP建立TCP連接連接不穩定怎么解決?

    利用ST的Demo建立TCP連接,但是當建立TCP連接超過4個時,
    發表于 04-25 06:05

    14-TCP 協議(連接異常與RST)

    1. RST 段當 TCP連接出現嚴重的錯誤時,必須釋放連接。通過將 TCP 首部的 RST 標志位置 1,就可以通知對端發生錯誤,以終止
    發表于 07-24 10:01

    為什么建立TCP連接有時成功有時失敗?

    時開發板自帶的里程改的,TCP這部分基本沒有改,只是增加了自己的應用進去。首次使用以太網接口,還不太清楚建立連接的機理,有了解這塊的朋友嗎,請問建立
    發表于 09-19 04:36

    tcp連接異常怎么回事

    使用ucosiiilwip ,enc28j60。 在做tcp client測試時,每2s發送一次數據,10分鐘左右就出現異常。通過抓包工具,發現是tcp連接時 發送了 RTS ACK
    發表于 05-20 09:57

    CH9121配置成TCP Client/Server,無法和電腦建立TCP連接怎么解決?

    9121配置成TCP Client/Server,無法和電腦建立TCP連接
    發表于 10-12 08:18

    TCP連接建立與終止

    學習TCP-IP的很好的書。TCP-IP詳解卷1。
    發表于 05-10 15:44 ?0次下載

    大神告訴你TCP建立連接為什么是三次握手

    所謂三次握手(Three-Way Handshake)即建立TCP連接,是指建立一個TCP連接
    的頭像 發表于 04-16 11:43 ?1w次閱讀
    大神告訴你<b class='flag-5'>TCP</b><b class='flag-5'>建立</b><b class='flag-5'>連接</b>為什么是三次握手

    TCP通信通過網絡調試助手與S7-1200建立TCP連接

    S7-1200 V4.5 版本開始支持網絡視圖組態開放式用戶通信連接,不需要在程序調用 TCON 等建立連接指令,只需要調用發送接收指令即可實現數據的收發。下面以
    的頭像 發表于 07-06 15:39 ?1.1w次閱讀

    要是沒有一端進行監聽是否可以建立TCP連接呢?

    TCP 網絡通信過程,我們都是先有 server 端調用 listen 監聽某個端口號,然后 client 向 server 發起連接請求,最終建立
    的頭像 發表于 11-16 17:42 ?2131次閱讀
    要是沒有一端進行監聽是否可以<b class='flag-5'>建立</b>起<b class='flag-5'>TCP</b><b class='flag-5'>連接</b>呢?

    什么是Socket連接?Socket與TCP連接的關系

    主機 A 的應用程序必須通過 Socket 建立連接才能與主機B的應用程序通信,而建立 Socket 連接需要底層 TCP/IP 協議來
    發表于 03-31 15:10 ?1019次閱讀

    TCP通信過程的長連接與短連接是什么?

    當面試官問你:TCP 通信過程的長連接與短連接是什么?
    的頭像 發表于 08-08 11:30 ?1123次閱讀
    <b class='flag-5'>TCP</b>通信過程<b class='flag-5'>中</b>的長<b class='flag-5'>連接</b>與短<b class='flag-5'>連接</b>是什么?

    TCP連接建立與中止

    常重要的 。 TCP 連接建立可以簡單地稱為三次握手,而連接的中止則可以稱為四次揮手。 建立連接
    的頭像 發表于 10-08 16:52 ?705次閱讀

    TCP的長連接和短連接

    TCP在真正開始進行數據傳輸之前,Server 和 Client 之間必須建立一個連接。當數據傳輸完成后,雙方不再需要這個連接時,就可以釋放這個連接
    的頭像 發表于 11-13 10:46 ?983次閱讀