
OSI模型 ?
????????OSI協(xié)議是由ISO(國際標準化組織)制定的,它有三個基本的功能:提供給開發(fā)者一個必須的、通用的概念以便開發(fā)完善、可以用來解釋連接不同系統(tǒng)的框架。
????OSI將計算機網(wǎng)絡體系結構(architecture)劃分為以下七層:
? ??????物理層: 將數(shù)據(jù)轉換為可通過物理介質傳送的電子信號?相當于郵局中的搬運工人。(傳輸介質上的原始比特流傳輸)
????????數(shù)據(jù)鏈路層: 決定訪問網(wǎng)絡介質的方式。(物理尋址,差錯檢測)
????????????????在此層將數(shù)據(jù)分幀,并處理流控制。本層指定拓撲結構并提供硬件尋址,相當于郵局中的裝拆箱工人。
????????網(wǎng)絡層: 使用權數(shù)據(jù)路由經(jīng)過大型網(wǎng)絡 相當于郵局中的排序工人。(邏輯尋址,路由選擇)
????????傳輸層: 提供終端到終端的可靠連接 相當于公司中跑郵局的送信職員。(提供端到端的連接——可靠或者不可靠)
????????會話層: 允許用戶使用簡單易記的名稱建立連接 相當于公司中收寄信、寫信封與拆信封的秘書。(不同機器之間用戶會話的建立和管理)
????????表示層: 協(xié)商數(shù)據(jù)交換格式 相當公司中簡報老板、替老板寫信的助理。(數(shù)據(jù)的格式化,加密解密、壓縮和解壓縮)
????????應用層: 用戶的應用程序和網(wǎng)絡之間的接口。(各種應用程序,如HTTP、FTP、TELENT)
OSI的優(yōu)點
? ? 1、將網(wǎng)絡的通信過程劃分為一個個小部件,有利于各個部件的開發(fā)、設計和故障排除;
????2、標準化網(wǎng)絡組件,允許多個供應進行開發(fā);
? ? 3、通過定義在模型的每一層實現(xiàn)什么功能,鼓勵產業(yè)的標準化
? ? 4、允許各種類型的網(wǎng)絡硬件和軟件相互通信
? ? 5、防止對某一層所做的改動影響到其他的層
TCP協(xié)議(Transmission Control Protocol,傳輸控制協(xié)議)
????TCP/IP協(xié)議是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡的基礎,由網(wǎng)絡層的IP協(xié)議和傳輸層的TCP協(xié)議組成。通俗而言:TCP負責發(fā)現(xiàn)傳輸?shù)膯栴},一有問題就發(fā)出信號,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡亍6鳬P是給因特網(wǎng)的每一臺聯(lián)網(wǎng)設備規(guī)定一個地址。
????TCP是一種面向連接的,可靠的傳輸層通信協(xié)議。它有如下特點
? ? ? ? (1)基于流的方式;
? ? ? ? (2)面向連接;
? ? ? ? (3)可靠通信方式;
? ? ? ? (4)在網(wǎng)絡狀況不佳的時候盡量降低系統(tǒng)由于重傳帶來的帶寬開銷
? ? ? ? (5)通信連接維護是面向通信的倆個端點的,而不考慮中間網(wǎng)段和節(jié)點。
? ? ? ? TCP三次握手
? ??????????TCP三次即建立TCP連接,指建立一個TCP連接時,需要客戶端服務端總共發(fā)送3?個包以確認連接的建立。

(1)第一次握手:Client將標志位SYN置為1(表示要發(fā)起一個連接),隨機產生一個值seq=J,并將該數(shù)據(jù)包發(fā)送給Server,Client進入SYN_SENT狀態(tài),等待Server確認。
(2)第二次握手:Server收到數(shù)據(jù)包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,并將該數(shù)據(jù)包發(fā)送給Client以確認連接請求,Server進入SYN_RCVD狀態(tài)。
(3)第三次握手:Client收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,并將該數(shù)據(jù)包發(fā)送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態(tài),完成三次握手,隨后Client與Server之間可以開始傳輸數(shù)據(jù)了。
? ??????四次揮手
? ??????????所謂四次揮手(Four-Way Wavehand)即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務端總共發(fā)送4個包以確認連接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執(zhí)行close來觸發(fā),整個流程如下圖所示:

? ????由于TCP連接時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成數(shù)據(jù)發(fā)送任務后,發(fā)送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動了,即不會再收到數(shù)據(jù)了,但是在這個TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN。首先進行關閉的一方將執(zhí)行主動關閉,而另一方則執(zhí)行被動關閉,上圖描述的即是如此。
(1)第一次揮手:Client發(fā)送一個FIN,用來關閉Client到Server的數(shù)據(jù)傳送,Client進入FIN_WAIT_1狀態(tài)。
(2)第二次揮手:Server收到FIN后,發(fā)送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態(tài)。
(3)第三次揮手:Server發(fā)送一個FIN,用來關閉Server到Client的數(shù)據(jù)傳送,Server進入LAST_ACK狀態(tài)。
(4)第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態(tài),接著發(fā)送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態(tài),完成四次揮手。
UDP協(xié)議(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)
? ??UDP用戶數(shù)據(jù)報協(xié)議,是面向無連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號和源端口號信息,由于通訊不需要連接,所以可以實現(xiàn)廣播發(fā)送。UDP通訊時不需要接收方確認,屬于不可靠的傳輸,可能會出現(xiàn)丟包現(xiàn)象,實際應用中要求程序員編程驗證。
? ? UDP是一種無連接,盡力而為的傳輸層通信協(xié)議。它有如下特點
? ? ? ? (1)面向報文的協(xié)議;
? ? ? ? (2)無連接;
? ? ? ? (3)盡力而為的通信方式;
? ? ? ? (4)資源消耗小,處理速度快的優(yōu)點;
? ? ? ? (5)在網(wǎng)絡狀況不佳的情況下數(shù)據(jù)的丟包情況會非常嚴重
UDP和TCP的對比——UDP和TCP是TCP/IP體系結構運輸層中的倆個重要協(xié)議
UDP:隨時可以傳輸數(shù)據(jù)傳輸數(shù)據(jù),不需要建立連接,所以可以總結為無連接的UDP。
TCP:首先進行“三報文握手”建立連接,然后數(shù)據(jù)傳輸,數(shù)據(jù)傳輸結束后需要“四報文揮手”釋放連接。傳輸過程需要一對一的連接后再進行數(shù)據(jù)傳輸。面向連接的TCP
總結:UDP不需要建立連接,TCP需要建立連接后進行數(shù)據(jù)傳輸。

UDP:因為它不需要建立連接,所以它可以進行單播、多播和廣播
TCP:數(shù)據(jù)傳輸是基于TCP連接的可靠信道,所以TCP僅支持單播
總結:UDP支持單播、多播和廣播,TCP只支持單播

UDP:數(shù)據(jù)傳輸是面向報文傳輸
TCP:數(shù)據(jù)傳輸時面向字節(jié)流


