握手常见问题
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。
启动服务器:
~/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: Sw

本文探讨了在使用PHP Swoole时TCP三次握手过程中可能遇到的问题,包括连接拒绝、Operation now in progress错误、丢包、错误IP以及backlog导致的连接队列满。还详细分析了SYN Flood攻击及其防范,并提到了内核配置对连接处理的影响。了解这些可以帮助PHP开发者更好地理解和解决Swoole在TCP通信中遇到的挑战。
最低0.47元/天 解锁文章
1167

被折叠的 条评论
为什么被折叠?



