OSI七層模型
OSI(Open System Interconnection)涨缚,由底層到高層分別為鳄梅,物理層偷遗、數(shù)據(jù)鏈路層圈盔,網(wǎng)絡層,傳輸層罚拟、會話層台诗,表示層、應用層
物理層:負責將比特流與電子信號轉(zhuǎn)換
數(shù)據(jù)鏈路層:定義了通過通信介質(zhì)相互連接的設備之間赐俗,數(shù)據(jù)傳輸?shù)囊?guī)范拉队。有兩個重要的概念:MAC 地址和分組交換,數(shù)據(jù)鏈路層的意義在于阻逮,如果沒有數(shù)據(jù)鏈路層粱快,數(shù)據(jù)只能以流的形式存在與通信介質(zhì)中,不知道該發(fā)送往哪里叔扼,過長的數(shù)據(jù)流可能無法在通信介質(zhì)中傳輸事哭。
網(wǎng)絡層:主要作用是實現(xiàn)終端節(jié)點間的通信。IP協(xié)議是網(wǎng)絡層的一個重要協(xié)議瓜富,網(wǎng)絡層中還有ARP(獲取MAC地址)和ICMP協(xié)議(數(shù)據(jù)發(fā)送異常通知)鳍咱,數(shù)據(jù)鏈路層的作用在于實現(xiàn)同一種數(shù)據(jù)鏈路下的包傳遞,而網(wǎng)絡層則可以實現(xiàn)跨越不同數(shù)據(jù)鏈路的包傳遞与柑。比如主機A通過Wi-Fi連接到路由器B谤辜,路由器B通過以太網(wǎng)連接到路由器C,而路由器C又通過Wi-Fi與主機D保持連接价捧。這時主機A向D發(fā)送的數(shù)據(jù)包就依賴于網(wǎng)絡層進行傳輸每辟。
傳輸層:傳輸層的主要作用是實現(xiàn)應用程序之間的通信。網(wǎng)絡層主要是保證不同數(shù)據(jù)鏈路下數(shù)據(jù)的可達性干旧,至于如何傳輸數(shù)據(jù)則是由傳輸層負責,TCP 協(xié)議和 UDP 協(xié)議妹蔽。
會話層:會話的建立和結束
表示層:數(shù)據(jù)表示椎眯、壓縮和加密presentation挠将,表示層相當于一個東西的表示,表示的一些協(xié)議编整,比如圖片舔稀、聲音和視頻MPEG。
應用層:直接為用戶的應用程序提供服務,應用接口掌测,TELNET内贮、FTP、HTTP
TCP/UDP
兩個協(xié)議是進程間通信汞斧,也就是說應用間的通信夜郁,
在傳輸層,使用端口號來識別同一臺計算機中進行通信的不同應用程序粘勒,TCP/IP或UDP/IP通信中通常使用5個信息來識別一個通信:“源IP地址”竞端、“目標IP地址”、“源端口號”庙睡、“目標端口號”以及“協(xié)議號”
TCP協(xié)議:面向連接事富,可靠的流協(xié)議。連接是指兩個應用程序為了傳遞信息而專有的虛擬的通信線路乘陪,也稱為虛擬電路统台。TCP充分實現(xiàn)了數(shù)據(jù)傳輸時各種控制功能,可以進行丟包的重發(fā)控制啡邑,還可以對次序亂掉的分包進行順序控制贱勃。而這些在UDP中都沒有。此外谣拣,TCP作為一種面向有連接的協(xié)議募寨,只有在確認通信對端存在時才會發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費森缠。
TCP通過檢驗和拔鹰、序列號、確認應答贵涵、重發(fā)控制列肢、連接管理以及窗口控制等機制實現(xiàn)可靠性傳輸。
效率要求相對低宾茂,但對準確性要求相對高的場景瓷马。因為傳輸中需要對數(shù)據(jù)確認、重發(fā)跨晴、排序等操作欧聘,相比之下效率沒有UDP高。舉幾個例子:文件傳輸(準確高要求高端盆、但是速度可以相對慢)怀骤、接受郵件费封、遠程登錄。
UDP協(xié)議:面向無連接蒋伦,不具有可靠性的數(shù)據(jù)報協(xié)議弓摘。只確保發(fā)送消息,其他處理都由上層應用來完成痕届。
即使是出現(xiàn)網(wǎng)絡擁堵的情況下韧献,UDP也無法進行流量控制等避免網(wǎng)絡擁塞的行為。此外研叫,傳輸途中如果出現(xiàn)了丟包锤窑,UDP也不負責重發(fā)。甚至當出現(xiàn)包的到達順序亂掉時也沒有糾正的功能蓝撇。如果需要這些細節(jié)控制果复,那么不得不交給由采用UDP的應用程序去處理。換句話說渤昌,UDP將部分控制轉(zhuǎn)移到應用程序去處理虽抄,自己卻只提供作為傳輸層協(xié)議的最基本功能。UDP有點類似于用戶說什么聽什么的機制独柑,但是需要用戶充分考慮好上層協(xié)議類型并制作相應的應用程序迈窟。
效率要求相對高,對準確性要求相對低的場景忌栅。舉幾個例子:QQ聊天车酣、在線視頻、網(wǎng)絡語音電話(即時通訊索绪,速度要求高湖员,但是出現(xiàn)偶爾斷續(xù)不是太大問題,并且此處完全不可以使用重發(fā)機制)瑞驱、廣播通信(廣播娘摔、多播)。
TCP與UDP區(qū)別總結:
1唤反、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的凳寺,即發(fā)送數(shù)據(jù)之前不需要建立連接
2、TCP提供可靠的服務彤侍。也就是說肠缨,通過TCP連接傳送的數(shù)據(jù),無差錯盏阶,不丟失晒奕,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3脑慧、TCP面向字節(jié)流惠窄,實際上是TCP把數(shù)據(jù)看成一連串無結構的字節(jié)流;UDP是面向報文的,沒有擁塞控制漾橙,因此網(wǎng)絡出現(xiàn)擁塞不會使源主機的發(fā)送速率降低(對實時應用很有用,如IP電話楞卡,實時視頻會議等)
4霜运、每一條TCP連接只能是點到點的;UDP支持一對一,一對多蒋腮,多對一和多對多的交互通信
5淘捡、TCP首部開銷20字節(jié);UDP的首部開銷小,只有8個字節(jié)
6池摧、TCP的邏輯通信信道是全雙工的可靠信道焦除,UDP則是不可靠信道
UDP(User Datagram Protocol)用戶數(shù)據(jù)報協(xié)議
UDP不提供復雜的控制機制,利用IP提供面向無連接的通信服務作彤。并且它是將應用程序發(fā)來的數(shù)據(jù)在收到的那一刻膘魄,立即按照原樣發(fā)送到網(wǎng)絡上的一種機制。
無需建立連接(減少延遲)
實現(xiàn)簡單:無需維護連接狀態(tài)
頭部開銷小
沒有擁塞控制:應用可以更好的控制發(fā)送時間和發(fā)送速率
TCP(Transmission Control Protocol)傳輸控制協(xié)議
TCP通過校驗和竭讳、序列號创葡、確認應答、重發(fā)控制绢慢、連接管理以及窗口控制等機制實現(xiàn)可靠性傳輸灿渴。數(shù)據(jù)通信之前必須先做好連接工作,在TCP中連接的建立需要三次握手胰舆,同時在通信結束時會進行斷開連接的處理(四次揮手)骚露。一個連接的建立與斷開,正常過程至少需要來回送7個包才能完成缚窿。
TCP的三次握手:是指建立一個TCP連接時棘幸,需要客戶端和服務器總共發(fā)送3個包。
1滨攻、客戶端向服務器發(fā)送一個SYN(synchronous),客戶端進入SYN_SEND狀態(tài)
2够话、服務器收到SYN包后,服務器進入SYN_RECV狀態(tài)光绕,發(fā)出SYN+ACK(Acknowledgement)
3女嘲、客戶端收到SYN+ACK后發(fā)出ACK確認給服務器,客戶端進入ESTABLISH狀態(tài)。
4诞帐、服務器收到ACK后欣尼,服務器進入ESTABLISH狀態(tài)。
連接建立,開始傳輸數(shù)據(jù)愕鼓。
TCP的四次揮手:TCP的連接的拆除需要發(fā)送四個包
TCP連接是全雙工的钙态,所以它允許兩個方向的數(shù)據(jù)傳輸被獨立關閉,通信的一端可以發(fā)送結束報文段給對方菇晃,告訴它本端已經(jīng)完成了數(shù)據(jù)的發(fā)送册倒,但允許繼續(xù)接收來自對方的數(shù)據(jù),直到對方也發(fā)送結束報文段以關閉連接磺送。
1驻子、客戶端發(fā)送發(fā)送一個FIN,等待服務器返回ACK和FIN估灿,客戶端進入FIN_WAIT_1狀態(tài)崇呵;
2、服務器接收FIN馅袁,發(fā)出一個收到FIN的ACK確認域慷,服務器進入Close Wait狀態(tài);
3汗销、客戶端收到ACK犹褒,繼續(xù)等待服務器的FIN,客戶端進入FIN_WAIT_2狀態(tài)大溜;
4化漆、服務器發(fā)送FIN,服務器等待客戶端收到FIN的ACK钦奋,服務器進入LAST_ACK狀態(tài)座云;
5、客戶端收到FIN付材,發(fā)出ACK朦拖,客戶端進入TIME_WAIT狀態(tài)(2MSL等待狀態(tài));等到2MSL后厌衔,客戶端進入CLOSE狀態(tài)
6璧帝、服務器接收ACK,服務器進入CLOSE狀態(tài);
連接關閉富寿。
TCP窗口:TCP中睬隶,發(fā)送端的數(shù)據(jù)包到達接收端時,接收端會返回一個帶序號的ACK確認页徐,當數(shù)據(jù)包丟失或者ACK丟失或者延誤時苏潜,發(fā)送端就會重新發(fā)送數(shù)據(jù)包。當ACK延誤時变勇,會出現(xiàn)重復發(fā)送的狀況恤左。引入序號機制則可以避免重復發(fā)送實現(xiàn)可靠傳輸。如果每次發(fā)送都要等確認的話,這樣包的往返時間飞袋,網(wǎng)絡吞吐量就會差戳气。所以引入窗口機制。窗口控制巧鸭,允許收到ACK之前瓶您,多次發(fā)送數(shù)據(jù)組。
TCP流量控制:就是讓發(fā)送方的發(fā)送速率不要太快纲仍,要讓接收方來得及接收览闰。原理這就是運用TCP報文段中的窗口大小字段來控制,發(fā)送方的發(fā)送窗口不可以大于接收方發(fā)回的窗口大小巷折。
TCP擁塞控制:擁塞窗口cwnd慢開始,收到ACK時崖咨,擁塞窗口由1開始指數(shù)級增長锻拘,增長到慢開始門限值ssthresh時,執(zhí)行擁塞避免算法,擁塞窗口按線性規(guī)律增長击蹲。
TCP/IP
TCP/IP協(xié)議族分為四層:應用層署拟,傳輸層,網(wǎng)絡層歌豺,數(shù)據(jù)鏈路層推穷。這樣分層可以將功能分割開來,如果需要改動类咧,只需要改動對應層級的協(xié)議而不需要替換整體馒铃,定義好對應的接口后,每個層次內(nèi)部就可以自由設計了痕惋。
應用層:應用層決定了向用戶提供應用服務時的通信活動区宇,F(xiàn)TP,DNS,HTTP協(xié)議就是在這一層
傳輸層:提供處于網(wǎng)絡中的兩臺計算機之間的通信,TCP和UDP
網(wǎng)絡層:網(wǎng)絡層用來處理網(wǎng)絡上的數(shù)據(jù)包值戳,數(shù)據(jù)包是網(wǎng)絡傳輸?shù)淖钚挝灰楣龋W(wǎng)絡層規(guī)定了通過怎么樣的路徑到達對方計算機,并把數(shù)據(jù)包傳給對方堕虹。網(wǎng)絡層的作用就是在眾多選項中選擇一個傳輸路線卧晓。IP協(xié)議。IP協(xié)議的作用就是把數(shù)據(jù)包傳遞給對方赴捞,而要準確地把數(shù)據(jù)包發(fā)送給對方逼裆,要滿足條件,最重要的條件就是IP地址和MAC地址螟炫,IP地址指明了節(jié)點被分配到的位置波附,可換,MAC地址指網(wǎng)卡所屬的地址,固定掸屡。
數(shù)據(jù)鏈路層:用來處理連接網(wǎng)絡的硬件部分封寞,包括控制操作系統(tǒng),硬件的設備驅(qū)動仅财,NIC(網(wǎng)卡)狈究,光釬等硬件可見部分。
Socket
Socket是對TCP/IP協(xié)議的封裝盏求,Socket本身并不是協(xié)議抖锥,而是一個調(diào)用接口(API),通過Socket碎罚,我們才能使用TCP/IP協(xié)議磅废。
在socket編程中,客戶端執(zhí)行connect()時,將觸發(fā)三次握手荆烈。在socket編程中拯勉,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。
Socket連接與HTTP連接的不同
通常情況下Socket連接就是TCP連接憔购,因此Socket連接一旦建立宫峦,通信雙方即可開始相互發(fā)送數(shù)據(jù)內(nèi)容,直到雙方連接斷開玫鸟。但在實際應用中导绷,客戶端到服務器之間的通信防火墻默認會關閉長時間處于非活躍狀態(tài)的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網(wǎng)絡屎飘,該連接處于活躍狀態(tài)妥曲。
而HTTP連接使用的是“請求—響應”的方式,不僅在請求時需要先建立連接钦购,而且需要客戶端向服務器發(fā)出請求后逾一,服務器端才能回復數(shù)據(jù)。
長連接和短連接
長連接:在TCP連接保持期間肮雨,如果沒有數(shù)據(jù)包發(fā)送遵堵,需要雙方發(fā)檢測包以維持此連接,一般需要自己做在線維持怨规。連接→數(shù)據(jù)傳輸→保持連接(心跳)→數(shù)據(jù)傳輸→保持連接(心跳)→……→關閉連接陌宿;
長連接多用于操作頻繁,點對點的通訊波丰,而且連接數(shù)不能太多情況壳坪。
每個TCP連接都需要三步握手,這需要時間掰烟,如果每個操作都是先連接爽蝴,再操作的話那么處理速度會降低很多沐批,
所以每個操作完后都不斷開,下次次處理時直接發(fā)送數(shù)據(jù)包就OK了蝎亚,不用建立TCP連接九孩。
短連接: 指通信雙方有數(shù)據(jù)交互時,就建立一個TCP連接发框,數(shù)據(jù)發(fā)送完成后躺彬,則斷開此TCP連接;連接→數(shù)據(jù)傳輸→關閉連接;