TCP/IP與OSI
編程
TCP/IP工做在第4層,在TCP/IP協議簇中,有兩個不一樣的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議),它們分別承載不一樣的應用。TCP協議提供可靠的服務,UDP協議提供不可靠可是高效的服務。服務器
TCP/IP的特色:
(1)分層是TCP/IP乃至網絡通訊最核心的策略和模式,分層使得全部的網絡應用程序不用關心底層鏈路傳輸的細節,也使得不一樣類型的網絡有效地互通。
(2)封裝就是在應用程序在發送數據的過程當中,每一層都增長一些首部信息,這些信息用於和接收端同層次進行溝通。
(3)在接收端的處理過程就正好相反,也就是所謂的分用策略,數據從底層到最上層的應用程序過程當中,數據被逐層拆分,每一層取出本身所須要的信息。網絡
TCP是面向鏈接的傳輸層協議,所謂面向鏈接就是在真正的數據傳輸開始前要完成鏈接創建的過程,不然不會進入真正的數據傳輸階段。tcp
1) 請求端發送一個SYN段指明客戶打算鏈接的服務器的端口,以及初始序號(ISN)。
2) 服務器發回包含服務器的初始序號的SYN報文段做爲應答。同時,將確認序號設置爲客戶的ISN加1以對客戶的SYN報文段進行確認。一個SYN將佔用一個序號。
3) 客戶必須將確認序號設置爲服務器的ISN加1以對服務器的SYN報文段進行確認設計
TCP三次握手狀態
首先是closed狀態,當發起鏈接後,進入Listen狀態,當三次握手以後,進入EST狀態。三次握手中間還有一個臨時狀態:SYN_SENT。SYN_SENT當應用程序發送ack以後,進入EST狀態,若是沒有發送,就關閉closed.3d
爲何是三次握手?
對於這個問題,網絡編程中的一個經典的規則也許能給一些提示:別人告訴你成功了那必定是成功了,沒告訴你成功不必定是沒成功。所以,若是是設計成兩次握手,就有多是被鏈接方第一次發出ack消息後,就處於成功創建鏈接的狀態,但這條消息丟失了,主動鏈接方由於沒有收到這個ack消息會認爲創建鏈接失敗,也許會放棄鏈接或啓動新的鏈接,但被鏈接方會一直監聽那個它誤認爲成功的鏈接。採用三次握手,前兩次握手任何一次失敗都會致使鏈接雙方都處於未鏈接狀態,第三次失敗只會致使鏈接方處於成功狀態,但作主動鏈接方,確定會在鏈接不久後經過這個鏈接發送數據,這樣就能夠利用這個機制作進一步的容錯。blog
TCP四次握手
網絡編程
所謂四次揮手(Four-Way Wavehand)即終止TCP鏈接,就是指斷開一個TCP鏈接時,須要客戶端和服務端總共發送4個包以確認鏈接的斷開。sed