为什么我们应该为网络连接指定一个端口?

Why we should specify a Port for our network connection?

本文关键字:一个 我们 网络 连接 为什么      更新时间:2023-10-16

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

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

数据包应具有计算机 B 的目标 IP 地址以及端口号。但是我无法弄清楚以下问题的答案:

  1. 为什么我们应该指定一个端口以及操作系统(Windows(中的这6000+端口如何相互区分?

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

  3. 在Windows操作系统中,每个进程都有一个TCP/IP协议,或者Windows进程对它们使用相同的TCP/IP协议栈?

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

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

至于读什么书;我推荐"TCP/IP Illustrated, Volume 1 to 3"和UNIX Network Programming。

相关文章: