你可以在没有互联网的情况下通过 IP/TCP 通话吗?
Can you talk via IP/TCP without internet?
我想知道是否可以使用 socket() 在两台计算机之间直接通信,使用以太网电缆直接将一台计算机的端口连接到另一台计算机。
问题是,由于两台计算机都没有连接到路由器,因此无法为两台计算机提供 IP 地址。
是否可以创建没有 IP 地址的套接字?
拥有合适的软件,您可以为计算机分配内部 IP,并使它们进行通信。这完全取决于您的网络及其处理地址分配的方式。
使用地址的唯一问题是让发件人知道地址并确保收件人使用该地址作为他自己的地址。
例如,如果您决定计算机 1 的 IP 地址为 0.0.0.1
,计算机 2 的 IP 地址为 0.0.0.2
,则您可以进行对话(在您自己的小型对等网络中)。
两台计算机无需路由器即可通过 TCP/IP 或 UDP 进行通信。他们只需要 IP 地址。他们可以通过三种机制获取 IP 地址:
DHCP,这通常是当您插入路由器或连接到 Wifi 网络时发生的情况。
手动 IP 配置,您可以在其中为每个网络接口显式配置一个静态 IP 地址。
Self-assigned link-local addresses,这是现代操作系统在无法从 DHCP 服务器获得任何帮助时通常采用的方式。
最有可能的是,您的两台计算机会求助于#3 并为自己分配一个 169.254.x 范围内的 IP 地址。那么您唯一的问题就是发现实际分配了哪些 IP 地址。为此,您可以使用平台的 command-line ifconfig
/ipconfig
工具。
since neither computer is connecting to a router
简短的网络课程
路由器只需要路由 数据包,顾名思义。这意味着让这些数据包跳转,即将它们传递到下一个网段。
在您的情况下,您不需要任何网络跃点,因为您希望在 LAN(局域网)内进行通信。为了让两台没有 Internet 连接的计算机相互通信,为每台计算机分配一个静态 IP 地址并用以太网电缆将它们连接起来就足够了。这样,您实际上就在它们之间创建了一个网络。
哪个 IP 地址有效?
每个IP地址都是一个唯一的数字。 IPv4 地址是 32 位数字,而 IPv6 地址是 128 位。用于编写它们的点符号(例如 127.0.0.1)使用网络字节顺序(大端)将此数字编码为四个八位字节。 IPv6 地址使用六个八位字节编写,这些八位字节使用十六进制编号系统编写,而不是 IPv4 使用的十进制。
网络接口或网络驱动程序,根据硬件接口是否实现传输层,拒绝任何源地址不适合您为接收接口设置的子网的 IP 数据包。 适合 子网是什么意思?子网掩码是引擎盖下的位掩码,但它可能看起来不像那样,因为它是使用与任何 IP 地址相同的点表示法编写的。因此,要检查 IP 地址 A
是否适合给定基地址 B
和网络掩码 C
的网络,请在 A - B
和 C
之间进行按位与操作; IP 地址适合网络当且仅当 (A - B) & C = (A - B)
。网络基地址和子网掩码用于标识节点(例如计算机)所在的网段。为了以单一、简洁的方式表示两者,发明了 CIDR 表示法——它由后面的网络基地址组成通过网络掩码中前导 1 的位数。例如,127.0.0.0/8 表示基地址为 127.0.0.0 和网络掩码 255.0.0.0.
的网络
当网络节点发送 IP 数据包时,网络中的每个节点都会在硬件级别接收它。然后,如果目标地址适合为具有该地址的节点设置的子网,则该节点将实际接收数据包;否则,如果该节点不是路由器,则该数据包将被忽略;如果是,并且此路由器也设置为源接口的默认网关,则将数据包路由到下一个网段,希望目的节点在那里。
例如,您的家庭 LAN 中有一台计算机,您的家庭网络由 modem/router 组成:后者充当网关,将数据包从您的计算机路由到 Internet。但是,如果您的计算机向您局域网内的另一台计算机发送 TCP 数据包,则路由器不会执行任何操作,并且无论是否有路由器,数据包都会被目标节点接收 - 没有任何路由。
回到原来的问题
您希望两台计算机在 LAN 内相互通信,其中只有一台连接到更广泛的网络,使其可以访问 Internet。这意味着您不想更改可以访问 Internet 的计算机的 IP 地址或子网,但您可以为另一台计算机任意设置任何内容。
假设更广泛网络中计算机的 IP 地址为 192.168.1.100,其网络为 192.168.1.1/24。为了让另一台计算机进行通信,其网络必须与 192.168.1.1/24 相交,并且交集必须同时包含源 IP 地址和要接收的发送数据包的目标地址。然后选择一个像192.168.1.101这样的IP地址和一个像192.168.1.100/31这样的网络就足够了,没有任何默认网关。
我想知道是否可以使用 socket() 在两台计算机之间直接通信,使用以太网电缆直接将一台计算机的端口连接到另一台计算机。
问题是,由于两台计算机都没有连接到路由器,因此无法为两台计算机提供 IP 地址。
是否可以创建没有 IP 地址的套接字?
拥有合适的软件,您可以为计算机分配内部 IP,并使它们进行通信。这完全取决于您的网络及其处理地址分配的方式。
使用地址的唯一问题是让发件人知道地址并确保收件人使用该地址作为他自己的地址。
例如,如果您决定计算机 1 的 IP 地址为 0.0.0.1
,计算机 2 的 IP 地址为 0.0.0.2
,则您可以进行对话(在您自己的小型对等网络中)。
两台计算机无需路由器即可通过 TCP/IP 或 UDP 进行通信。他们只需要 IP 地址。他们可以通过三种机制获取 IP 地址:
DHCP,这通常是当您插入路由器或连接到 Wifi 网络时发生的情况。
手动 IP 配置,您可以在其中为每个网络接口显式配置一个静态 IP 地址。
Self-assigned link-local addresses,这是现代操作系统在无法从 DHCP 服务器获得任何帮助时通常采用的方式。
最有可能的是,您的两台计算机会求助于#3 并为自己分配一个 169.254.x 范围内的 IP 地址。那么您唯一的问题就是发现实际分配了哪些 IP 地址。为此,您可以使用平台的 command-line ifconfig
/ipconfig
工具。
since neither computer is connecting to a router
简短的网络课程
路由器只需要路由 数据包,顾名思义。这意味着让这些数据包跳转,即将它们传递到下一个网段。
在您的情况下,您不需要任何网络跃点,因为您希望在 LAN(局域网)内进行通信。为了让两台没有 Internet 连接的计算机相互通信,为每台计算机分配一个静态 IP 地址并用以太网电缆将它们连接起来就足够了。这样,您实际上就在它们之间创建了一个网络。
哪个 IP 地址有效?
每个IP地址都是一个唯一的数字。 IPv4 地址是 32 位数字,而 IPv6 地址是 128 位。用于编写它们的点符号(例如 127.0.0.1)使用网络字节顺序(大端)将此数字编码为四个八位字节。 IPv6 地址使用六个八位字节编写,这些八位字节使用十六进制编号系统编写,而不是 IPv4 使用的十进制。
网络接口或网络驱动程序,根据硬件接口是否实现传输层,拒绝任何源地址不适合您为接收接口设置的子网的 IP 数据包。 适合 子网是什么意思?子网掩码是引擎盖下的位掩码,但它可能看起来不像那样,因为它是使用与任何 IP 地址相同的点表示法编写的。因此,要检查 IP 地址 A
是否适合给定基地址 B
和网络掩码 C
的网络,请在 A - B
和 C
之间进行按位与操作; IP 地址适合网络当且仅当 (A - B) & C = (A - B)
。网络基地址和子网掩码用于标识节点(例如计算机)所在的网段。为了以单一、简洁的方式表示两者,发明了 CIDR 表示法——它由后面的网络基地址组成通过网络掩码中前导 1 的位数。例如,127.0.0.0/8 表示基地址为 127.0.0.0 和网络掩码 255.0.0.0.
的网络
当网络节点发送 IP 数据包时,网络中的每个节点都会在硬件级别接收它。然后,如果目标地址适合为具有该地址的节点设置的子网,则该节点将实际接收数据包;否则,如果该节点不是路由器,则该数据包将被忽略;如果是,并且此路由器也设置为源接口的默认网关,则将数据包路由到下一个网段,希望目的节点在那里。
例如,您的家庭 LAN 中有一台计算机,您的家庭网络由 modem/router 组成:后者充当网关,将数据包从您的计算机路由到 Internet。但是,如果您的计算机向您局域网内的另一台计算机发送 TCP 数据包,则路由器不会执行任何操作,并且无论是否有路由器,数据包都会被目标节点接收 - 没有任何路由。
回到原来的问题
您希望两台计算机在 LAN 内相互通信,其中只有一台连接到更广泛的网络,使其可以访问 Internet。这意味着您不想更改可以访问 Internet 的计算机的 IP 地址或子网,但您可以为另一台计算机任意设置任何内容。
假设更广泛网络中计算机的 IP 地址为 192.168.1.100,其网络为 192.168.1.1/24。为了让另一台计算机进行通信,其网络必须与 192.168.1.1/24 相交,并且交集必须同时包含源 IP 地址和要接收的发送数据包的目标地址。然后选择一个像192.168.1.101这样的IP地址和一个像192.168.1.100/31这样的网络就足够了,没有任何默认网关。