TCP/IP與OSI


TCP/IP工作在第4層,在TCP/IP協議簇中,有兩個不同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議),它們分別承載不同的應用。TCP協議提供可靠的服務,UDP協議提供不可靠但是高效的服務。
TCP/IP的特點:
(1)分層是TCP/IP乃至網絡通信最核心的策略和模式,分層使得所有的網絡應用程序不用關心底層鏈路傳輸的細節,也使得不同類型的網絡有效地互通。
(2)封裝就是在應用程序在發送數據的過程中,每一層都增加一些首部信息,這些信息用於和接收端同層次進行溝通。
(3)在接收端的處理過程就正好相反,也就是所謂的分用策略,數據從底層到最上層的應用程序過程中,數據被逐層拆分,每一層取出自己所需要的信息。
TCP可靠連接
TCP是面向連接的傳輸層協議,所謂面向連接就是在真正的數據傳輸開始前要完成連接建立的過程,否則不會進入真正的數據傳輸階段。
TCP三次握手

- 請求端發送一個SYN段指明客戶打算連接的服務器的端口,以及初始序號(ISN)。
- 服務器發回包含服務器的初始序號的SYN報文段作為應答。同時,將確認序號設置為客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將占用一個序號。
- 客戶必須將確認序號設置為服務器的ISN加1以對服務器的SYN報文段進行確認
TCP三次握手狀態
首先是closed狀態,當發起連接后,進入Listen狀態,當三次握手之后,進入EST狀態。三次握手中間還有一個臨時狀態:SYN_SENT。SYN_SENT當應用程序發送ack之后,進入EST狀態,如果沒有發送,就關閉closed.
為什么是三次握手?
對於這個問題,網絡編程中的一個經典的規則也許能給一些提示:別人告訴你成功了那一定是成功了,沒告訴你成功不一定是沒成功。因此,如果是設計成兩次握手,就有可能是被連接方第一次發出ack消息后,就處於成功建立連接的狀態,但這條消息丟失了,主動連接方因為沒有收到這個ack消息會認為建立連接失敗,也許會放棄連接或啟動新的連接,但被連接方會一直監聽那個它誤認為成功的連接。采用三次握手,前兩次握手任何一次失敗都會導致連接雙方都處於未連接狀態,第三次失敗只會導致連接方處於成功狀態,但做主動連接方,肯定會在連接不久后通過這個連接發送數據,這樣就可以利用這個機制做進一步的容錯。
TCP四次握手

所謂四次揮手(Four-Way Wavehand)即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發送4個包以確認連接的斷開。
- Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態。
- Server收到FIN后,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態。
- Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態。
- Client收到FIN后,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。
TCP和UDP的區別

