请问一下,在服务器上开了一个端口9900,建了一个SOCKET服务器,为什么我的客户端没有向这个服务器端的端口发送数据,它确收到了数据,请帮忙分析一下,这个数据来自哪里
还有一个问题是:
为什么我这个云服务器,公网IP是 47.104.x.x 为什么直接写在监听端口左侧的IP时,不能用,写本机的172.31.x.x这个地址这个SOCKET服务器也不能正常用,为什么只能写0.0.0.0,时才能正常用。
还有我这个云服务器的公网IP 是 47.104.x.x 为什么不能填写到我的网卡的IP地址设置中?
网络数据首先到达网卡,然后进入内核,由网络协议栈去处理,那么内核是如何进行数据分发的呢?它怎么知道该如何把数据交给特定的用户进程呢?
这时,就需要 socket 发挥作用了!
socket 中存储了特定的四元组: 源ip+port,目的ip+port;
TCP Client :
Client 端,一个连接会占用一个系统端口。
TCP Server:
Server 端,所有连接共享同一个端口。
当系统接收 TCP 网络数据时,根据端口定位到特定的进程,然后进程根据 socket id 区分来自不同 client 的数据。系统中所有 socket 中的四元组信息,必定唯一,不可能重复!
关于您的第一个问题,服务器端口9900收到数据但客户端并未发送,这可能有以下几种情况:
有其他客户端连接到了这个端口并发送了数据。
服务器程序可能在监听的过程中接收到了其他类型的网络事件,例如TCP连接的建立或断开,这些事件也可能被视为"数据"。
有可能是网络攻击,例如端口扫描或者DDoS攻击。
关于您的第二个问题,云服务器监听地址不能设置为公网IP或者本机地址,只能设置为0.0.0.0,这是因为:
0.0.0.0表示监听所有的网络接口,包括公网和私网。
云服务器的公网IP通常是通过网络地址转换(NAT)实现的,服务器本身并不直接拥有这个IP,所以不能直接监听这个IP。
172.31.x.x是私有地址,可能因为云服务提供商的网络设置,这个地址并不能被公网访问,所以监听这个地址的服务器也不能被公网访问。
关于您的第三个问题,云服务器的公网IP不能填写到网卡的IP地址设置中,这是因为:
云服务器的公网IP通常是通过网络地址转换(NAT)实现的,服务器本身并不直接拥有这个IP,所以不能直接设置这个IP。
云服务提供商通常会管理所有的公网IP,并通过他们的网络设备将公网IP映射到您的云服务器上。您的云服务器只需要设置一个私有IP,然后云服务提供商的网络设备会将公网IP的流量转发到您的私有IP上。