Port
為什麼在localhost上發送TCP數據時埠會改變
我是網路程式的新手,我開始很簡單。我在我的機器上執行了 2 個簡單的 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)
這是執行客戶端時伺服器的anwser
[*] Accepted connection from: 127.0.0.1:56400 [*] Received: TEST Message
所有TCP/IP通信都使用兩個單獨的埠進行通信。
當設備或客戶端發送數據時,它使用臨時埠(通常大於 1024,但通常甚至更高)作為源埠,但目標埠是服務埠。在您的範例中,服務埠是埠 80 上的 HTTP 服務,因此所有發往該服務的 TCP 流量都流向埠 80。但是當客戶端發送數據時,它使用較高的值,在本例中為 56400。這裡的 TCP 事務可以被描述為連接 WXYZ:56400 <–> SRVR:80。這允許伺服器在該臨時埠(本例中為 56400)上將數據發送回客戶端
這只是TCP/IP工作原理的一部分。