电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解PHP Swoole與TCP三次握手

瀏覽:6日期:2022-09-07 10:54:09
目錄握手常見問題連接拒絕Operation now in progress丟包錯(cuò)誤ipbacklogSYN Flood握手常見問題

1、連接拒絕

2、Operation now in progress 多是因?yàn)閬G包、錯(cuò)誤ip、backlog滿了&阻塞&tcp_abort_on_overflow=0

3、min(maxconn, backlog) ss -lt

連接拒絕

在TCP三次握手的時(shí)候,客戶端發(fā)送SYN這個(gè)包給服務(wù)端,服務(wù)端不接受這個(gè)請(qǐng)求,操作系統(tǒng)直接返回了一個(gè)RST的包,來拒絕連接的請(qǐng)求。

最常見的情況就是客戶端去請(qǐng)求某個(gè)服務(wù)器,服務(wù)端沒有綁定對(duì)應(yīng)的端口。

測(cè)試代碼如下,服務(wù)端代碼:

<?php​$server = new SwooleServer(’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();

這里,服務(wù)端綁定的端口是9501。

啟動(dòng)服務(wù)器:

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

客戶端代碼:

<?php​$client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);var_dump($client->connect(’127.0.0.1’, 9500));

這里,客戶端請(qǐng)求的端口是9500。

啟動(dòng)客戶端:

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

報(bào)錯(cuò):

Error: Connection refused[111]

Operation now in progress

這個(gè)錯(cuò)誤的絕大部分原因是因?yàn)檫B接超時(shí)了。

丟包

例如路由器、網(wǎng)關(guān)出現(xiàn)了故障,包被丟了。

錯(cuò)誤ip

例如客戶端請(qǐng)求了一個(gè)錯(cuò)誤的ip,那么路由器自然也就路由不到。

測(cè)試代碼如下,客戶端代碼:

<?php​$client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);var_dump($client->connect(’8.8.8.8’, 9501));

這里,我訪問的是谷歌的DNS服務(wù)器。因?yàn)槲覜]有FQ,所以是訪問不了這個(gè)IP的。因此,我們發(fā)送的包是到達(dá)不了8.8.8.8服務(wù)器的。

啟動(dòng)客戶端:

~/codeDir/phpCode/hyperf-skeleton # php client.php ​Warning: SwooleClient::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 4bool(false)~/codeDir/phpCode/hyperf-skeleton #

報(bào)錯(cuò):

Error: Operation in progress[115]

backlog

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

測(cè)試代碼如下,服務(wù)端代碼:

<?php​$server = new SwooleServer(’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();

要想測(cè)試backlog問題必須在Swoole的SWOOLE_BASE模式下,默認(rèn)的SWOOLE_PROCESS模式是沒有這個(gè)問題的。

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

然后,我們通過sleep(1000);來阻塞住進(jìn)程,使得Swoole不會(huì)繼續(xù)accept連接,從而導(dǎo)致backlog隊(duì)列在某個(gè)時(shí)刻變滿。

客戶端代碼:

<?php​$i = 0;while (true){ $client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); if ($client->connect(’127.0.0.1’, 9501) == false) {break; }}

我們啟動(dòng)服務(wù)器:

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

然后啟動(dòng)客戶端:

~/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: SwooleClient::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 7bool(false)​Warning: SwooleClient::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 7bool(false)^C~/codeDir/phpCode/hyperf-skeleton #

我們會(huì)發(fā)現(xiàn),過一段時(shí)間,客戶端這邊會(huì)報(bào)錯(cuò):

Error: Operation in progress[115]

服務(wù)端這邊輸出:

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

Client: Connect.

因?yàn)楫?dāng)Swoole服務(wù)器從backlog隊(duì)列里面accept一個(gè)連接的時(shí)候,才會(huì)觸發(fā)onReceive回調(diào)函數(shù)。所以,當(dāng)服務(wù)端accept一個(gè)連接之后,Swoole自己就會(huì)陷入阻塞,不會(huì)再accept了。但是需要注意的是,盡管Swoole服務(wù)器自身是阻塞的,操作系統(tǒng)還會(huì)繼續(xù)去把建立好的連接放入backlog隊(duì)列里面。所以,backlog隊(duì)列會(huì)滿。

SYN Flood

除了三次握手成功之后會(huì)使用到的backlog隊(duì)列,還有一個(gè)SYN隊(duì)列。也就是在三次握手時(shí)候,客戶端給服務(wù)端發(fā)送了SYN包,服務(wù)端會(huì)有一個(gè)SYN隊(duì)列來維護(hù)。

與其有關(guān)的內(nèi)核配置:

tcp_max_syn_backlogtcp_synack_retriestcp_syncookies

其中,tcp_max_syn_backlog就是這個(gè)SYN隊(duì)列的長(zhǎng)度。如果大量的SYN包把SYN隊(duì)列塞滿了,那么其他正常的連接過來,服務(wù)端就無法處理。

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

tcp_syncookies的原理就是,客戶端發(fā)送SYN包的時(shí)候,不會(huì)維護(hù)SYN隊(duì)列,而是返回一個(gè)cookie給客戶端。然后客戶端發(fā)送第三次握手的時(shí)候,攜帶這個(gè)cookie值,只有這個(gè)cookie驗(yàn)證通過,服務(wù)端才會(huì)給連接分配資源。

以上就是詳解PHP Swoole與TCP三次握手的詳細(xì)內(nèi)容,更多關(guān)于PHP Swoole與TCP三次握手的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 818手游网_提供当下热门APP手游_最新手机游戏下载 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 耙式干燥机_真空耙式干燥机厂家-无锡鹏茂化工装备有限公司 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 防爆大气采样器-防爆粉尘采样器-金属粉尘及其化合物采样器-首页|盐城银河科技有限公司 | ge超声波测厚仪-电动涂膜机-电动划格仪-上海洪富 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 巨野月嫂-家政公司-巨野县红墙安康母婴护理中心 | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 防伪溯源|防窜货|微信二维码营销|兆信_行业内领先的防伪防窜货数字化营销解决方案供应商 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | BESWICK球阀,BESWICK接头,BURKERT膜片阀,美国SEL继电器-东莞市广联自动化科技有限公司 | 伺服电机_直流伺服_交流伺服_DD马达_拓达官方网站 | 汽车整车综合环境舱_军标砂尘_盐雾试验室试验箱-无锡苏南试验设备有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 一体化污水处理设备_生活污水处理设备_全自动加药装置厂家-明基环保 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 |