日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

重学TCP协议(12)SO_REUSEADDR、SO_REUSEPORT、SO_LINGER

發布時間:2023/11/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重学TCP协议(12)SO_REUSEADDR、SO_REUSEPORT、SO_LINGER 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. SO_REUSEADDR

假如服務端出現故障,主動斷開連接以后,需要等 2 個 MSL 以后才最終釋放這個連接,而服務重啟以后要綁定同一個端口,默認情況下,操作系統的實現都會阻止新的監聽套接字綁定到這個端口上。啟用 SO_REUSEADDR 套接字選項可以解除這個限制。

2. SO_REUSEPORT

默認情況下,一個 IP、端口組合只能被一個套接字綁定,Linux 內核從 3.9 版本開始引入一個新的 socket 選項 SO_REUSEPORT,又稱為 port sharding,允許多個套接字監聽同一個IP 和端口組合。

2.1 多進程網絡模型

  • 主進程 + 多個 worker 子進程監聽相同的端口(導致驚群問題)

  • 多進程 + REUSEPORT

2.2 驚群問題

多進程/多線程同時監聽同一個套接字,當有網絡事件發生時,所有等待的進程/線程同時被喚醒,但是只有其中一個進程/線程可以處理該網絡事件,其它的進程/線程獲取失敗重新進入休眠。

2.3 accept系統調用的驚群問題

在Linux 2.6之前,會出現驚群問題。而在后面的版本中,引入了WQ_FLAG_EXCLUSIVE 選項解決了 accept 調用的驚群問題。

2.4 epoll系統調用的驚群問題

當有新的網絡事件發生時,阻塞在 epoll_wait 的多個進程同時被喚醒。在這種情況下,epoll 的驚群還是存在的。

2.5 SO_REUSEPORT原理

內核為處于 LISTEN 狀態的 socket 分配了大小為 32 哈希桶。監聽的端口號經過哈希算法運算打散到這些哈希桶中,相同哈希的端口采用拉鏈法解決沖突。

  • 當收到客戶端的 SYN 握手報文以后,會根據目標端口號的哈希值計算出哈希沖突鏈表

  • 對于設置了 SO_REUSEPORT 選項的 socket 經過二次哈希找到對應的 SO_REUSEPORT group,從中隨機選擇一個進行處理。

  • 2.6 SO_REUSEPORT作用

    • 內核有數據到來的時候就會把請求均衡的分給不同的socket,也就是不同的線程了,這樣內核可以自動的做到負載均衡
    • 支持滾動升級
  • 新啟動一個新版本 v2 ,監聽同一個端口,與 v1 舊版本一起處理請求。
  • 發送信號給 v1 版本的進程,讓它不再接受新的請求
  • 等待一段時間,等 v1 版本的用戶請求都已經處理完畢時,v1 版本的進程退出,留下 v2 版本繼續服務
  • 2.7 SO_REUSEPORT安全性

    出于安全性考慮,防止端口劫持

    • 只有effective-user-id相同的服務器進程才能監聽同一ip:port
    • 只有第一個啟動的進程啟用了 SO_REUSEPORT 選項,后面啟動的進程才可以綁定同一個端口。

    3. SO_LINGER

    設置函數close()關閉TCP連接時的行為。缺省close()的行為是,如果有數據殘留在socket發送緩沖區中則系統將繼續發送這些數據給對方,等待被確認,然后返回。

    SO_LINGER選項使用如下結構:

    struct linger {int l_onoff;int l_linger; };
  • l_onoff為0,則該選項關閉,l_linger的值被忽略,close()用上述缺省方式關閉連接。
  • l_onoff非0,l_linger為0,close()用下面的a方式關閉連接。
  • l_onoff非0,l_linger非0,close()用下面的b方式關閉連接。
    • a.立即關閉該連接,通過發送RST分組(而不是用正常的FIN|ACK|FIN|ACK四個分組)來關閉該連接。至于發送緩沖區中如果有未發送完的數據,則丟棄。主動關閉一方的TCP狀態則跳過TIMEWAIT,直接進入CLOSED。

    • b.將連接的關閉設置一個超時。如果socket發送緩沖區中仍殘留數據,進程進入睡眠,內核進入定時狀態去盡量去發送這些數據。

      在超時之前,如果所有數據都發送完且被對方確認,內核用正常的FIN|ACK|FIN|ACK四個分組來關閉該連接,close()成功返回。

      如果超時之時,數據仍然未能成功發送及被確認,用上述a方式來關閉此連接。close()返回EWOULDBLOCK。

    參考文章

    深入理解 TCP 協議:從原理到實戰

    總結

    以上是生活随笔為你收集整理的重学TCP协议(12)SO_REUSEADDR、SO_REUSEPORT、SO_LINGER的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 天天狠天天插天天透 | 色窝窝综合色窝窝久久 | 国产伦精品一区二区三区妓女下载 | 日韩一级片av | 91精品国产一区二区三区蜜臀 | 成人自拍偷拍 | 欧美一区2区| 超碰人人人人 | 日韩欧美天堂 | 欧美黑人又粗又大的性格特点 | 欧美天天爽 | 成年人在线观看网站 | 中文字幕在线精品 | 久久国产精品免费观看 | 97碰| 波多野结衣高清在线 | 国产精品九九 | 91插插插插 | 中文字幕在线视频免费 | 超碰免费在线 | 麻豆视频传媒入口 | 国产成人小视频 | 男女午夜免费视频 | 国产亚洲第一页 | 亚洲天堂手机 | 久久久久久久国产精品视频 | 国产一区在线视频 | 精品一区二区毛片 | 谁有毛片网站 | 久草视频在线免费 | 野外性满足hd | 动漫精品一区一码二码三码四码 | 69av一区二区三区 | 国产亚洲色婷婷久久99精品 | 欧美一区二区在线观看视频 | 91九色在线播放 | 久久久久亚洲色欲AV无码网站 | 成人av一区二区三区在线观看 | 亚洲精品一区中文字幕乱码 | 9191国产精品 | 蜜臀久久99静品久久久久久 | 一女三黑人理论片在线 | 亚洲自拍偷拍精品视频 | 亚洲福利网 | 蜜桃视频导航 | 超碰青娱乐 | 悠悠色综合网 | 国产福利影院 | 黄色午夜网站 | 人人艹人人爱 | 一道本不卡视频 | 无码国精品一区二区免费蜜桃 | 在线观看av网站 | 黄色片网站免费在线观看 | 操屁股视频 | 二区三区 | 亚洲色图网友自拍 | 国产真实乱人偷精品视频 | 国产精品久久久久久亚洲毛片 | 日韩国产在线观看 | 亚洲精品久 | 在线观看黄色片网站 | 免费观看在线观看 | www,日韩 | av巨作 | 成人做爰9片免费视频 | 黄色片在线免费看 | 色婷婷综合久久久久中文 | 第四色视频 | 黄色片久久 | 国产精一区 | 国产成人久久77777精品 | 久草新在线 | 欧美一卡二卡三卡四卡 | 午夜极品 | 麻豆av在线播放 | 日韩一区二区免费视频 | 国产乱女淫av麻豆国产 | 久久久久久久久久99 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 色婷婷视频在线观看 | 成人欧美一区二区三区黑人免费 | 欧美无人区码suv | 麻豆av一区 | 免费黄色a级片 | 午夜不卡福利视频 | 中文字幕电影一区二区 | 青娱乐免费在线视频 | 国产一区二区激情 | 首尔之春在线看 | 精品在线视频一区二区 | 黄色录像一级大片 | 午夜影院免费体验区 | 三上悠亚亚洲一区 | 人人看超碰| 色综合天天综合网国产成人网 | 久久亚洲国产成人精品性色 | 国产成人精品二区三区亚瑟 | 日本三级不卡 |