【问题标题】:How do sockets and ethernet work together?套接字和以太网如何协同工作?
【发布时间】:2015-07-08 20:38:20
【问题描述】:

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

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

【问题讨论】:

  • 了解带有冲突检测的载波侦听多路访问 (CSMA/CD)。我投票结束这个问题,因为它与编程无关。
  • 只要不涉及其他设备(例如集线器),这与 CSMA/CD 无关。

标签: sockets tcp ethernet


【解决方案1】:

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

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

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

【讨论】:

  • 这过于简单化了。所以在全双工发明之前,你不能在同一个通道上在两个方向上打开两个套接字吗?即使是全双工,通道也可能被占用。
  • 你是对的。我把东西弄混了,错过了问题的真正意义。我希望现在已经澄清了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 2015-05-24
  • 1970-01-01
  • 2015-12-19
  • 2017-02-16
相关资源
最近更新 更多