为什么我们应该为网络连接指定一个端口?
Why we should specify a Port for our network connection?
我在Windows操作系统中开始使用C++进行网络编程。我知道什么是网络协议栈(如OSI的教育模型和TCP/IP的操作模型(。此外,我知道数据包如何在网络介质中路由和切换,以及有关网络编程和通信本身的更多其他概念。
但是,我现在知道当机器 A 中的一个进程想要将消息发送到机器 B 中的另一个进程时,该消息必须通过 TCP/IP 堆栈层,直到它准备好放在物理介质上以到达机器 B 中的目标进程。
数据包应具有计算机 B 的目标 IP 地址以及端口号。但是我无法弄清楚以下问题的答案:
-
为什么我们应该指定一个端口以及操作系统(Windows(中的这6000+端口如何相互区分?
-
TCP/IP 网络协议栈如何在 Windows 操作系统中实现?它是驱动程序或其他东西。
-
在Windows操作系统中,每个进程都有一个TCP/IP协议,或者Windows进程对它们使用相同的TCP/IP协议栈?
我知道,这些问题对StackOverflow的粉丝来说不太好,但不幸的是,我无法在书中找到这些问题的答案,甚至无法通过谷歌搜索找到答案。
端口号用于区分在同一台计算机上运行的不同应用程序。通常,同一台计算机上的所有(至少大多数(程序都将通过相同的IP地址进行通信。内核需要知道哪些消息要调度到什么程序,端口号解决了这个问题。每个程序都将在一个唯一的端口上进行通信,因此当消息到达端口 x 时,内核知道要将消息发送到哪个程序。如果没有端口号,它必须将消息发送到所有程序,并且它们必须确定是否有任何给定的消息是针对它们的。
至于读什么书;我推荐"TCP/IP Illustrated, Volume 1 to 3"和UNIX Network Programming。
- 我们可以访问一个不存在的联盟的成员吗
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- 我们应该在使用 std::bind 应用之前检查一个不为空的函数吗?
- 如果我们在其中输入一个整数,则字符会给出整数作为输出,但是当分配给它一个整数时,这不会发生。为什么?
- 我们如何初始化一个C++中所有值为 0 的向量
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 我们可以在队列前面以 O(1) 时间复杂度排队一个元素吗?
- 为什么我们应该为网络连接指定一个端口?
- 为什么我们需要构建一个提升库,仅仅包含头文件还不够吗,因为提升是模板
- 如果我们有一个基*类,如何访问派生模板类的成员函数
- 如果我们从每个 Y 向量中选择一个值,则 X 数字的每个组合都可能
- 当我们有纯虚函数时,如何煽动一个对象?