我无法在脑海中想象网络流量的流动情况。例如,如果局域网中有 15 台电脑
- 当数据包从路由器传输到本地 LAN 时,它会经过所有计算机吗?
- 它是否会到达每台计算机的以太网卡,并且这些计算机根据其物理地址接受数据包?
- 数据包首先会发往哪台电脑?发往离路由器最近的那台电脑?如果第一台电脑捕获了该数据包(尽管不是发往它的)会发生什么?
- 当一台电脑广播消息时会发生什么?它是否必须为所有电脑生成 14 个数据包,还是只有一个数据包到达所有电脑?如果它是一个数据包并被第一台电脑捕获,其他电脑如何获得它?
我无法想象这种流量究竟是如何流动的?也许我的类比完全错误。有人能解释一下吗?
答案1
具体过程取决于网络类型、拓扑和设备。我将尝试针对大多数以太网网络描述该过程。
条款:
- MAC地址:就像社会安全号码一样。它不会随着你的搬家而改变
- IP地址:就像地址一样,当你移动(长距离)时,它会改变。
- TCP 数据包:带有 TCP 端口信息的数据(有时称为 TCP 段)
- IP数据报:包含 IP 信息的数据
- 以太网帧:带有 MAC 信息的数据
IP 地址分为两部分:网络和节点。您在计算机或路由器上配置的子网决定了 IP 地址位于哪个网络上。您需要配置一个具有 IP 地址(和子网)的接口以路由到它。
根据您的路由器,当它接收到数据包时可能会发生几件事:
家庭路由器 (NAT閣門 (Gateway)
- 数据包进入路由器
- 路由器从 IP 数据报中提取 IP 地址
- 路由器检查目的地,3.如果地址不是当前路由器,它通常会丢弃数据包(如果它超过 NAT 网关,请阅读下文)
- 路由器从数据包中提取端口号 5 路由器检查转发表以查看该端口是否与内部 IP 地址相关联
- 如果是:交付(见下文)
- 否则:丢弃
“真实路由器“
- 数据包进入路由器
- 路由器从 IP 数据报中提取 IP 地址
- 路由器检查它是否是目标 IP 网络的一部分
- 如果是:交付(见下文)
- 否则,检查生存时间(也来自 IP 数据报)查看是否应将其丢弃或发出无法送达的信号。
- 如果仍然可以传送,则检查网络目的地的路由表,如果已知则将其转发到下一个路由器。
- 否则,将其转发到默认网关,丢弃数据包,或向其发送ICMP回应称,无法送达. (取决于配置)
传输(以太网)
- 路由器检查 IP 地址是否在其 ARP 表(IP 地址到 MAC 地址)中。
- 如果没有,则发送 ARP 请求来定位 MAC 地址。
- 一旦收到 ARP 响应,就将数据包发送到该 MAC 地址。
这地址解析协议请求是广播帧,因此每台计算机都会看到该请求。如果没有响应,则可能会默默丢弃或响应。路由器只发送一个帧进行广播(如果它也是桥接器,则可能会在桥接器所在的每个接口上发送该帧)。要发送广播帧,有一个称为广播地址在以太网上,地址为 FF:FF:FF:FF:FF:FF(二进制全为 1)。
网桥(包括交换机)将发往 FF:FF:FF:FF:FF:FF 的帧识别为广播,并在每个端口上传输它。一些网桥(如托管交换机)会自行跟踪 ARP 请求,因此它们无需广播,只需回复 ARP 缓存中的内容即可。可以配置防火墙来阻止这些广播,但这可能会对 IP 网络产生负面影响(如果没有路由器,防火墙两侧将无法再相互通信)。
从路由器到节点取决于硬件(通常是网桥、交换机或集线器)
网桥从一个端口接收输入,并将其发送到一个(或多个)端口。从技术上讲,交换机是网桥,但防火墙或无线接入点也是网桥。
交换机会记住哪个端口有哪个 MAC 地址。(通常,它会从 ARP 响应中获知该地址)。交换机会将帧(包含数据包)发送到目标端口。在极少数情况下,交换机不知道 MAC 地址,它会像集线器一样工作,并将信息发送到每个地址。
集线器不会记住哪个端口有 MAC 地址。集线器始终会将帧发送到每个端口。集线器存在许多问题(例如冲突)。
再次交付
最后,此时的帧将继续传输,直到到达集线器和交换机,或被丢弃。例如生成树协议 (STP)存在是为了防止它被永远转发。
答案2
我建议你阅读维基百科上关于以太网?
答案3
为一个非常虽然简单,但很好地概述了互联网中的数据包是如何工作的,有一部老动画电影很好地描述了它。这部短片制作精良,对非技术人员来说是一个很好的介绍。转到网络勇士并寻找电影链接。
答案4
答案是“视情况而定”。然而,如今最常见的答案要精确一些。在大多数当前系统中,路由器连接到交换机。路由器 LAN 上的任何 PC 也连接到该交换机,可能通过中间交换机。交换机知道连接到它的 MAC 地址,并且可以询问(通过 ARP 请求)谁拥有数据包目的地的 IP 地址。一旦知道了这一点,它就知道将数据包发送到哪里。广播数据包将发送到交换机的所有端口。
在共享媒体情况下(旧式集线器),情况略有不同,因为连接到集线器的所有系统都会看到每个数据包,但网络堆栈设置为(通常)忽略未广播或发送到系统 IP 地址的数据包。不过,这种情况现在不太常见了,因为大多数网络使用交换机而不是集线器。