套接字和以太网如何协同工作?

How do sockets and ethernet work together?

假设我有两台计算机通过一根以太网电缆连接,使用 tcp/ip。如果计算机 1 使用端口 12345 连接到计算机 2,计算机 2 使用端口 54321 连接到计算机 1,当两台计算机同时发送恒定的数据流时会发生什么情况?

是每台计算机将一半的以太网电缆用作单向管道,还是它们轮流通过以太网电缆发送数据,以便一次只传输一条数据?

在物理层(假设是常规的 Cat5 TP 电缆和以太网硬件),每个通信伙伴都有自己的电线对,允许同时发送和接收。这称为全双工操作。在令牌环等较旧的硬件中,多台计算机必须共享相同的线路并且只能在某些特殊情况下使用全双工。

幸运的是(正如已经指出的那样),TCP/IP 套接字确实在 protocol stack 的更高层上工作,从物理访问的实际类型中高度抽象出来。您可以根据需要在两个伙伴之间建立尽可能多的开放连接,至少实际上是这样。网络堆栈将所有通信打包成数据包,用端口号、源地址和目标地址对其进行标记,然后将其传递到下一层,直到到达介质。因此,端口号和套接字是 合乎逻辑的 并且与实际硬件几乎没有任何关系。对于某种套接字,您甚至不需要网络硬件。

事实上,整个方案要复杂得多,我建议阅读 WP 上的 Network socket,以获得关于套接字如何工作以及它们做什么的非常简短的介绍。有关详细信息,Andrew Tanenbaum 的 Computer Networks 是一本很好的书,涵盖了所有相关细节并且易于阅读。