Linux系統套接字編程中存在的五個隱患 (3)

發表于:2007-05-26來源:作者:點擊數: 標簽:
現在,有兩個新的協議提供相似的功能??蓴U展標記語言/遠程過程調用(XML/RPC)以 XML 格式安排 HTTP 上的過程調用。數據和元數據用 XML 進行編碼并作為字符串傳輸,并通過主機架構把值和它們的物理表示分開。 SOA P 跟隨 XML-RPC,以更好的特性和功能擴展了

現在,有兩個新的協議提供相似的功能??蓴U展標記語言/遠程過程調用(XML/RPC)以 XML 格式安排 HTTP 上的過程調用。數據和元數據用 XML 進行編碼并作為字符串傳輸,并通過主機架構把值和它們的物理表示分開。SOAP 跟隨 XML-RPC,以更好的特性和功能擴展了它的思想。參見 參考資料 小節,獲取更多關于每個協議的信息。

  隱患 5.TCP 中的幀同步假定

  TCP 不提供幀同步,這使得它對于面向字節流的協議是完美的。這是 TCP 與 UDP(User Datagram Protocol,用戶數據報協議)的一個重要區別。UDP 是面向消息的協議,它保留發送者和接收者之間的消息邊界。TCP 是一個面向流的協議,它假定正在通信的數據是無結構的,如圖 1 所示。


圖 1.UDP 的幀同步能力和缺乏幀同步的 TCP

  圖 1 的上部說明一個 UDP 客戶端和服務器。左邊的對等層完成兩個套接字的寫操作,每個 100 字節。協議棧的 UDP 層追蹤寫的數量,并確保當右邊的接收者通過套接字獲取數據時,它以同樣數量的字節到達。換句話說,為讀者保留了寫者提供的消息邊界。

現在,看圖 1 的底部.它為 TCP 層演示了相同粒度的寫操作。兩個獨立的寫操作(每個 100 字節)寫入流套接字。但在本例中,流套接字的讀者得到的是 200 字節。協議棧的 TCP 層聚合了兩次寫操作。這種聚合可以發生在 TCP/IP 協議棧的發送者或接收者中任何一方。重要的是,要注意到聚合也許不會發生 —— TCP 只保證數據的有序發送。

  對大多數開發人員來說,該陷阱會引起困惑。您想要獲得 TCP 的可靠性和 UDP 的幀同步。除非改用其他的傳輸協議,比如流傳輸控制協議(STCP),否則就要求應用層開發人員來實現緩沖和分段功能。

  調試套接字應用程序的工具

  GNU/Linux 提供幾個工具,它們可以幫助您發現套接字應用程序中的一些問題。此外,使用這些工具還有教育意義,而且能夠幫助解釋應用程序和 TCP/IP 協議棧的行為。在這里,您將看到對幾個工具的概述。查閱下面的 參考資料 了解更多的信息。

  查看網絡子系統的細節

  netstat 工具提供查看 GNU/Linux 網絡子系統的能力。使用 netstat,可以查看當前活動的連接(按單個協議進行查看),查看特定狀態的連接(比如處于監聽狀態的服務器套接字)和許多其他的信息。清單 4 顯示了 netstat 提供的一些選項和它們啟用的特性。


清單 4.netstat 實用程序的用法模式

View all TCP sockets currently active$ netstat
            
            

--tcpView all UDP sockets$ netstat

--udpView all TCP sockets in the listening state$ netstat

--listeningView the multicast group membership information$ netstat

--groupsDisplay the list of masqueraded connections$ netstat

--masqueradeView statistics for each protocol$ netstat

--statistics


  盡管存在許多其他的實用程序,但 netstat 的功能很全面,它覆蓋了 route、ifconfig 和其他標準 GNU/Linux 工具的功能。

  監視流量

  可以使用 GNU/Linux 的幾個工具來檢查網絡上的低層流量。tcpdump 工具是一個比較老的工具,它從網上“嗅探”網絡數據包,打印到 stdout 或記錄在一個文件中。該功能允許查看應用程序產生的流量和 TCP 生成的低層流控制機制。一個叫做 tcpflow 的新工具與 tcpdump 相輔相成,它提供協議流分析和適當地重構數據流的方法,而不管數據包的順序或重發。清單 5 顯示 tcpdump 的兩個用法模式。


  清單 5.tcpdump 工具的用法模式

Display all traffic on the eth0 interface for
            
            

the local host$ tcpdump -l -i eth0Show all traffic

on the network coming from or going

to host plato$ tcpdump host platoShow all HTTP traffic

for host camus$ tcpdump host camus and (port http)View

traffic coming from or going

to TCP port 45000 on the local host$ tcpdump tcp port 45000


  tcpdump 和 tcpflow 工具有大量的選項,包括創建復雜過濾表達式的能力。查閱下面的 參考資料 獲取更多關于這些工具的信息。

  tcpdump 和 tcpflow 都是基于文本的命令行工具。如果您更喜歡圖形用戶界面(GUI),有一個開放源碼工具 Ethereal 也許適合您的需要。Ethereal 是一個專業的協議分析軟件,它可以幫助調試應用層協議。它的插入式架構(plug-in architecture)可以分解協議,比如 HTTP 和您能想到的任何協議(寫本文的時候共有 637 個協議)。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97