Can you summarize the following document?
        
  "SOCKS"工作在比HTTP代理更低的層次:SOCKS使用握手協議來通知代理軟體其客戶端試圖進行的SOCKS連線,然後儘可能透明地進行操作,而常規代理可能會解釋和重寫報頭(例如,使用另一種底層協議,例如FTP;然而,HTTP代理只是將HTTP請求轉發到所需的HTTP伺服器)。雖然HTTP代理有不同的使用模式,HTTP CONNECT方法允許轉發TCP連線;然而,SOCKS代理還可以轉發UDP流量(僅SOCKS5),而HTTP代理不能。HTTP代理通常更瞭解HTTP協議,執行更高層次的過濾(雖然通常只用於GET和POST方法,而不用於CONNECT方法)。

  Bill希望通過網際網路與Jane溝通,但他們的網路之間存在一個防火牆,Bill不能直接與Jane溝通。所以,Bill連線到他的網路上的SOCKS代理,告知它他想要與Jane建立連線;SOCKS代理開啟一個能穿過防火牆的連線,並促進Bill和Jane之間的通訊。  有關SOCKS協議的技術細節的更多資訊,請參閱下面的部分。

  Bill希望從Jane的Web伺服器下載一個網頁。Bill不能直接連線到Jane的伺服器,因為在他的網路上設定了防火牆。為了與該伺服器通訊,Bill連線到其網路的HTTP代理。他的網頁瀏覽器與代理通訊的方式與他直接連線Jane的伺服器的方式相同;也就是說,網頁瀏覽器會傳送一個標準的HTTP請求頭。HTTP代理連線到Jane的伺服器,然後將Jane的伺服器返回的任何資料傳回Bill。

  

  下面是客戶端向SOCKS 4代理伺服器,傳送的連線請求包的格式(以位元組為單位):  代理伺服器而後傳送迴應包(以位元組為單位):  如果請求被拒絕,SOCKS伺服器馬上與客戶端斷開連線;如果請求被允許,代理伺服器就充當客戶端與目的主機之間進行雙向傳遞,對客戶端而言,就如同直接在與目的主機相連。

  SOCKS 4A是SOCKS 4協議的簡單擴充套件,允許客戶端對無法解析域名的目的主機進行存取。  客戶端對DSTIP的頭三個位元組設定為NULL,最後一個位元組為非零;對應的IP地址就是0.0.0.x,其中x是非零,這當然不可能是目的主機的地址,這樣即使客戶端可以解析域名,對此也不會發生衝突。USERID以緊跟的NULL位元組作結尾,客戶端必須傳送目的主機的域名,並以另一個NULL位元組作結尾。CONNECT和BIND請求的時候,都要按照這種格式(以位元組為單位):  使用4a協議的伺服器必須檢查請求包裡的DSTIP欄位,如果表示地址0.0.0.x,x是非零結尾,那麼伺服器就得讀取客戶端所發包中的域名欄位,然後伺服器就得解析這個域名,可以的話,對目的主機進行連線。

  SOCKS5比SOCKS4a多了驗證、IPv6、UDP支援。建立與SOCKS5伺服器的TCP連線後客戶端需要先傳送請求來確認協議版本及認證方式,格式為(以位元組為單位):  伺服器從客戶端提供的方法中選擇一個並通過以下訊息通知客戶端(以位元組為單位):  之後客戶端和服務端根據選定的認證方式執行對應的認證。  認證結束後客戶端就可以傳送請求資訊。如果認證方法有特殊封裝要求,請求必須按照方法所定義的方式進行封裝。  SOCKS5請求格式(以位元組為單位):  伺服器按以下格式迴應客戶端的請求(以位元組為單位):

  在客戶端、服務端協商使用使用者名稱密碼認證後,客戶端發出使用者名稱密碼,格式為(以位元組為單位):  鑑定協議版本目前為 0x01 。  伺服器鑑定後發出如下回應: 其中鑑定狀態 0x00 表示成功,0x01 表示失敗。

  部分SOCKS伺服器軟體:

  一般情況下應用程式會內嵌對SOCKS協議的支援。但socksify,proxifier軟體可強制使不支援SOCKS的應用通過代理聯網。
SOCKS是一種網路傳輸協議,主要用於客戶端與外網伺服器之間通訊的中間傳遞。SOCKS是"SOCKetS"的縮寫。