WireShark抓包資料分析
WireShark抓包資料分析:
1、TCP報文格式
![](https://img-
blog.csdn.net/20150910095914634?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
源埠、目的埠:16位長。標識出遠端和本地的埠號。
順序號:32位長。表明了傳送的資料報的順序。
確認號:32位長。希望收到的下一個資料報的序列號。
TCP協議資料報頭DE 頭長:4位長。表明TCP頭中包含多少個32位字。
接下來的6位未用。
ACK:ACK位置1表明確認號是合法的。如果ACK為0,那麼資料報不包含確認資訊,確認欄位被省略。
PSH:表示是帶有PUSH標誌的資料。接收方因此請求資料報一到便可送往應用程式而不必等到緩衝區裝滿時才傳送。
RST:用於復位由於主機崩潰或其它原因而出現的錯誤的連線。還可以用於拒絕非法的資料報或拒絕連線請求。
SYN:用於建立連線。
FIN:用於釋放連線。
視窗大小:16位長。視窗大小欄位表示在確認了位元組之後還可以傳送多少個位元組。
校驗和:16位長。是為了確保高可靠性而設定的。它校驗頭部、資料和偽TCP頭部之和。
可選項:0個或多個32位字。包括最大TCP載荷,視窗比例、選擇重發資料報等選項。
最大TCP載荷:允許每臺主機設定其能夠接受的最大的TCP載荷能力。在建立連線期間,雙方均宣告其最大載荷能力,並選取其中較小的作為標準。如果一臺主機未使用該選項,那麼其載荷能力預設設定為536位元組。
視窗比例:允許傳送方和接收方商定一個合適的視窗比例因子。這一因子使滑動視窗最大能夠達到232位元組。
TCP協議資料報頭選擇重發資料報:這個選項允許接收方請求傳送指定的一個或多個數據報。 ![](https://img-
blog.csdn.net/20150910105500495?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、TCP三次握手過程
(1)、TCP第一次握手
![](https://img-
blog.csdn.net/20150910101056836?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
**
**
**
**
(2)、TCP第二次握手
![](https://img-
blog.csdn.net/20150910101106388?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
**
**
**
**
(3)、TCP第三次握手
![](https://img-
blog.csdn.net/20150910101114550?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
** 3、封包詳細資訊 **
這個面板是我們最重要的,用來檢視協議中的每一個欄位。 各行資訊分別為:
Frame: 物理層的資料幀概況
Ethernet II: 資料鏈路層乙太網幀頭部資訊
Internet Protocol Version 4: 網際網路層IP包頭部資訊
Transmission Control Protocol: 傳輸層T的資料段頭部資訊,此處是TCP
Hypertext Transfer Protocol: 應用層的資訊,此處是HTTP協議
![](https://img-
blog.csdn.net/20150909175631032?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
** 4、HTTP常見請求頭如下: **
l Accept :瀏覽器可接受的 MIME 型別;
l Accept-Charset :瀏覽器可接受的字符集;
l Accept-Encoding :瀏覽器能夠進行解碼的資料編碼方式,比如 gzip 。 Servlet 能夠向支援 gzip
的瀏覽器返回經 gzip 編碼的 HTML 頁面。許多情形下這可以減少 5 到 10 倍的下載時間;
l Accept-Language :瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到;
l Authorization :授權資訊,通常出現在對伺服器傳送的 WWW-Authenticate 頭的應答中;
l Connection :表示是否需要持久連線。如果 Servlet 看到這裡的值為 “Keep-Alive” ,或者看到請求使用的是
HTTP 1.1 ( HTTP 1.1 預設進行持久連線),它就可以利用持久連線的優點,當頁面包含多個元素時(例如 Applet
,圖片),顯著地減少下載所需要的時間。要實現這一點, Servlet 需要在應答中傳送一個 Content-Length
頭,最簡單的實現方法是:先把內容寫入 ByteArrayOutputStream ,然後在正式寫出內容之前計算它的大小;
l Content-Length :表示請求訊息正文的長度;
l Cookie :這是最重要的請求頭資訊之一;
l From :請求傳送者的 email 地址,由一些特殊的 Web 客戶程式使用,瀏覽器不會用到它;
l Host :初始 URL 中的主機和埠;
l If-Modified-Since :只有當所請求的內容在指定的日期之後又經過修改才返回它,否則返回 304“Not Modified” 應答;
l Pragma :指定 “no-cache” 值表示伺服器必須返回一個重新整理後的文件,即使它是代理伺服器而且已經有了頁面的本地拷貝;
l Referer :包含一個 URL ,使用者從該 URL 代表的頁面出發訪問當前請求的頁面。
l User-Agent :瀏覽器型別,如果 Servlet 返回的內容與瀏覽器型別有關則該值非常有用;
l UA-Pixels , UA-Color , UA-OS , UA-CPU :由某些版本的 IE
瀏覽器所傳送的非標準的請求頭,表示螢幕大小、顏色深度、作業系統和 CPU 型別。 **
**
**
**
**
**
** 5、相應頭 **
l Allow :伺服器支援哪些請求方法(如 GET 、 POST 等);
l Content-Encoding :文件的編碼( Encode )方法。只有在解碼之後才可以得到 Content-Type
頭指定的內容型別。利用 gzip 壓縮文件能夠顯著地減少 HTML 文件的下載時間。 Java 的 GZIPOutputStream
可以很方便地進行 gzip 壓縮,但只有 Unix 上的 Netscape 和 Windows 上的 IE 4 、 IE 5
才支援它。因此, Servlet 應該通過檢視 Accept-Encoding 頭(即 request.getHeader("Accept-
Encoding") )檢查瀏覽器是否支援 gzip ,為支援 gzip 的瀏覽器返回經 gzip 壓縮的 HTML
頁面,為其他瀏覽器返回普通頁面;
l Content-Length :表示內容長度。只有當瀏覽器使用持久 HTTP
連線時才需要這個資料。如果你想要利用持久連線的優勢,可以把輸出文件寫入 ByteArrayOutputStram ,完成後檢視其大小,然後把該值放入
Content-Length 頭,最後通過 byteArrayStream.writeTo(response.getOutputStream()
傳送內容;
l Content-Type : 表示後面的文件屬於什麼 MIME 型別。 Servlet 預設為 text/plain
,但通常需要顯式地指定為 text/html 。由於經常要設定 Content-Type ,因此 HttpServletResponse
提供了一個專用的方法 setContentTyep 。 可在 web.xml 檔案中配置副檔名和 MIME 型別的對應關係;
l Date :當前的 GMT 時間。你可以用 setDateHeader 來設定這個頭以避免轉換時間格式的麻煩;
l Expires :指明應該在什麼時候認為文件已經過期,從而不再快取它。
l Last-Modified :文件的最後改動時間。客戶可以通過 If-Modified-Since 請求頭提供一個日期,該請求將被視為一個條件
GET ,只有改動時間遲於指定時間的文件才會返回,否則返回一個 304 ( Not Modified )狀態。 Last-Modified
也可用 setDateHeader 方法來設定;
l Location :表示客戶應當到哪裡去提取文件。 Location 通常不是直接設定的,而是通過 HttpServletResponse
的 sendRedirect 方法,該方法同時設定狀態程式碼為 302 ;
l Refresh :表示瀏覽器應該在多少時間之後重新整理文件,以秒計。除了重新整理當前文件之外,你還可以通過 setHeader("Refresh",
"5; URL= http://host/path ") 讓瀏覽器讀取指定的頁面。注意這種功能通常是通過設定
HTML 頁面 HEAD 區的 實現,這是因為,自動重新整理或重定向對於那些不能使用 CGI 或
Servlet 的 HTML 編寫者十分重要。但是,對於 Servlet 來說,直接設定 Refresh 頭更加方便。注意 Refresh
的意義是 “N 秒之後重新整理本頁面或訪問指定頁面 ” ,而不是 “ 每隔 N 秒重新整理本頁面或訪問指定頁面 ”
。因此,連續重新整理要求每次都發送一個 Refresh 頭,而傳送 204 狀態程式碼則可以阻止瀏覽器繼續重新整理,不管是使用 Refresh 頭還是