????????很多人都把TCP/IP理解為T(mén)CP和IP苹威,其實(shí)不是。TCP/IP其實(shí)是一個(gè)協(xié)議族群包括了TCP協(xié)議办悟,UDP協(xié)議尘奏,IP協(xié)議,DHCP協(xié)議(動(dòng)態(tài)IP)病蛉,SSH(遠(yuǎn)程登錄協(xié)議)炫加,HTTP協(xié)議(超文本傳輸協(xié)議),PPP協(xié)議(點(diǎn)對(duì)點(diǎn)通信協(xié)議)铺然。
? ? ? ? 首先說(shuō)一下OSI七層模型
分別是 1俗孝,物理層,主要負(fù)責(zé)電子信號(hào)與比特流之間的轉(zhuǎn)換
? ? ? ? ? ? 2魄健,數(shù)據(jù)鏈路層赋铝,主要是負(fù)責(zé)比特流與數(shù)據(jù)幀之間的轉(zhuǎn)換
? ? ? ? ? ? 3,網(wǎng)絡(luò)層沽瘦,主要是數(shù)據(jù)幀與數(shù)據(jù)包之間的轉(zhuǎn)換革骨,已經(jīng)數(shù)據(jù)經(jīng)過(guò)那個(gè)路由器傳到那個(gè)IP地址去农尖。
? ? ? ? ? ? 4, 傳輸層良哲,檢查數(shù)據(jù)是否有丟失
? ? ? ? ? ? 5盛卡,會(huì)話層,什么時(shí)候建立連接筑凫,連接多久窟扑,以及什么時(shí)候斷開(kāi)連接
? ? ? ? ? ? 6,表示層漏健,接收文字,圖片以及聲音
? ? ? ? ? ? 7橘霎,應(yīng)用層蔫浆,提供針對(duì)應(yīng)用的協(xié)議(DHCP(動(dòng)態(tài)主機(jī)協(xié)議),HTTP協(xié)議姐叁,F(xiàn)TP協(xié)議(文件傳輸)瓦盛,遠(yuǎn)程登錄協(xié)議(SSH,TELNET)外潜,域名解析協(xié)議(DNS))
然后說(shuō)一下TCP/IP中的四層分層
? ? ? ? ? ? 1原环,網(wǎng)絡(luò)接口層,? 表示以太網(wǎng)处窥,無(wú)線網(wǎng)LAN什么的嘱吗,PPP協(xié)議也是這一層面的
? ? ? ? ? ? 2,網(wǎng)際層滔驾,對(duì)應(yīng)OSI中的網(wǎng)絡(luò)層
? ? ? ? ? ? 3谒麦,傳輸層,對(duì)應(yīng)OSI中的傳輸層
? ? ? ? ? ? 4哆致,應(yīng)用層绕德,對(duì)應(yīng)OSI中的最上面三層
TCP/IP技術(shù)是一種分組交換技術(shù),可以讓連接到通信電路的計(jì)算機(jī)將數(shù)據(jù)分成很多數(shù)據(jù)包摊阀,按照一定的順序發(fā)送出去耻蛇,這樣計(jì)算機(jī)可以一齊接收發(fā)數(shù)據(jù),分組的首部寫(xiě)入了發(fā)送端和接收端胞此。之前使用的通信技術(shù)類似于打電話的情景臣咖,只能連接一個(gè)。而分組可以同時(shí)連接多個(gè)
這其中IP協(xié)議的作用就是把各種數(shù)據(jù)包發(fā)送給對(duì)方豌鹤,IP協(xié)議是一種面向無(wú)連接的協(xié)議(主要是為了簡(jiǎn)化與提速)亡哄,其大致分為三大模塊,IP尋址(IP地址具有層次性布疙,就是為了方便尋址)蚊惯,IP分包與組包愿卸,以及路由。路由控制是指將數(shù)據(jù)發(fā)送到目標(biāo)地址的功能截型,為了將數(shù)據(jù)發(fā)送到指定主機(jī)趴荸,所有的主機(jī)都維護(hù)了一張路由表。
TCP協(xié)議是一種面向連接的可靠流協(xié)議宦焦。流就是指不斷的數(shù)據(jù)結(jié)構(gòu)发钝。下面看一看TCP的報(bào)文格式
TCP報(bào)文中沒(méi)有報(bào)文長(zhǎng)度,因?yàn)門(mén)CP的報(bào)文長(zhǎng)度可以從IP報(bào)文中獲取波闹。
緊急指針用于暫時(shí)中斷通信或者中斷通信酝豪。
選項(xiàng),選項(xiàng)字段用于控制TCP的性能
TCP傳輸數(shù)據(jù)的基本單位是MSS(最大消息長(zhǎng)度)精堕,在傳輸大量數(shù)據(jù)時(shí)孵淘,是以MSS的大小將數(shù)據(jù)切割發(fā)送的,進(jìn)行重發(fā)時(shí)也是一樣歹篓。在三次握手階段瘫证,雙方會(huì)把接口能夠接受的MSS卸載首部報(bào)文中,在使用時(shí)選取小的哪一個(gè)投入使用庄撮。
再來(lái)說(shuō)一說(shuō)TCP的三次握手背捌。每一次建立TCP連接,都會(huì)有連接建立洞斯,數(shù)據(jù)傳輸和連接斷開(kāi)三個(gè)階段毡庆,
三次握手就發(fā)生在第一個(gè)階段,TCP確認(rèn)應(yīng)答的機(jī)制來(lái)保證數(shù)據(jù)傳輸?shù)目煽啃岳尤纭.?dāng)發(fā)送端把數(shù)據(jù)發(fā)送出去后扭仁,如果有確認(rèn)應(yīng)答,那么就說(shuō)明數(shù)據(jù)傳輸成功厅翔,如果沒(méi)有乖坠。那么很大的可能就是數(shù)據(jù)發(fā)送失敗。在一定時(shí)間內(nèi)沒(méi)有接收到應(yīng)答刀闷,發(fā)送端就會(huì)進(jìn)行數(shù)據(jù)重發(fā)熊泵。但是要是一直重發(fā)的話對(duì)于目標(biāo)主機(jī)的負(fù)擔(dān)太大,這是就引入了一種三次握手的機(jī)制甸昏,這就是三次機(jī)制顽分。這種機(jī)制就是給數(shù)據(jù)包編號(hào),通過(guò)序列號(hào)和確認(rèn)應(yīng)答號(hào)施蜜,TCP就可以完成可靠傳輸卒蘸。
三次握手的意義:
client發(fā)出的第一個(gè)連接請(qǐng)求報(bào)文段并沒(méi)有丟失,而是在某個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)長(zhǎng)時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)server缸沃。本來(lái)這是一個(gè)早已失效的報(bào)文段恰起。但server收到此失效的連接請(qǐng)求報(bào)文段后,就誤認(rèn)為是client再次發(fā)出的一個(gè)新的連接請(qǐng)求趾牧。于是就向client發(fā)出確認(rèn)報(bào)文段检盼,同意建立連接。假設(shè)不采用三次握手翘单,那么只要server發(fā)出確認(rèn)吨枉,新的連接就建立了。由于現(xiàn)在client并沒(méi)有發(fā)出建立連接的請(qǐng)求哄芜,因此不會(huì)理睬server的確認(rèn)貌亭,也不會(huì)向server發(fā)送數(shù)據(jù)。但server卻以為新的運(yùn)輸連接已經(jīng)建立认臊,并一直等待client發(fā)來(lái)數(shù)據(jù)属提。這樣,server的很多資源就白白浪費(fèi)掉了美尸。采用三次握手的辦法可以防止上述現(xiàn)象發(fā)生。例如剛才那種情況斟薇,client不會(huì)向server的確認(rèn)發(fā)出確認(rèn)师坎。server由于收不到確認(rèn),就知道client并沒(méi)有要求建立連接堪滨。
三次握手的理解:這個(gè)問(wèn)題的本質(zhì)是胯陋,信道本身是不可靠的,但是通信的雙方需要就某個(gè)問(wèn)題達(dá)成一致袱箱,而要解決這個(gè)問(wèn)題遏乔,無(wú)論是在消息中包含什么,三次通信時(shí)候理論上的最小值发笔。所以三次握手不是TCP本身的需求盟萨,而是為了滿足在不可靠的信道上可靠的通行這一需求所導(dǎo)致的。
TCP四次揮手:
為什么TCP協(xié)議終止鏈接要四次了讨?
1捻激、當(dāng)主機(jī)A確認(rèn)發(fā)送完數(shù)據(jù)且知道B已經(jīng)接受完了,想要關(guān)閉發(fā)送數(shù)據(jù)口(當(dāng)然確認(rèn)信號(hào)還是可以發(fā))前计,就會(huì)發(fā)FIN給主機(jī)B胞谭。
2、主機(jī)B收到A發(fā)送的FIN男杈,表示收到了丈屹,就會(huì)發(fā)送ACK回復(fù)。
3伶棒、但這是B可能還在發(fā)送數(shù)據(jù)旺垒,沒(méi)有想要關(guān)閉數(shù)據(jù)口的意思彩库,所以FIN與ACK不是同時(shí)發(fā)送的,而是等到B數(shù)據(jù)發(fā)送完了袖牙,才會(huì)發(fā)送FIN給主機(jī)A侧巨。
4、A收到B發(fā)來(lái)的FIN鞭达,知道B的數(shù)據(jù)也發(fā)送完了司忱,回復(fù)ACK,A等待2MSL以后畴蹭,沒(méi)有收到B傳來(lái)的任何消息坦仍,知道B已經(jīng)收到自己的ACK了,A就關(guān)閉鏈接叨襟,B也關(guān)閉鏈接了繁扎。
下面來(lái)看一看UDP協(xié)議,一種面向無(wú)連接的不可靠的數(shù)據(jù)包協(xié)議糊闽。雖然可以指定消息傳輸?shù)拇笮∈崦担菂s不一定保證消息一定會(huì)到達(dá)(用于高速傳輸和對(duì)實(shí)時(shí)性要求比較高的通信或者廣播)
下面是UDP的報(bào)文格式
校驗(yàn)和:用于校驗(yàn)數(shù)據(jù)是否有丟失
包長(zhǎng)度:數(shù)據(jù)的長(zhǎng)度(單位字節(jié))