【问题标题】:Why we should specify a Port for our network connection?为什么我们应该为我们的网络连接指定一个端口?
【发布时间】:2020-02-16 09:20:48
【问题描述】:

我开始在 Windows 操作系统中使用 C++ 进行网络编程。我知道什么是网络协议栈(如 OSI 的教育模型和 TCP/IP 的操作模型)。此外,我知道数据包如何在网络介质中路由和交换,以及更多关于网络编程和通信本身的概念。

但是,我现在知道,当机器 A 中的一个进程想要向机器 B 中的另一个进程发送消息时,该消息必须通过 TCP/IP 堆栈层,直到它可以准备好放在物理介质上以到达目的地在机器 B 中处理。

数据包应该有机器 B 的目标 IP 地址和端口号。但我无法弄清楚以下问题的答案:

  1. 为什么要指定一个端口,以及操作系统 (Windows) 中这 6000 多个端口如何相互区分?

  2. 如何在 Windows 操作系统中实现 TCP/IP 网络协议栈?它是驱动程序或其他东西。

  3. 在 Windows 操作系统中,每个进程都有自己的 TCP/IP 协议,还是 Windows 进程为它们使用相同的 TCP/IP 协议栈?

我知道,这些问题对 StackOverflow 粉丝来说不太好,但不幸的是,我无法在书中找到这些问题的答案,甚至无法通过谷歌搜索找到答案。

【问题讨论】:

    标签: c++ windows tcp operating-system network-programming


    【解决方案1】:

    端口号用于区分运行在同一台机器上的不同应用程序。通常,同一台机器上的所有(至少大多数)程序都将通过相同的 IP 地址进行通信。内核需要知道将什么消息发送给什么程序,端口号解决了这个问题。每个程序将在唯一的端口上进行通信,因此当端口 x 的消息到达时,内核知道将消息发送到哪个程序。如果没有端口号,它必须将消息发送到所有程序,并且它们必须确定是否有任何给定消息是针对它们的。

    至于读什么书;我推荐“TCP/IP Illustrated, Volume 1 through 3”和UNIX Network Programming

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2011-05-16
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2015-01-17
      相关资源
      最近更新 更多