端口没被占用,怎么会bind失败呢?

今天在一个服务器上部署一个webserver的时候,

提示我bind端口失败,

我习惯性的用netstat看了下,没有被占用啊!

把问题分享出来后,给力的同事们搜索到了ip_local_port_range这个东西

这个东西对应的是/proc/sys/net/ipv4/ip_local_port_range文件

我打开后发现它的内容是:

1024 65000

然后我查了一下,这两个数字就是规定了一个端口范围

而这个文件规定了所谓的“临时端口”的可用端口范围

比如一个程序通过socket请求了本机外的一个服务,

以为内socket的要求是通信的双发都是一个ip加一个端口的,

我们在请求时,只会指定要请求的ip和端口,并没有指定本机的,

那这时按照Linux的策略,是自动分配一个临时端口的

而这个临时端口可取的范围就是这个ip_local_port_range

ip_local_port_range还有一个隐藏的属性,就是这个临时端口范围内的端口,不能被bind

这也就是我一开始遇到的问题的原因了

当我想编辑这个文件来修改范围时,发现修改后时无法保存的

然后搜索了一下,说要永久修改,可以:

vim /etc/sysctl.conf

修改其中的net.ipv4.ip_local_port_range

保存后执行sysctl -p让其生效

时间: 2024-10-05 10:27:16

端口没被占用,怎么会bind失败呢?的相关文章

80端口被占用,Apache启动失败。√MySQL5.1已启动,如何快速解决?

在织梦系统本地安装过程中,使用APMServ配置本地环境,我测试的时候80端口没有被占用,很顺利的Apache成功启动,后来换了台电脑,怎么都启 动不了,不是说Apache启动失败.√MySQL5.1已启动就是Apache启动失败.√MySQL5.1启动失败,后来慢慢摸索终于弄成功了.很多 新手肯定也像我一样经常碰到这种问题.记录下来,小事情也有大意义. 1.一开始我的Apache安装的路径是D:\何碧玉个人\APMServ5.2.6,没注意到Apache安装的路径是不能含有汉字和空格的,所以第

端口被sysmtem占用

今天启动Apache的时候老是提示失败,很简单,使用 netstat -ano 发现80端口被占用.如图所示: 按照PID 来说:在任务管理器中查看PID 的进程名 既然是system.那么 应该不回是真正的系统. 而是 微软的其他系列产品的进程在运行. [注意:我已经在服务 services.msc中结束了 IIS ADmin 服务] 但是 其实 IIS 服务真正没有关闭. 80端口也被IIS 7.5占用: 于是打开 IIS 管理器. 在 IIS 根目录右击 --->停止 之后在回头来 继续在

java web中 8080端口号被占用的问题处理,终于明白了 Address already in use: JVM_Bind(端口冲突)

1.错误描述 2011-7-20 11:05:18 org.apache.catalina.core.StandardServer await严重: StandardServer.await: create[8005]: Java.NET.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.Net.PlainSocketImpl.

Windows环境下,用netstat命令查看某个端口号是否占用

目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. 操作:操作分为两步:(1)查看该端口被那个PID所占用;方法一:有针对性的查看端口,使用命令 Netstat –ano|findstr "<端口号>",如图,最后一列为PID.图中的端口号为1068,所对应的PID为3840. (a)图 方法二:查看所有的,然后找到对应的端口和PID. (b)图 第一幅图中的5列就是上面(a)图对应的5列 (2)查看该PID对应的进程名称. 方法一

ADB连接不上手机,端口5037被占用的情况解决

最近在搞手机APP自动化测试,adb连接手机时提示端口被占用 检测5037端口被谁占用,cmd窗口输入命令:netstat -ano | findstr "5037" (注意"5037"前面有个空格,这个问题害我排查了好一会), 记住PID, 在cmd下输入tasklist | findstr "12540": 查看这个进程是由哪个程序创建的(12540就是占用5037端口的一个进程的PID): 然后执行:taskkill /f /pid 125

apache端口有时被占用,解决策略

apache端口有时被占用,解决策略如下: 方一: cmd-netstat ano 查找PID,然后kill 方二: apache服务开启不了,有时是因为iis服务启动的缘故,可直接 cmd--net stop iisadmin /y 另附iis启动关闭命令: 启动IIS: net start iisadmin    (IIS的整个服务) net start w3svc       (WWW网页WEB服务) 停止IIS: net stop iisadmin /y     (会自动停止www.ft

80端口被system 占用解决方法

前几天,将tomcat的端口8080改为80后,服务器启动时总是报一大堆异常,原因是80端口被占用,但是我提前就将IIS服务关闭了,后来才知道IIS服务没有真正关闭,一下是解决方法: netstat -ano 发现80端口被占用.如图所示: 按照PID 来说:在任务管理器中查看PID 的进程名 既然是system.那么 应该不回是真正的系统. 而是 微软的其他系列产品的进程在运行. [注意:我已经在服务 services.msc中结束了 IIS ADmin 服务] 但是 其实 IIS 服务真正没

windows 2008 r2 系统默认80端口被系统占用的处理

--windows 2008 r2 系统默认80端口被系统占用的处理 --使用netstat 命令查看指定端口netstat -ano | findstr :80----如下所示:本地的80端口被进程为4的占用 TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4 TCP    192.168.1.207:60652    221.233.41.28:80       CLOSE_WAIT      1716

linux 查看端口是否被占用

查看端口是否被占用: netstat -anp | grep port lsof -i:port 查看端口被那个进程占用: netstat -anp | grep port 或使用 lsof -i:port 显示结果的有进程id, 再ps -ef | grep pid即可 查看进程(如java进程)使用的端口: ps -aux | grep java 找到pid 再lsof -i | grep pid 或使用netstat -anp | grep pid即可