TCP / IP数据包中的端口号

时间:2017-12-27 20:12:56

标签: ethernet tcp-ip

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

2 个答案:

答案 0 :(得分:2)

不要忘记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,因此自动分配没有任何帮助。有时候自动分配比较好,所以没有冲突。

您可以使用tcpdumpWireshark等工具监控所有这些内容。他们可以挖掘各个层次并显示正在发生的事情。

答案 1 :(得分:1)

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