为什么在本地主机上发送 TCP 数据时端口会发生变化

为什么在本地主机上发送 TCP 数据时端口会发生变化

我是网络编程新手,刚开始学习简单的编程。我的机器上运行着两个简单的 Python 脚本,一个服务器和一个客户端,客户端使用端口 80 发送一些数据,服务器监听端口 80 并打印数据,并用简单的“ACK”进行应答,这样就可以正常工作了。但是当服务器收到数据时,它会从随机端口获取数据。但是,如果我更改客户端上的发送端口或服务器上的监听端口,它就会停止工作。我不明白它是如何工作的。

这是客户端脚本

import socket
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect(("127.0.0.1",80))
c.send("TEST Message".encode())
r = c.recv(200)
print (r.decode())


这是服务器

import socket


server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0",80))
server.listen(5)


# this is our client-handling thread
def handle_client(client_socket):
    # print out what the client sends
    request = client_socket.recv(1024)
    print ("[*] Received: %s" % request.decode())
    # send back a packet
    client_socket.send("ACK!".encode())
    client_socket.close()

while True:
    client,addr = server.accept()
    print ("[*] Accepted connection from: %s:%d" % (addr[0],addr[1]))
    # handle incoming data
    handle_client(client)

这是运行客户端时服务器的答案

[*] Accepted connection from: 127.0.0.1:56400
[*] Received: TEST Message

答案1

全部TCP/IP通信使用两个独立的端口进行通信。

当设备或客户端发送数据时,它使用临时端口(通常大于 1024,但通常甚至更高)作为源端口,但目的地是服务端口。在您的示例中,服务端口是端口 80 上的 HTTP 服务,因此所有目的地为该服务的 TCP 流量都转到端口 80。但是当客户端发送数据时,它会使用较高的端口,在本例中为 56400。此处的 TCP 事务可以描述为连接 WXYZ:56400 <--> SRVR:80。这允许服务器通过该端口将数据发送回客户端临时端口(本例中为 56400)

这只是其中的一部分TCP/IP作品。

相关内容