我在服务器上执行如下命令:netstat -anp | grep 6379
查看redis的6379端口情况,结果如下所示:
[root@test001 ~]# netstat -anp | grep 6379tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 949/redis-server 0. tcp 0 0 192.168.0.11:55160 41.92.250.40:6379 ESTABLISHED 3184/php7.4 tcp 0 100 127.0.0.1:6379 127.0.0.1:42116 ESTABLISHED - tcp 0 0 192.168.0.11:55164 41.92.250.40:6379 ESTABLISHED 3216/php7.4 tcp 0 0 127.0.0.1:41684 127.0.0.1:6379 TIME_WAIT - tcp 0 0 127.0.0.1:41688 127.0.0.1:6379 TIME_WAIT - tcp 0 0 127.0.0.1:37384 127.0.0.1:6379 ESTABLISHED 29046/php tcp 0 0 127.0.0.1:42116 127.0.0.1:6379 ESTABLISHED 30970/php-fpm: pool tcp 0 0 192.168.0.11:6379 41.92.250.40:55164 ESTABLISHED 949/redis-server 0. tcp 0 0 192.168.0.11:55156 41.92.250.40:6379 ESTABLISHED 3182/php7.4 tcp 0 0 192.168.0.11:6379 41.92.250.40:55156 ESTABLISHED 949/redis-server 0. tcp 0 0 127.0.0.1:6379 127.0.0.1:37384 ESTABLISHED 949/redis-server 0. tcp 0 0 127.0.0.1:41682 127.0.0.1:6379 TIME_WAIT - tcp 0 0 192.168.0.11:6379 41.92.250.40:55160 ESTABLISHED 949/redis-server 0.
上面的192.168.0.11是内网地址,41.92.250.40是公网地址(当然为了安全我这边是随便改了不是真实的地址)
阿某云买的服务器,上面有两个ip
41.92.250.40(公)
192.168.0.11(私有)
现在我对Local Address 本地地址还有Foreign Address 外部地址不懂,比如以第二条数据为例:
tcp 0 0 192.168.0.11:55160 41.92.250.40:6379 ESTABLISHED 3184/php7.4
这里的55160端口是什么?还有和他配对的是不是最后一条
tcp 0 0 192.168.0.11:6379 41.92.250.40:55160 ESTABLISHED 949/redis-server 0.
感觉正好反过来似的,如何理解这两对的地址加端口?
我的问题是:
根据你的描述,我假设这个公网 IP 是你服务器的 EIP(弹性公网IP),那么我猜整个连接建立的过程是这样的:
请求报文从你服务器的内网口出去之后,送给了41.92.250.40这个地址。41.92.250.40 是EIP,是配置在你的网关上的,所以网关收到了你的请求。报文大概是这样:
192.168.0.11:55160 -> 41.92.250.40:6379
网关收到这个包之后,先会匹配源,替换成服务器的EIP,完成这步之后,报文大概是这样:
41.92.250.40:55160 -> 41.92.250.40:6379
然后发包,匹配目的,发现目的是EIP,对应的内网IP是192.168.0.11,所以再次进行替换:
41.92.250.40:55160 -> 192.168.0.11:6379
41.92.250.40:55160 -> 192.168.0.11:6379
的连接,并把请求送给了redis-server这个进程。综上,你用netstat看到的统计就成了那个样子。
PS:如果41.92.250.40这个地址不是EIP,是真实配置在你服务器接口上的地址,那么第二步里的请求报文根本都不会走出你的服务器,所以大概率你会看到这样的连接:
41.92.250.40:55160 -> 41.92.250.40:6379
本机与另外一台机器有一个连接,本机的地址就是本地地址。另外一台机器的地址是外部地址。
一个连接的两端各有一个端口。端口可以是程序指定的(比如用 bind 启动服务),也可能是自动分配的(比如你连接到某一个服务的时候,自己的端口通常就是自动分配的)。
自动分配的时候端口范围通常一个固定的区间(根据操作系统而不同),所以不同的机器分配到同一个端口号是很正常的。
你说的那个正好反过来,可能只是碰巧另一台机器连了本机的 redis ,也去了它的 redis 。分配的端口号又碰巧是一样的。
本机地址的端口跟外部地址的端口没有任何联系。
本机地址,本机端口,外部地址,外部端口 四个属性决定了一个连接。
如果连接两端是同一台机器,那么一个连接在 netstat 里就会出现两次。比如你给出 127.0.0.1:6379 -- 127.0.0.1:37384 这个连接。
我无法理解为什么这个命令不起作用: 注意:我已经用把上面的链接本地地址弄错了,但我有一些有效的链接本地ipv6地址是端口号。 我得到了一个错误: 我也试着放单引号/双引号,但结果是同样的错误: 我使用的是OpenSSL 1.1.0f版本,它应该支持IPv6。 使用IPv4地址,它可以工作。
所以有几个网站会为你计算你的链接本地ipv6地址,就像这里的这个。 尽管如此,它并没有给出任何有用的关于这个地址是如何计算的,也没有输入参数是什么。那么,如果一个人知道自己的ipv4地址、子网掩码和网关地址,计算链路本地ipv6地址的过程(或算法)是什么?我正在使用SCTP套接字做一个项目,该项目使用ISATAP网络隧道和LL ipv6地址用于构建ISATAP地址。
这是我的docker-compose.yml代码: 下面是我的traefik.toml代码:
问题内容: 我正在一个小型嵌入式系统上工作。当我的linux启动到用户空间时,我知道物理内存中的设备在哪里。我想将它们映射到用户空间虚拟地址。目前,我正在通过内核模块进行操作。我使用vmalloc / kmalloc(取决于大小),然后在返回的虚拟地址上使用ioremap_page_range映射我的物理地址。我不认为这是正确的方法。首先,我分配内存,然后要求内核将虚拟地址空间重新映射到一些不同的
问题内容: 除了手动浏览页面目录条目之外,是否有任何合适的方法可以通过逻辑地址获取物理地址?我在内核的源代码中寻找了此功能,并发现有一个功能可以很好地利用内置的巨大和透明页面支持。但是它没有导出到内核模块(为什么?)… 因此,我不想发明轮子,我认为手动重新实现功能不是很好。 问题答案: 好吧,它看起来可能像这样(在虚拟地址后跟随PTE):
需求是当本地程序请求一个IP地址的时候,映射到另一个ip地址上去。 和DNS不同的是,这里没有解析域名,因此修改hosts不行。 有没有办法或者工具可以做到?