我正在學習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,因此自動分配無濟於事。有時候自動分配是最好的,所以沒有衝突。
謝謝。我在VB中創建了一個TCP服務器和客戶端應用程序,併成功地在客戶端和服務器之間發送/服務器在筆記本電腦的家庭無線網絡中使用端口1234。但是Wireshark沒有顯示我在該端口的客戶端和服務器之間交換的幀。我檢查了命令提示符,端口1234顯示在那裏。可能是什麼原因 ? –
確保您在正確的界面上「傾聽」。使用WiFi時很容易誤聽以太網端口,反之亦然。這些是兩個不同的硬件接口,「迴環」或localhost接口通常是第三個接口。 – tadman
兩者都在localhost 127.0.0.1中。所以它與我的wifi沒有關係? –
端口號是用於標識服務器/客戶端中運行的進程的邏輯實體/編號。就像您的服務器應用程序有一個端口號(您決定的那樣),客戶端應用程序也將擁有與其關聯的一些端口號,由操作系統分配。在cmd提示符下鍵入netstat -ab,您可以在命令給出的進程列表和相應的端口號中看到與客戶端應用程序關聯的端口號。
- 1. 比較python數據包的端口號
- 2. 如何從iptables隊列中的數據包中提取源端口號和目標端口號
- 3. 端口號分配在UDP數據報和端口號在sockaddr_in
- 4. 抓取數據包的源地址和端口號 - Scapy腳本
- 5. ICMP數據包的源端口和目的端口
- 6. 端口編號如何工作以接收MODBUS TCP數據包?
- 7. wireshark通過端口計數數據包
- 8. 從libpcap捕獲的數據包中獲取錯誤的ip和端口號
- 9. 嗅探WOL數據包在端口9
- 10. Node.js跨端口發送數據包
- 11. 端口掃描器 - icmp數據包
- 12. Python:從端口接收UDP數據包
- 13. VB.net 1.1使用CreateProcessWithLogon API創建TCPIP打印機端口
- 14. 端口和端口號的關係?
- 15. 如何在postgresql中獲取ubuntu數據庫的端口號?
- 16. 如何在MVC5的Web.config中爲數據庫指定端口號?
- 17. 如何獲取數據庫IP地址,oracle中的端口號?
- 18. python中的BPF來嗅探多個TCP端口的數據包
- 19. USB端口號
- 20. 端口號htpasswd
- 21. 根據相關的端口號
- 22. 在Java中更改UDP數據包的發送IP和端口
- 23. 如何在java中的端口53上反映UDP數據包?
- 24. 從端口從端口中bytes.my數據的形式將數據傳遞到XML()
- 25. OpenJMS - 客戶端端口號
- 26. 指定端口號和內容數據庫中marklogic
- 27. 查找端口號
- 28. 消除端口號
- 29. jQuery,ajax,端口號
- 30. ip +端口組合中的端口號是什麼?
這並不是說「客戶端沒有開放端口」,操作系統會在當時將客戶端進程綁定到某個可用端口,即只是您並不特別要求客戶端和操作系統上的特定端口將您的客戶端進程綁定到當時的可用端口 – tkhurana96
服務器需要能夠正常響應客戶端,這意味着客戶端會選擇一個隨機端口並告訴服務器可以在那裏發送響應。 Wireshark顯然是監控的最佳工具https://www.wireshark.org/ –