为什么要为网络连接指定端口?

时间:2019-10-19 18:22:43

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

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

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

数据包应具有机器B的目标IP地址以及端口号。但是我不知道以下问题的答案:

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

  2. 如何在Windows OS中实现TCP / IP网络协议堆栈?它是驱动程序或其他。

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

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

1 个答案:

答案 0 :(得分:0)

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

关于读什么书;我建议使用“ TCP/IP Illustrated, Volume 1到3”和“ UNIX Network Programming”。