網工班第十天

世貿網工班第十天

今天持續講解TCP的運作原理。

TCP標題有一個field叫window,中文叫訊框。它是用來提醒連線的對方自己還有多少緩衝區可存放封包資料,以避免對方傳送過多的封包而導致遺漏的狀況發生。

TCP的連線是透過「三方交握(three handshake)」的機制來建立連線。先由要求連線的一方送出含有syn訊號的封包,而收到封包的一方會回應含syn及ack訊號的封包,要求連線端在收到回應封包後會再送一次ack訊號,以確認連線狀況建立,之後才會開始進行資料的傳遞。

而中斷連線的步驟相似。由要結束連線的一方送出含ack及fin訊號的封包,而另一端收到封包後,不見得會馬上回應中斷要求,可能還會穿插幾個封包,甚至是持續傳送資料,一直到確定再沒有資料送傳之後,被要求的一端才會回應含ack及fin訊號的封包,表示接收中斷連線要求。同前,發送要求的一端在接到回應中斷要求的封包之後,會再一次發送ack封包以確定中斷連線。

實作http封包解析

網頁在載入之後,若有按下refresh按鈕要求重新讀取頁面,此時送出要求的封包會含有「if-modified-since」欄位,記錄的是網頁最後更新的日期時間。主機端在接到要求的封包之後,會和網頁標頭裡的last-modified的時間作比對,若兩者時間相同,主機便不會傳回網頁資料。

若傳遞的資料超過單一封包大小的限制便會進行封包分割,之後才會開始進行資料傳送。分割之後,這批封包會擁有相同的stream index(在tcp標頭裡)以表示這些封包是同一資料,接收端在收到封包之後便會依照tcp標頭裡的fragment offset進行封包重組。

在實作http封包解析的時候,發現一個奇怪的事情。打上網址後瀏覽器送出的要求似乎沒有查詢dns的動作,若回應的資料含有其他domain name,又會進行dns的查詢動作。是真的沒有查詢的動作,還是這個動作沒有顯示在擷取封包的畫面,亦或是透過某種機制顯藏起來了?

實作的最後是針對存取需驗證的網頁進行封包解析。在一般未加密的網頁裡,雖有存取驗證的要求,但帳號密碼送出是經base64編碼,是屬於可反查的編碼方式,只要有心人想竊取封包資料,其實很容易可以得到帳號密碼。

在做了幾次封包解析以及認識各種協定的標頭之後,再一次體認到電腦的運作並沒有比較高明,因為它一樣是需要記錄下各種訊息,而且數量還真不少,所以光是各種協定的標頭,據說在完整封包容量裡就佔了還蠻重的比例。雖然看起來好像很浪費,不過這也是沒有辦法的事,因為電腦無法無中生有,所以必須透過現實資訊的記錄,並事先規劃好這些記錄的定義及運作方式,才能交給電腦利用快速運算得出結果。

今天還有講到arp協定,就是區網裡ip對mac的解析協定。透過它,區域網路才能正常傳遞資料。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Proudly using Dynamic Headers by Nicasio WordPress Design