TCP/IP数据包中的端口号

我正在学习TCP/IP基础知识。我做了一个服务器 - 客户端聊天应用程序,服务器在其中打开一个端口1024,客户端可以发送消息给它。我对服务器和客户端交换的TCP/IP数据包的内容有点困惑。如果客户端向服务器发送消息,它将通过以太网作为数据包发送。在客户端的以太网帧中,数据字段以TCP/IP格式进行编码。在TCP/IP帧中,目标端口将是1024.但是,源端口的值是什么?客户不开放端口。只有服务器打开一个端口。此外,我想知道是否有任何方法来监视这些在PC中发送和接收的TCP/IP数据包。TCP/IP数据包中的端口号

回答:

别忘了还有multiple layers involve here。即使经常联合使用,TCP,IP和以太网也是不同的。记住分离很重要。以太网(第2层)是将各个计算机连接在一起的协议,但它并不关心它们具有的IP地址。 IP通过更大规模连接计算机,它可以通过各种“以太网仅仅是其中之一”的“第二层”网络技术进行路由和发送。

关于IETF互联网协议的好处是他们都是thoroughly documented,所以你可以了解他们如何在内部工作。对于在IP之上运行的TCP,端口号在TCP层中。 IP本身并不关心它们,它只关心源地址和目标地址。

的关键是在这里描述的TCP头在图中:

0     1     2     3 

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Source Port | Destination Port |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Sequence Number |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Acknowledgment Number |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Data | |U|A|P|R|S|F| |

| Offset| Reserved |R|C|S|S|Y|I| Window |

| | |G|K|H|T|N|N| |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Checksum | Urgent Pointer |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| Options | Padding |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| data |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

源和目标端口必须来填充。这是您的系统IP堆栈如何跟踪哪些数据包属于哪个连接的关键组件。

通常,当您编写连接到服务器的代码时,您的连接源自(某种程度上)随机的源端口。当您创建侦听端口的服务器进程时,可以自动分配或设置该端口。

对于像HTTP这样的服务,如果您希望其他客户端连接到该服务,那么您希望该端口固定为80,因此自动分配无济于事。有时候自动分配是最好的,所以没有冲突。

您可以使用诸如tcpdump或Wireshark之类的工具监视所有这些。他们可以深入到各个层面并显示发生了什么。

回答:

端口号是用于标识服务器/客户端中运行的进程的逻辑实体/编号。就像您的服务器应用程序有一个端口号(您决定的那样),客户端应用程序也将拥有与其关联的一些端口号,由操作系统分配。在cmd提示符下键入netstat -ab,您可以在命令给出的进程列表和相应的端口号中看到与客户端应用程序关联的端口号。

以上是 TCP/IP数据包中的端口号 的全部内容, 来源链接: utcz.com/qa/267336.html

回到顶部