IP:網際協議
不可靠:不能保證IP資料報能成功地到達目的地,僅提供最好的的傳輸服務。
無串連:IP並不維護任何關於後續資料報的狀態資訊。每個資料報的處理的相互獨立。
IP首部
普通的IP首部長為20個位元組,除非含有選項欄位。
包含的欄位:
4位版本、4位首部長度、8位服務類型、16位總長度(位元組數)、16位標識、3位標誌(分區所用)、13位片位移(分區所用)、8位存留時間(TTL)、8位協議(ICMP、IGMP、TCP、UDP、EGP等等)、16首部檢驗和、32位源IP地址、32位目的IP地址、選項(如果有)
最左邊為最高位,以大端方式傳送(網路位元組序)。
PS:Ping程式利用ICMP回應要求報文,Traceroute程式利用ICMP報文和IP首部中的TTL欄位。
UDP:使用者資料包通訊協定
UDP是一個簡單的面向資料報的運輸層協議:進程的每個輸出操作都正好產生一個UDP資料報,並組裝成一份待發送的IP資料報。(不可靠、無串連)
UDP首部
大小為8個位元組。
包含的欄位:
16位源連接埠號碼、16位目的連接埠號碼、16位UDP長度、16位UDP檢驗和
TCP:傳輸控制通訊協定
TCP的服務:
TCP提供一種連線導向的、可靠的位元組流服務。
TCP通過下列方式來提供可靠性:
- 應用資料被分割成TCP認為最適合發送的資料區塊(位元組流服務)。
- 當TCP發出一段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
- 當TCP收到發自TCP串連另一端的資料,它將發送一個確認。這個確認不是立即發送,通常將延遲幾分之一秒(經愛時延的確認)。
- TCP將保持它首部和資料的檢驗和
- TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用程式層。
- TCP的接收端必須丟棄重複的資料。
- TCP提供流量控制。
TCP的首部
大小為20個位元組。
包含的欄位:
16位源連接埠號碼、16位目的連接埠號碼、32位序號、32位確認序號、4位首部長度、16位視窗大小、16檢驗和、16緊急指標
TCP串連的建立與終止
建立連線協定
1、請求端發送一個SYN段指明客戶打算已連線的服務器的連接埠,以及初始化序號(ISN)。這個SYN段為報文段1.
2、伺服器發回包含伺服器初始序號的SYN報文段(報文段2)作為應答。同時,將確認序號設定為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。
3、客戶必須將確認序號設定為伺服器的ISN加1以對伺服器的SYN報文段進行確認(報文段3)
這三個報文段完成串連的建立。這個過程也稱為三向交握(three-way handshake)。
串連終止協議(4次白握手)
1、應用程式關閉,TCP用戶端發送一個FIN,用來關閉從客戶到伺服器的資料傳送。
2、伺服器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。同時TCP伺服器還嚮應用程式傳送一個檔案結束符。
3、當伺服器程式需要關閉從伺服器到客戶的資料傳送時,會導致它的TCP端發送一個FIN。
4、客戶必須對3中的FIN發回一個確認,並將確認序號設定為收到序號加1。
TCP狀態變遷圖
2MSL等待狀態
TIME_WAIT狀態也稱為2MSL等待狀態。每個具體TCP實現必須選擇一個報文段最大存留時間MSL(Maximum Segment Lifetime)。它是任何報文段被丟棄在網路內的最長時間。
為什麼用戶端在TIME_WATI狀態必須等待2MSL的時間呢?這有兩個理由。
第一,為了保證用戶端發送的最後一個ACK報文段能夠到達伺服器。這個ACK報文段有可能丟失,因而使處在LAST_ACK狀態的伺服器收不到對已發送的FIN+ACK報文段的確認。伺服器會逾時重傳這個FIN+ACK報文段,而用戶端就能在2MSL時間內收到這個重傳報文段。
第二,防止“已失效的串連請求報文段”出現在本串連中。用戶端在發送完最後一個ACK報文段後,再經過時間2MSL,就可以使本串連持續的時間內所產生的所有報文段都從網路消失(壽命為MSL)。這樣就可以使下一個新的串連中不會出現這種舊的串連請求報文段。
詳見《電腦網路 5th》--謝希仁 編著
未完待續。。。。。。