校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 詳解PHP Swoole與TCP三次握手

詳解PHP Swoole與TCP三次握手

熱門標簽:地圖標注平臺怎么給錢注冊 常州地圖標注服務商 百度商鋪地圖標注 衡水外呼系統平臺 注冊400電話申請 新河科技智能外呼系統怎么樣 安裝電銷外呼系統 釘釘打卡地圖標注 福州人工外呼系統哪家強

握手常見問題

1、連接拒絕

2、Operation now in progress 多是因為丟包、錯誤ip、backlog滿了阻塞tcp_abort_on_overflow=0

3、min(maxconn, backlog) ss -lt

連接拒絕

在TCP三次握手的時候,客戶端發送SYN這個包給服務端,服務端不接受這個請求,操作系統直接返回了一個RST的包,來拒絕連接的請求。

最常見的情況就是客戶端去請求某個服務器,服務端沒有綁定對應的端口。

測試代碼如下,服務端代碼:

?php
​
$server = new \Swoole\Server('127.0.0.1', 9501);
​
$server->set([
    'work_num' => 2,
    'backlog' => 128,
]);
​
$server->on('connect', function ($server, $fd)
{
    echo "Client: Connect.\n";
});
​
$server->on('receive', function ($server, $fd, $reactor_id, $data)
{
    var_dump($data);
});
​
$server->on('close', function ()
{
    var_dump('close');
});
​
$server->start();

這里,服務端綁定的端口是9501。

啟動服務器:

1 ~/codeDir/phpCode/hyperf-skeleton # php server.php 

客戶端代碼:

?php
​
$client = new \Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
var_dump($client->connect('127.0.0.1', 9500));

這里,客戶端請求的端口是9500。

啟動客戶端:

~/codeDir/phpCode/hyperf-skeleton # php client.php 
​
Warning: Swoole\Client::connect(): connect to server[127.0.0.1:9500] failed, Error: Connection refused[111] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 4
bool(false)
~/codeDir/phpCode/hyperf-skeleton #

報錯:

Error: Connection refused[111]

Operation now in progress

這個錯誤的絕大部分原因是因為連接超時了。

丟包

例如路由器、網關出現了故障,包被丟了。

錯誤ip

例如客戶端請求了一個錯誤的ip,那么路由器自然也就路由不到。

測試代碼如下,客戶端代碼:

?php
​
$client = new \Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
var_dump($client->connect('8.8.8.8', 9501));

這里,我訪問的是谷歌的DNS服務器。因為我沒有FQ,所以是訪問不了這個IP的。因此,我們發送的包是到達不了8.8.8.8服務器的。

啟動客戶端:

~/codeDir/phpCode/hyperf-skeleton # php client.php 
​
Warning: Swoole\Client::connect(): connect to server[8.8.8.8:9501] failed, Error: Operation in progress[115] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 4
bool(false)
~/codeDir/phpCode/hyperf-skeleton #

報錯:

Error: Operation in progress[115]

backlog

服務器在三次握手的最后一次,即收到客戶端發來的ACK包的時候,會把建立好的連接放到backlog隊列里面。如果Swoole一直不accept連接,那么這個backlog隊列很快就會滿。backlog隊列滿了之后,服務端就會丟棄三次握手的SYN包,讓客戶端重新去連接服務端。

測試代碼如下,服務端代碼:

?php
​
$server = new \Swoole\Server('127.0.0.1', 9501, SWOOLE_BASE);
​
$server->set([
    'work_num' => 2,
    'backlog' => 128,
]);
​
$server->on('connect', function ($server, $fd)
{
    echo "Client: Connect.\n";
    sleep(1000);
});
​
$server->on('receive', function ($server, $fd, $reactor_id, $data)
{
    var_dump($data);
});
​
$server->on('close', function ()
{
    var_dump('close');
});
​
$server->start();

要想測試backlog問題必須在Swoole的SWOOLE_BASE模式下,默認的SWOOLE_PROCESS模式是沒有這個問題的。

這里,我們的backlog大小是128。

然后,我們通過sleep(1000);來阻塞住進程,使得Swoole不會繼續accept連接,從而導致backlog隊列在某個時刻變滿。

客戶端代碼:

?php
​
$i = 0;
while (true)
{
    $client = new \Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
    if ($client->connect('127.0.0.1', 9501) == false)
    {
        break;
    }
}

我們啟動服務器:

~/codeDir/phpCode/hyperf-skeleton # php server.php 

然后啟動客戶端:

~/codeDir/phpCode/hyperf-skeleton # php client.php 
省略了其他的輸出
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
​
Warning: Swoole\Client::connect(): connect to server[127.0.0.1:9501] failed, Error: Operation in progress[115] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 7
bool(false)
​
Warning: Swoole\Client::connect(): connect to server[127.0.0.1:9501] failed, Error: Operation in progress[115] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 7
bool(false)
^C
~/codeDir/phpCode/hyperf-skeleton #

我們會發現,過一段時間,客戶端這邊會報錯:

Error: Operation in progress[115]

服務端這邊輸出:

~/codeDir/phpCode/hyperf-skeleton # php server.php 

Client: Connect.

因為當Swoole服務器從backlog隊列里面accept一個連接的時候,才會觸發onReceive回調函數。所以,當服務端accept一個連接之后,Swoole自己就會陷入阻塞,不會再accept了。但是需要注意的是,盡管Swoole服務器自身是阻塞的,操作系統還會繼續去把建立好的連接放入backlog隊列里面。所以,backlog隊列會滿。

SYN Flood

除了三次握手成功之后會使用到的backlog隊列,還有一個SYN隊列。也就是在三次握手時候,客戶端給服務端發送了SYN包,服務端會有一個SYN隊列來維護。

與其有關的內核配置:

tcp_max_syn_backlog
tcp_synack_retries
tcp_syncookies

其中,tcp_max_syn_backlog就是這個SYN隊列的長度。如果大量的SYN包把SYN隊列塞滿了,那么其他正常的連接過來,服務端就無法處理。

SYN Flood攻擊就是客戶端瘋狂的給服務端發送SYN包,然后服務端每次都會把請求放到SYN隊列里面。但是,客戶端不給服務端回ACK包。如果客戶端不回ACK包,那么服務端就會給客戶端回SYN + ACK包,即第二次握手發送的包。而回復SYN + ACK包的次數就是由tcp_synack_retries參數決定的。如果把tcp_synack_retries設置為0,那么如果服務端沒有收到ACK包,那么服務端就不會重試發送SYN + ACK包了,這樣就減少了SYN隊列里面那個請求的存活時間。

tcp_syncookies的原理就是,客戶端發送SYN包的時候,不會維護SYN隊列,而是返回一個cookie給客戶端。然后客戶端發送第三次握手的時候,攜帶這個cookie值,只有這個cookie驗證通過,服務端才會給連接分配資源。

以上就是詳解PHP Swoole與TCP三次握手的詳細內容,更多關于PHP Swoole與TCP三次握手的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Swoole擴展的6種模式深入詳解
  • php中Swoole的熱更新實現代碼實例
  • swoole鎖的機制代碼實例講解
  • windows系統php環境安裝swoole具體步驟
  • linux系統虛擬主機開啟支持Swoole Loader擴展的方法
  • Swoole源碼中如何查詢Websocket的連接問題詳解
  • 在Windows系統上安裝Cygwin搭建Swoole測試環境的圖文教程
  • php使用goto實現自動重啟swoole、reactphp、workerman服務的代碼
  • Centos7安裝swoole擴展操作示例
  • 詳解Swoole TCP流數據邊界問題解決方案

標簽:六安 唐山 遼陽 鷹潭 白城 克拉瑪依 鶴崗 柳州

巨人網絡通訊聲明:本文標題《詳解PHP Swoole與TCP三次握手》,本文關鍵詞  詳解,PHP,Swoole,與,TCP,三次,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解PHP Swoole與TCP三次握手》相關的同類信息!
  • 本頁收集關于詳解PHP Swoole與TCP三次握手的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    激情伊人五月天久久综合| 国产成人av电影免费在线观看| 亚洲电影中文字幕在线观看| 午夜在线成人av| 日韩极品在线观看| 久久精品国产一区二区三| 日韩电影在线免费看| 日韩高清不卡在线| 黑人巨大精品欧美一区| 久久99精品久久久久久国产越南| 日韩av电影天堂| 国产麻豆成人传媒免费观看| youjizz国产精品| 在线影院国内精品| 99re视频精品| 欧美日韩国产区一| 欧美精品一区二区三区四区| 中文字幕电影一区| 无码av免费一区二区三区试看| 男女男精品视频| 在线视频亚洲一区| 欧美电影精品一区二区| 亚洲色欲色欲www| 极品销魂美女一区二区三区| 国产麻豆成人传媒免费观看| 91网址在线看| 中文字幕欧美国产| 麻豆精品精品国产自在97香蕉| 欧美日韩国产综合一区二区三区 | 国产欧美精品国产国产专区| 日韩在线一区二区三区| 欧美丝袜自拍制服另类| 欧美高清一级片在线观看| 美女看a上一区| 精品污污网站免费看| 综合激情成人伊人| 成人午夜视频免费看| 久久影院视频免费| 另类小说视频一区二区| 777午夜精品免费视频| 亚洲激情欧美激情| 91美女福利视频| 亚洲国产成人在线| 91理论电影在线观看| 亚洲免费成人av| 欧美伊人久久久久久久久影院| 亚洲va欧美va国产va天堂影院| 亚洲欧美日韩一区二区三区在线观看| 日韩在线观看一区二区| 91精品国产91久久久久久一区二区 | 欧美精选一区二区| 国产一区二区三区久久悠悠色av| 精品国产亚洲在线| 成人18视频在线播放| 亚洲一级不卡视频| 日韩欧美精品在线视频| 成人黄色777网| 亚洲成在人线免费| 久久久不卡网国产精品一区| 成人美女在线观看| 免费在线欧美视频| 综合久久给合久久狠狠狠97色| 91国产精品成人| 国产精品888| 亚洲一级电影视频| 国产三级精品视频| 91精品欧美福利在线观看| 国产精品综合一区二区三区| 国产精品午夜电影| 日韩一区二区在线看片| 欧美无砖砖区免费| 成人av免费在线观看| 国内精品国产三级国产a久久 | 国产91丝袜在线观看| 激情欧美一区二区三区在线观看| 亚洲精品成人精品456| 最新不卡av在线| 中文字幕av在线一区二区三区| 日韩视频在线一区二区| 91精品中文字幕一区二区三区| 欧美三片在线视频观看 | 成人av网站免费观看| 欧美网站一区二区| 久久精品这里都是精品| 国产亚洲美州欧州综合国| 亚洲久草在线视频| 久久成人免费电影| 91麻豆6部合集magnet| 日韩精品中午字幕| 亚洲女人的天堂| 成人中文字幕电影| 日韩视频永久免费| 亚洲一区二区三区四区中文字幕| 国产一区不卡在线| 欧美一区二区三区思思人| 一区二区在线看| 一区精品在线播放| 亚洲人成网站色在线观看| 一区2区3区在线看| 免费成人av在线| 成人av网站免费观看| 91福利区一区二区三区| 精品剧情v国产在线观看在线| 欧美日韩亚洲不卡| 91精品在线观看入口| 国产精品网站一区| 美女www一区二区| 99视频精品全部免费在线| 日韩一区二区中文字幕| 国产精品第五页| 国产自产2019最新不卡| 欧美三区在线观看| 亚洲理论在线观看| 国产风韵犹存在线视精品| 欧美精品高清视频| 自拍av一区二区三区| 国产精品资源在线看| 欧美精品日日鲁夜夜添| 亚洲欧美一区二区不卡| 国产一区二区三区日韩| 欧美一区二区视频网站| 亚洲综合久久久久| 在线观看一区不卡| 亚洲老妇xxxxxx| 91福利在线看| 亚洲风情在线资源站| 久久久综合视频| 丝袜诱惑制服诱惑色一区在线观看| 久久激情综合网| av电影天堂一区二区在线| 4438成人网| 日本一区二区综合亚洲| 亚洲日本一区二区三区| 91在线高清观看| 日韩欧美卡一卡二| 日韩1区2区日韩1区2区| 欧美日韩午夜在线| 亚洲h动漫在线| 欧美另类z0zxhd电影| 日韩精品一二三区| 日韩精品一区二区三区在线 | 国产乱码一区二区三区| 国产欧美视频在线观看| 色综合久久久久| 午夜精品福利一区二区三区av | 国产一区999| 亚洲视频免费观看| 日韩一区二区免费高清| 国产一区二区三区| 亚洲欧美日韩综合aⅴ视频| 欧美无砖专区一中文字| 激情欧美一区二区三区在线观看| 中文字幕第一页久久| 欧美日韩国产色站一区二区三区| 另类欧美日韩国产在线| 亚洲欧美日韩电影| 精品99久久久久久| 欧美老肥妇做.爰bbww视频| 国产成人精品一区二区三区四区| 亚欧色一区w666天堂| 欧美国产欧美综合| 日韩欧美中文字幕精品| 91免费版在线| 国产91色综合久久免费分享| 视频一区国产视频| 亚洲综合免费观看高清完整版在线 | 国产视频一区在线播放| 欧美一区三区四区| 欧美日韩色一区| 在线观看亚洲一区| 99精品久久99久久久久| 国产成人精品免费一区二区| 日韩—二三区免费观看av| 亚洲成人资源网| 日韩成人精品在线观看| 亚洲chinese男男1069| 亚洲丰满少妇videoshd| 爽爽淫人综合网网站 | 91精品国产一区二区人妖| 欧美日韩激情在线| 欧美一区二区三区在线电影| 91福利视频网站| 在线不卡免费欧美| 日韩写真欧美这视频| 欧美刺激午夜性久久久久久久| 91精品国产综合久久久蜜臀粉嫩| 3d动漫精品啪啪| 久久久美女艺术照精彩视频福利播放| 久久亚洲影视婷婷| 亚洲欧洲另类国产综合| 亚洲综合成人网| 国产美女在线观看一区| 91香蕉视频污| 亚洲精品一区二区在线观看| 国产精品你懂的| 舔着乳尖日韩一区| 91日韩精品一区| 精品少妇一区二区三区日产乱码| 久久久高清一区二区三区| 亚洲电影视频在线|