这个 TCP 问题你得懂:Cannot assign requested address

403 说明权限不足,也就是说我们的子系统到鉴权中心拉取权限失败了。直接登录到子系统服务器,手动执行拉取权限程序,的确是拉不到。

我的推测没有问题,难道网络不通了?telnet 目标端口试试,然后 Linux 给我返回了这个错误信息:

Cannot assign requested address

原因

产生这个错误的原因是由于 Linux 分配的客户端连接端口用尽,无法建立 socket 连接导致的。

我们都知道,建立一个连接需要四个部分:目标 IP,目标端口,客户端 IP 和客户端端口。其中前三项是不变的,只有客户端端口不断变化。

那么在大量频繁建立连接时,而端口又不是立即释放,默认是 60s,就会出现客户端端口不够用的情况。

这就是这个问题的本质。

接下来使用两个命令来验证一下:

查看连接数:

netstat -ae | wc -l

netstat -ae | grep TIME_WAIT | wc -l

查看可用端口范围:

sysctl -a | grep port_range

net.ipv4.ip_local_port_range = 50000 65000

结果就是连接数是远大于可用端口数的。

解决

怎么解决呢?有两个方案:

  1. 调低 TIME_WAIT 时间

  2. 调高可用端口范围

调低 TIME_WAIT 时间

编辑内核文件 /etc/sysctl.conf,增加以下内容:

// 表示开启 SYN Cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,

// 可防范少量 SYN 攻击,默认为 0,表示关闭;

net.ipv4.tcp_syncookies = 1

// 表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭;

net.ipv4.tcp_tw_reuse = 1

// 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为 0,表示关闭。

net.ipv4.tcp_tw_recycle = 1

// 修改系默认的 TIMEOUT 时间,默认为 60s

net.ipv4.tcp_fin_timeout = 30

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python爬虫全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
img

比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:python)
[外链图片转存中…(img-sxOgpjK5-1711104210850)]

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值