-
當(dāng)瀏覽器輸入網(wǎng)址輸入www.baidu.com之后遏乔。
-
瀏覽器會(huì)將域名解析成ip地址式曲。how?
- 用戶主機(jī)上運(yùn)行著DNS的客戶端妨托,就是我們的PC機(jī)或者手機(jī)客戶端運(yùn)行著DNS客戶端了
- 瀏覽器將接收到的url中抽取出域名字段,就是訪問的主機(jī)名吝羞,比如
, 并將這個(gè)主機(jī)名傳送給DNS應(yīng)用的客戶端兰伤。
DNS應(yīng)用的客戶端首先會(huì)在瀏覽器的緩存中查找是否有該域名對(duì)應(yīng)的IP地址(若曾經(jīng)訪問過該域名且沒有清空緩存便存在)
當(dāng)瀏覽器緩存中無域名對(duì)應(yīng)IP則會(huì)自動(dòng)檢查用戶計(jì)算機(jī)系統(tǒng)Hosts文件DNS緩存是否有該域名對(duì)應(yīng)IP;
當(dāng)瀏覽器及系統(tǒng)緩存中均無域名對(duì)應(yīng)IP則進(jìn)入路由器緩存中檢查钧排,以上三步均為客服端的DNS緩存敦腔;
如果hosts與本地DNS解析器緩存都沒有相應(yīng)的網(wǎng)址映射關(guān)系,首先會(huì)找TCP/ip參數(shù)中設(shè)置的首選DNS服務(wù)器( ISP(互聯(lián)網(wǎng)服務(wù)提供商)DNS緩存)卖氨,在此我們叫它本地DNS服務(wù)器会烙,此服務(wù)器收到查詢時(shí),如果要查詢的域名筒捺,包含在本地配置區(qū)域資源中柏腻,則返回解析結(jié)果給客戶機(jī),完成域名解析系吭,此解析具有權(quán)威性五嫂。
DNS使用TCP和UDP端口53。
image.png
DNS請(qǐng)求包:https://juejin.im/post/5ab719c151882577b45ef9d9
- 如果本地DNS服務(wù)器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地DNS服務(wù)器的設(shè)置(是否設(shè)置轉(zhuǎn)發(fā)器)進(jìn)行查詢沃缘,如果未用轉(zhuǎn)發(fā)模式躯枢,本地DNS就把請(qǐng)求發(fā)至13臺(tái)根DNS,根DNS服務(wù)器收到請(qǐng)求后會(huì)判斷這個(gè)域名(.com)是誰來授權(quán)管理槐臀,并會(huì)返回一個(gè)負(fù)責(zé)該頂級(jí)域名服務(wù)器的一個(gè)IP锄蹂。本地DNS服務(wù)器收到IP信息后,將會(huì)聯(lián)系負(fù)責(zé).com域的這臺(tái)服務(wù)器水慨。這臺(tái)負(fù)責(zé).com域的服務(wù)器收到請(qǐng)求后得糜,如果自己無法解析,它就會(huì)找一個(gè)管理.com域的下一級(jí)DNS服務(wù)器地址([http://baidu.com])給本地DNS服務(wù)器晰洒。當(dāng)本地DNS服務(wù)器收到這個(gè)地址后朝抖,就會(huì)找[http://baidu.com]域服務(wù)器,重復(fù)上面的動(dòng)作谍珊,進(jìn)行查詢治宣,直至找到www . baidu .com主機(jī)
迭代DNS解析過程詳解 https://blog.csdn.net/crazw/article/details/8986504
總結(jié)一下便是
①本機(jī)向local dns請(qǐng)求www.baidu.com
②local dns向根域請(qǐng)求www.baidu.com,根域返回com.域的服務(wù)器IP
③向com.域請(qǐng)求www.baidu.com砌滞,com.域返回baidu.com域的服務(wù)器IP
④向baidu.com請(qǐng)求www.baidu.com侮邀,返回cname www.a.shifen.com和a.shifen.com域的服務(wù)器IP
⑤向root域請(qǐng)求www.a.shifen.com
⑥向com.域請(qǐng)求www.a.shife.com
⑦向shifen.com請(qǐng)求
⑧向a.shifen.com域請(qǐng)求
⑨拿到www.a.shifen.com的IP
⑩localdns返回本機(jī)www.baidu.com cname www.a.shifen.com 以及 www.a.shifen.com的IP
-
上面提到的DNS請(qǐng)求包是UDP轉(zhuǎn)發(fā)。UDP是什么布持?從OSI理解怎么發(fā)信息豌拙?
從TCP/IP圖中可以看出,DNS服務(wù)屬于OSI的應(yīng)用層题暖。應(yīng)用層開始將加上報(bào)頭的DNS請(qǐng)求包依次傳到傳輸層按傅。這里我們假定它傳輸層走的UDP “IP地址:53端口”。
** UDP ** 是用戶數(shù)據(jù)報(bào)協(xié)議胧卤。** 也就是說他傳送的是一個(gè)又一個(gè)數(shù)據(jù)包唯绍,與之相應(yīng)的TCP傳輸?shù)摹傲鳌?** 。 它利用IP提供面向 ** 無連接 ** 的通信服務(wù)枝誊,將應(yīng)用程序發(fā)來的數(shù)據(jù)在收到的那一刻况芒,立刻按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機(jī)制,并不能保證它們能到達(dá)目的地叶撒。即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況下绝骚,UDP也無法進(jìn)行 ** 流量控制 ** 等避免網(wǎng)絡(luò)擁塞的行為。此外祠够,傳輸途中如果出現(xiàn)了** 丟包压汪,UDP也不負(fù)責(zé)重發(fā) ** 。甚至當(dāng)出現(xiàn)包的到達(dá)順序亂掉時(shí)也沒有糾正的功能古瓤。如果需要這些** 細(xì)節(jié)控制 ** 止剖,那么不得不交給由采用UDP的應(yīng)用程序去處理腺阳。換句話說,UDP將部分控制轉(zhuǎn)移到應(yīng)用程序去處理穿香,自己卻只提供作為傳輸層協(xié)議的最基本功能亭引。UDP有點(diǎn)類似于用戶說什么聽什么的機(jī)制,但是需要用戶充分考慮好上層協(xié)議類型并制作相應(yīng)的應(yīng)用程序皮获。
** UDP頭部8字節(jié)焙蚓。與之對(duì)比的TCP,頭部大很多洒宝,開銷20字節(jié)主届。**
TCP與UDP區(qū)別總結(jié):
1、TCP面向連接(如打電話要先撥號(hào)建立連接);UDP是無連接的待德,即發(fā)送數(shù)據(jù)之前不需要建立連接
2、TCP提供可靠的服務(wù)枫夺。也就是說将宪,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò)橡庞,不丟失较坛,不重復(fù),且按序到達(dá);UDP盡最大努力交付扒最,即不保 證可靠交付
3丑勤、TCP面向字節(jié)流,實(shí)際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報(bào)文的
UDP沒有擁塞控制吧趣,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會(huì)使源主機(jī)的發(fā)送速率降低(對(duì)實(shí)時(shí)應(yīng)用很有用法竞,如IP電話,實(shí)時(shí)視頻會(huì)議等)
4强挫、每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一岔霸,一對(duì)多,多對(duì)一和多對(duì)多的交互通信
5俯渤、TCP首部開銷20字節(jié);UDP的首部開銷小呆细,只有8個(gè)字節(jié)
6、TCP的邏輯通信信道是全雙工的可靠信道八匠,UDP則是不可靠信道
這里看好像數(shù)據(jù)就從傳輸層到目的ip主機(jī)的對(duì)應(yīng)傳輸層直接連通起來了絮爷,這里就是因?yàn)閭鬏攲酉旅嬉粚?** 數(shù)據(jù)鏈路層 ** 實(shí)現(xiàn)了透明傳輸?shù)摹?* 透明傳輸 ** 如何辦到呢?
網(wǎng)絡(luò)層傳輸?shù)陌╬acket梨树,又稱分組)坑夯,在數(shù)據(jù)鏈路層中傳輸?shù)氖恰皫保╢rame)。數(shù)據(jù)包到達(dá)數(shù)據(jù)鏈路層后加上數(shù)據(jù)鏈路層的協(xié)議頭和協(xié)議尾就構(gòu)成了一個(gè)數(shù)據(jù)幀劝萤。在每個(gè)幀的前部加上一個(gè)幀頭部渊涝,在幀的結(jié)尾處加上一個(gè)幀尾部,把網(wǎng)絡(luò)層的數(shù)據(jù)包作為幀的數(shù)據(jù)部分,就構(gòu)成了一個(gè)完整幀跨释。幀頭和幀尾就是作為幀的起始和結(jié)束標(biāo)志胸私,也就是幀邊界。
幀結(jié)構(gòu)
幀頭部:
這里補(bǔ)充前篇數(shù)據(jù)鏈路層中沒有說到的一點(diǎn):在以太局域網(wǎng)中鳖谈,由于數(shù)據(jù)鏈路層分成了LLC子層和MAC子層這兩層岁疼,所以來自網(wǎng)絡(luò)層的IP數(shù)據(jù)報(bào)在到達(dá)數(shù)據(jù)鏈路層后先要經(jīng)過LLC子層和MAC子層的協(xié)議頭封裝,最終形成數(shù)據(jù)鏈路層的以太網(wǎng)MAC幀缆娃。
由數(shù)據(jù)包封裝成的數(shù)據(jù)幀其大小是受對(duì)應(yīng)的數(shù)據(jù)鏈路層協(xié)議的** MTU(最大傳輸單元)** 限制的捷绒。
如以太網(wǎng)數(shù)據(jù)鏈路層封裝網(wǎng)絡(luò)層IP 包的MTU 值為1500 字節(jié)(這是指幀中數(shù)據(jù)部分,也就是來自網(wǎng)絡(luò)層整個(gè)數(shù)據(jù)分組贯要,最大不能超過1500 字節(jié)暖侨,但不包括幀頭和幀尾部分)。同時(shí)崇渗,幀還有最小大小限制字逗,如以太網(wǎng)幀中封裝的IP 包最小值為46 字節(jié),如果封裝的IP 包小于最小幀要求時(shí)宅广,就要用一些特殊字符進(jìn)行填充葫掉,以滿足對(duì)應(yīng)鏈路中傳輸最小幀的限制。
在發(fā)送端數(shù)據(jù)鏈路層中的幀到達(dá)** 物理層 ** 后就會(huì)以比特為單位進(jìn)行傳輸跟狱,而不是以幀為單位進(jìn)行傳輸俭厚。盡管在并行傳輸方式中,可以一次傳輸一個(gè)或多個(gè)字節(jié)驶臊,但每條線路中的傳輸單位還是比特挪挤。要使接收端的數(shù)據(jù)鏈路層對(duì)從物理層傳輸而來的一串串比特流以幀為單位進(jìn)行區(qū)分,我們需要進(jìn)行 ** 幀同步 **。
幀同步方法的基本同步原理:字節(jié)計(jì)數(shù)法关翎、字符填充的首尾定界符法电禀、比特填充的首尾定界符法、違法編碼法笤休。
這里僅介紹字符填充的首尾定界符法
該同步方法是用一些特定的控制字符來定界一個(gè)幀的起始與結(jié)束尖飞,如IBM 的BSC 協(xié)議在每個(gè)數(shù)據(jù)塊的頭部用一個(gè)或多個(gè)同步字符“SYN”來標(biāo)記數(shù)據(jù)塊的開始;尾部用字符“ETX”來標(biāo)記數(shù)據(jù)決的結(jié)束店雅。圖5-8 所示的是要傳輸一個(gè)“ADFGJ”的字符串政基,在幀的頭部加上了兩個(gè)SYN 控制字符,用于標(biāo)識(shí)該幀的開始闹啦,在結(jié)束位置加了ETX 控制字符沮明,用于標(biāo)識(shí)該幀的結(jié)束。
另外窍奋,為了不使數(shù)據(jù)信息中與以上特定字符相同的字符被誤判為幀的首尾定界符荐健,可以在這種數(shù)據(jù)幀的幀頭填充一個(gè)轉(zhuǎn)義控制字符(Data Link Escape-Start of TeXt酱畅,DLE),這就屬于“透明傳輸”的范圍了江场。
接收端可以區(qū)分每個(gè)數(shù)據(jù)幀的起始和結(jié)束了纺酸,但是還沒有解決數(shù)據(jù)正確傳輸?shù)膬煞矫鎲栴}:一是如果有幀出現(xiàn)了錯(cuò)誤怎么辦?二是如果有幀丟失了怎么辦址否?這都是數(shù)據(jù)鏈路層確保向網(wǎng)絡(luò)層提供可靠數(shù)據(jù)傳輸服務(wù)要解決的問題餐蔬,也就是數(shù)據(jù)鏈路層的 差錯(cuò)控制 功能。
差錯(cuò)檢測(cè)在數(shù)據(jù)鏈路層檢測(cè)數(shù)據(jù)傳輸錯(cuò)誤的方法一般是通過對(duì)差錯(cuò)編碼進(jìn)行校驗(yàn)來實(shí)現(xiàn)佑附,常見的校驗(yàn)方法有奇偶校驗(yàn)碼(Parity Check Code樊诺,PCC)、循環(huán)冗余校驗(yàn)(Cyclic RedundancyCheck音同,CRC)兩種词爬。它們都統(tǒng)稱為檢錯(cuò)碼(error-detecting code)。
1可能會(huì)變成0,0可能會(huì)變成1.這就叫做比特差錯(cuò)权均。在一段時(shí)間內(nèi)傳輸錯(cuò)誤的比特占所傳輸比特總數(shù)的比率稱為誤碼率缸夹。目前在數(shù)據(jù)鏈路層廣泛使用了循環(huán)冗余檢測(cè)CRC( Cyclic Redundancy Check)的檢錯(cuò)技術(shù)。CRC運(yùn)算就是在數(shù)據(jù)M后面添加供差錯(cuò)檢測(cè)用的n位冗余碼螺句。為了檢錯(cuò)而添加的冗余碼常稱為幀檢驗(yàn)序列FCS(Frame Check Sequence).在CRC檢測(cè)的基礎(chǔ)上增加幀編號(hào)、確認(rèn)橡类、重傳機(jī)制蛇尚。
CRC 其根本思想就是先在要發(fā)送的幀后面附加一個(gè)數(shù)(這個(gè)就是用來校驗(yàn)的校驗(yàn)碼,但要注意顾画,這里的數(shù)也是二進(jìn)制序列的取劫,下同),生成一個(gè)新幀發(fā)送給接收端研侣。當(dāng)然谱邪,這個(gè)附加的數(shù)不是隨意的,它要使所生成的新幀能與發(fā)送端和接收端共同選定的某個(gè)特定數(shù)整除(注意庶诡,這里不是直接采用二進(jìn)制除法惦银,而是采用一種稱之為“模2除法”)。到達(dá)接收端后末誓,再把接收到的新幀除以(同樣采用“模2除法”)這個(gè)選定的除數(shù)扯俱。因?yàn)樵诎l(fā)送端發(fā)送數(shù)據(jù)幀之前就已通過附加一個(gè)數(shù),做了“去余”處理(也就已經(jīng)能整除了)喇澡,所以結(jié)果應(yīng)該是沒有余數(shù)迅栅。如果有余數(shù),則表明該幀在傳輸過程中出現(xiàn)了差錯(cuò)晴玖。
傳輸還需要考慮流量控制读存。兩層含義一是發(fā)送端的數(shù)據(jù)發(fā)送速度與接收端的數(shù)據(jù)接收速度要匹配为流,否則接收端來不及接收就會(huì)造成數(shù)據(jù)在傳輸過程中的丟失。二是發(fā)送端的數(shù)據(jù)發(fā)送速度要與線路上的承載速率(與線路信道帶寬有關(guān))相匹配让簿,否則也會(huì)造成數(shù)據(jù)在傳輸過程中的丟失敬察。實(shí)際的數(shù)據(jù)鏈路層流量控制中,更多的是采用滑動(dòng)窗口機(jī)制來進(jìn)行流量控制的.
“滑動(dòng)窗口機(jī)制”中的“窗口”是指發(fā)送端和接收端的緩存空間大邪萦ⅰ静汤;“滑動(dòng)”的意思是指緩存空間中存放的未處理幀數(shù)是變化的,發(fā)送端一次可以連續(xù)發(fā)送多個(gè)幀居凶,并且在其緩存空間中保存所有已發(fā), 發(fā)送端在收到確認(rèn)幀后會(huì)刪除原來保存在緩存中的待重發(fā)幀虫给,接收端也可以在緩存空間中保存來不及處理的幀,當(dāng)接收端向網(wǎng)絡(luò)層提交一個(gè)幀后也會(huì)刪除原來保存在緩存中的幀。大大提高了數(shù)據(jù)傳輸?shù)男省?/p>
數(shù)據(jù)鏈路層完成主要功能侠碧、服務(wù)后谷饿,發(fā)送端物理層以比特位方式一位位地傳輸?shù)浇邮斩说奈锢韺哟兀缓蠼邮斩说奈锢韺影驯忍亓飨驍?shù)據(jù)鏈路層傳輸,到達(dá)后又要將比特流封裝成數(shù)據(jù)幀,這就是數(shù)據(jù)鏈路層的幀組裝方式了吃粒。
發(fā)送端物理層以比特位方式一位位地傳輸?shù)浇邮斩说奈锢韺樱趺磦髟薇穑浚?/h4>
image.png
前面提到了MAC子層焦履。
數(shù)據(jù)鏈路層主要功能、服務(wù)后视卢,下面我們?cè)賮砗?jiǎn)單介紹工作在數(shù)據(jù)鏈路層上的主要網(wǎng)絡(luò)設(shè)備踱卵。在常見的網(wǎng)絡(luò)設(shè)備中,如網(wǎng)卡据过、網(wǎng)橋和二層交換機(jī)惋砂。
交換機(jī)
實(shí)際上就是一個(gè)多接口的網(wǎng)橋, 以太網(wǎng)交換機(jī)的每個(gè)接口都直接與一個(gè)單個(gè)主機(jī)或另一個(gè)集線器相連, 可以很容易實(shí)現(xiàn)VLAN(虛擬局域網(wǎng))。在計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)中绳锅,交換機(jī)是針對(duì)共享工作模式的弱點(diǎn)而推出的西饵。交換機(jī)擁有一條高帶寬的背部總線和內(nèi)部交換矩陣。
交換機(jī)的所有的端口都掛接在這條背部總線上鳞芙,當(dāng)控制電路收到數(shù)據(jù)包以后眷柔,處理端口會(huì)查找內(nèi)存中的地址對(duì)照表以確定目的MAC(網(wǎng)卡的硬件地址)的NIC(網(wǎng)卡)掛接在哪個(gè)端口上,通過內(nèi)部交換矩陣迅速將數(shù)據(jù)包傳送到目的端口原朝。目的MAC若不存在闯割,交換機(jī)才廣播到所有的端口,接收端口回應(yīng)后交換機(jī)會(huì)“學(xué)習(xí)”新的地址竿拆,并把它添加入內(nèi)部地址表中宙拉。
交換機(jī)工作于OSI參考模型的第二層,即數(shù)據(jù)鏈路層丙笋。交換機(jī)內(nèi)部的CPU會(huì)在每個(gè)端口成功連接時(shí)谢澈,通過ARP協(xié)議學(xué)習(xí)它的MAC地址煌贴,保存成一張ARP表。在今后的通訊中锥忿,發(fā)往該MAC地址的數(shù)據(jù)包將僅送往其對(duì)應(yīng)的端口牛郑,而不是所有的端口。因此敬鬓,交換機(jī)可用于劃分?jǐn)?shù)據(jù)鏈路層廣播淹朋,即沖突域;但它不能劃分網(wǎng)絡(luò)層廣播钉答,即廣播域础芍。(ARP下面有解釋)
網(wǎng)橋
網(wǎng)橋工作在數(shù)據(jù)鏈路層, 根據(jù)MAC幀的目的地址對(duì)收到的幀進(jìn)行轉(zhuǎn)發(fā)和過濾.
路由器
路由器(Router)是一種計(jì)算機(jī)網(wǎng)絡(luò)設(shè)備,提供了路由與轉(zhuǎn)發(fā)兩種重要機(jī)制数尿,可以決定數(shù)據(jù)包從來源端到目的端所經(jīng)過的路由路徑(host到host之間的傳輸路徑)仑性,這個(gè)過程稱為路由;將路由器輸入端的數(shù)據(jù)包移送至適當(dāng)?shù)穆酚善鬏敵龆?在路由器內(nèi)部進(jìn)行)右蹦,這稱為轉(zhuǎn)送诊杆。路由工作在OSI模型的第三層——即網(wǎng)絡(luò)層,例如IP協(xié)議何陆。
路由器的一個(gè)作用是連通不同的網(wǎng)絡(luò)晨汹,另一個(gè)作用是選擇信息傳送的線路。 路由器與交換器的差別贷盲,路由器是屬于OSI第三層的產(chǎn)品淘这,交換器是OSI第二層的產(chǎn)品(這里特指二層交換機(jī))。
=================================================================================
客戶端通過DNS獲得了www.BAIDU.com 的ip了晃洒。客戶端瀏覽器發(fā)起一個(gè)HTTP會(huì)話到220.161.27.48朦乏,然后通過TCP進(jìn)行封裝數(shù)據(jù)包,輸入到網(wǎng)絡(luò)層呻疹。
http包格式:一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行(request line)吃引、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)4個(gè)部分組成刽锤。
1.請(qǐng)求頭
1).GET
最常見的一種請(qǐng)求方式镊尺,當(dāng)客戶端要從服務(wù)器中讀取文檔時(shí),當(dāng)點(diǎn)擊網(wǎng)頁上的鏈接或者通過在瀏覽器的地址欄輸入網(wǎng)址來瀏覽網(wǎng)頁的并思,使用的都是GET方式庐氮。GET方法要求服務(wù)器將URL定位的資源放在響應(yīng)報(bào)文的數(shù)據(jù)部分,回送給客戶端宋彼。使用GET方法時(shí)弄砍,請(qǐng)求參數(shù)和對(duì)應(yīng)的值附加在URL后面仙畦,利用一個(gè)問號(hào)(“?”)代表URL的結(jié)尾與請(qǐng)求參數(shù)的開始,傳遞參數(shù)長(zhǎng)度受限制音婶。
2)POST
對(duì)于上面提到的不適合使用GET方式的情況慨畸,可以考慮使用POST方式,因?yàn)槭褂肞OST方法可以允許客戶端給服務(wù)器提供信息較多衣式。POST方法將請(qǐng)求參數(shù)封裝在HTTP請(qǐng)求數(shù)據(jù)中寸士,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù)碴卧,這樣POST方式對(duì)傳送的數(shù)據(jù)大小沒有限制弱卡,而且也不會(huì)顯示在URL中。
3).HEAD
HEAD就像GET螟深,只不過服務(wù)端接受到HEAD請(qǐng)求后只返回響應(yīng)頭谐宙,而不會(huì)發(fā)送響應(yīng)內(nèi)容。當(dāng)我們只需要查看某個(gè)頁面的狀態(tài)的時(shí)候界弧,使用HEAD是非常高效的凡蜻,因?yàn)樵趥鬏數(shù)倪^程中省去了頁面內(nèi)容。
image.png
狀態(tài)碼(Status-Code)都是三位數(shù)字的垢箕,分為 5 大類共 33 種划栓。
如:
狀態(tài)碼 說明 請(qǐng)求行例子
1xx 表示通知信息的,如請(qǐng)求收到了或正在進(jìn)行處理
2xx 表示成功 HTTP/1.1 200 OK
3xx 表示重定向
4xx 表示客戶端的差錯(cuò)条获,如請(qǐng)求鏈接為不存在 HTTP/1.1 404 Not Found
5xx 表示服務(wù)器的差錯(cuò)
HTTP 響應(yīng)
image.png
HTTP是無狀態(tài)無連接的忠荞,所以每次發(fā)送帶上cookie或者sessionid告訴服務(wù)器之前狀態(tài)。但是Http1.1可以實(shí)現(xiàn)keep-alive 連接帅掘。
Http基于TCP委煤。TCP是面向連接的,為了實(shí)現(xiàn)無連接的http通信修档,就需要收到HTTP響應(yīng)之后斷開TCP連接碧绞。
==================================================================================
傳輸層:在客戶端的傳輸層,把HTTP會(huì)話請(qǐng)求分成報(bào)文段吱窝,添加源和目的端口讥邻,如服務(wù)器使用80端口監(jiān)聽客戶端的請(qǐng)求,客戶端由系統(tǒng)隨機(jī)選擇一個(gè)端口如5000院峡,與服務(wù)器進(jìn)行交互兴使,服務(wù)器把相應(yīng)的請(qǐng)求返回給客戶端的5000端口。然后使用IP層的IP地址查找目的端照激。
TCP是什么发魄?
TCP 提供一種面向連接的、可靠的字節(jié)流服務(wù)
在一個(gè) TCP 連接中俩垃,僅有兩方進(jìn)行彼此通信欠母。廣播和多播不能用于 TCP
TCP 使用校驗(yàn)和欢策,確認(rèn)和重傳機(jī)制來保證可靠傳輸
TCP 給數(shù)據(jù)分節(jié)進(jìn)行排序,并使用累積確認(rèn)保證數(shù)據(jù)的順序不變和非重復(fù)
TCP 使用滑動(dòng)窗口機(jī)制來實(shí)現(xiàn)流量控制赏淌,通過動(dòng)態(tài)改變窗口的大小進(jìn)行擁塞控制
注意:TCP 并不能保證數(shù)據(jù)一定會(huì)被對(duì)方接收到踩寇,因?yàn)檫@是不可能的。TCP 能夠做到的是六水,如果有可能俺孙,就把數(shù)據(jù)遞送到接收方,否則就(通過放棄重傳并且中斷連接這一手段)通知用戶掷贾。因此準(zhǔn)確說 TCP 也不是 100% 可靠的協(xié)議睛榄,它所能提供的是數(shù)據(jù)的可靠遞送或故障的可靠通知。
SYN攻擊
什么是 SYN 攻擊(SYN Flood)想帅?
在三次握手過程中场靴,服務(wù)器發(fā)送 SYN-ACK 之后,收到客戶端的 ACK 之前的 TCP 連接稱為半連接(half-open connect)港准。此時(shí)服務(wù)器處于 SYN_RCVD 狀態(tài)旨剥。當(dāng)收到 ACK 后,服務(wù)器才能轉(zhuǎn)入 ESTABLISHED 狀態(tài).
SYN 攻擊指的是浅缸,攻擊客戶端在短時(shí)間內(nèi)偽造大量不存在的IP地址轨帜,向服務(wù)器不斷地發(fā)送SYN包,服務(wù)器回復(fù)確認(rèn)包衩椒,并等待客戶的確認(rèn)蚌父。由于源地址是不存在的,服務(wù)器需要不斷的重發(fā)直至超時(shí)毛萌,這些偽造的SYN包將長(zhǎng)時(shí)間占用未連接隊(duì)列苟弛,正常的SYN請(qǐng)求被丟棄,導(dǎo)致目標(biāo)系統(tǒng)運(yùn)行緩慢阁将,嚴(yán)重者會(huì)引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓膏秫。
SYN 攻擊是一種典型的 DoS/DDoS 攻擊。
如何檢測(cè) SYN 攻擊冀痕?
檢測(cè) SYN 攻擊非常的方便荔睹,當(dāng)你在服務(wù)器上看到大量的半連接狀態(tài)時(shí)狸演,特別是源IP地址是隨機(jī)的言蛇,基本上可以斷定這是一次SYN攻擊。在 Linux/Unix 上可以使用系統(tǒng)自帶的 netstats 命令來檢測(cè) SYN 攻擊宵距。
如何防御 SYN 攻擊腊尚?
SYN攻擊不能完全被阻止,除非將TCP協(xié)議重新設(shè)計(jì)满哪。我們所做的是盡可能的減輕SYN攻擊的危害婿斥,常見的防御 SYN 攻擊的方法有如下幾種:
縮短超時(shí)(SYN Timeout)時(shí)間
增加最大半連接數(shù)
過濾網(wǎng)關(guān)防護(hù)
SYN cookies技術(shù)
面向連接協(xié)議和無連接協(xié)議
- 面向連接協(xié)議:會(huì)在通信計(jì)算機(jī)之間建立并維護(hù)一個(gè)連接劝篷,并且在通信過程中監(jiān)視連接狀態(tài)。通過網(wǎng)絡(luò)傳輸?shù)拿總€(gè)數(shù)據(jù)包都會(huì)有一個(gè)確認(rèn)民宿,發(fā)送端計(jì)算機(jī)會(huì)記錄狀態(tài)信息來確保每個(gè)數(shù)據(jù)包都被正確無誤的接收了娇妓,并且在需要時(shí)會(huì)重發(fā)數(shù)據(jù)。當(dāng)數(shù)據(jù)傳輸結(jié)束后活鹰,發(fā)送端和接收端計(jì)算機(jī)會(huì)以適當(dāng)方式關(guān)閉連接哈恰。
- 無連接協(xié)議:以單向方式向目的發(fā)送數(shù)據(jù)報(bào),不承擔(dān)通知目的計(jì)算機(jī)關(guān)于數(shù)據(jù)發(fā)送的職責(zé)志群。目的計(jì)算機(jī)接收到數(shù)據(jù)后也不需要向源計(jì)算機(jī)返回狀態(tài)信息着绷。
TCP:面向連接的傳輸協(xié)議
- TCP重要特性:
- TCP數(shù)據(jù)格式:
image.png
- TCP連接:TCP通過連接發(fā)送和接收數(shù)據(jù),而這個(gè)連接必須根據(jù)TCP的規(guī)則進(jìn)行請(qǐng)求锌云、打開和關(guān)閉荠医。TCP的功能之一是為應(yīng)用程序提供訪問網(wǎng)絡(luò)的接口。這個(gè)接口是通過TCP端口提供的桑涎,而為了通過端口提供連接彬向,必須打開TCP與應(yīng)用程序的接口。 被動(dòng)打開——某個(gè)應(yīng)用程序進(jìn)程通知TCP準(zhǔn)備通過TCP端口接收連接石洗,這樣就會(huì)打開TCP到應(yīng)用程序的連接幢泼,從而為參與連接請(qǐng)求做準(zhǔn)備。 主動(dòng)打開——程序要求TCP發(fā)起與另一臺(tái)計(jì)算機(jī)的連接讲衫,這就是主動(dòng)打開狀態(tài)缕棵。
- 建立連接:三次握手總是發(fā)生在TCP連接建立的初期 。需要三次握手的原因——TCP的三次握手最主要是防止已過期的連接再次傳到被連接的主機(jī)涉兽。
TCP流量控制(滑動(dòng)窗口方法):接收端計(jì)算機(jī)利用“窗口”字段(也被稱為“緩存大小”字段)來定義一個(gè)超過最后一個(gè)已確認(rèn)序列號(hào)的序列號(hào)“窗口”招驴,在這個(gè)范圍內(nèi)的序列號(hào)才允許發(fā)送端計(jì)算機(jī)進(jìn)行發(fā)送。發(fā)送端計(jì)算機(jī)在沒有接收到下一個(gè)確認(rèn)消息之前不能發(fā)送超過這個(gè)窗口的序列號(hào)枷畏。
關(guān)閉連接:計(jì)算機(jī)A發(fā)送一個(gè)數(shù)據(jù)分段别厘,其中的FIN標(biāo)記設(shè)置為1。之后應(yīng)用程序進(jìn)入"fin-wait"狀態(tài)拥诡。在這個(gè)狀態(tài)下触趴,計(jì)算機(jī)的TCP軟件繼續(xù)接受數(shù)據(jù)分段,并處理已經(jīng)在序列中的數(shù)據(jù)分段渴肉,但不再從應(yīng)用程序接收數(shù)據(jù)了冗懦。當(dāng)計(jì)算機(jī)B接收到FIN數(shù)據(jù)分段時(shí),它返回FIN確認(rèn)信息仇祭,然后發(fā)送剩余的數(shù)據(jù)分段披蕉,通知本地應(yīng)用程序接收到了FIN消息。計(jì)算機(jī)B向計(jì)算機(jī)A發(fā)送一個(gè)FIN數(shù)據(jù)分段,計(jì)算機(jī)A返回確認(rèn)信息没讲,連接就被關(guān)閉了眯娱。
==================================================================================
客戶端的網(wǎng)絡(luò)層不用關(guān)心應(yīng)用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達(dá)服務(wù)器爬凑,期間可能經(jīng)過多個(gè)路由器徙缴,這些都是由路由器來完成的工作,通過查找路由表決定通過那個(gè)路徑到達(dá)服務(wù)器,其中用到路由選擇協(xié)議
-
路由選擇協(xié)議:因特網(wǎng)有兩大類路由選擇協(xié)議:
內(nèi)部網(wǎng)關(guān)協(xié)議IGP(Interior Gateway Protocol)即在一個(gè)自治系統(tǒng)內(nèi)部使用的路由選擇協(xié)議嘁信。目前這類路由選擇協(xié)議使用得最多娜搂,如RIP和OSPF協(xié)議。外部網(wǎng)關(guān)協(xié)議EGP(External Gateway Protocol)若源站和目的站處在不同的自治系統(tǒng)中吱抚,當(dāng)數(shù)據(jù)報(bào)傳到一個(gè)自治系統(tǒng)的邊界時(shí)百宇,就需要使用一種協(xié)議將路由選擇信息傳遞到另一個(gè)自治系統(tǒng)中。這樣的協(xié)議就是外部網(wǎng)關(guān)協(xié)議EGP秘豹。在外部網(wǎng)關(guān)協(xié)議中目前使用最多的是BGP-4携御。
- RIP協(xié)議
工作原理:
路由信息協(xié)議RIP是內(nèi)部網(wǎng)關(guān)協(xié)議IGP中最先得到廣泛使用的協(xié)議。RIP是一種分布式的基于距離向量的路由選擇協(xié)議既绕。RIP協(xié)議要求網(wǎng)絡(luò)中的每一個(gè)路由器都要維護(hù)從它自己到其他每一個(gè)目的網(wǎng)絡(luò)的距離記錄啄刹。距離的解釋:從一路由器到直接連接的網(wǎng)絡(luò)的距離定義為1。從一個(gè)路由器到非直接連接的網(wǎng)絡(luò)的距離定義為所經(jīng)過的路由器數(shù)加1凄贩。RIP協(xié)議中的“距離”也稱為“跳數(shù)”(hop count)誓军,因?yàn)槊拷?jīng)過一個(gè)路由器,跳數(shù)就加1疲扎。這里的“距離”實(shí)際上指的是“最短距離”昵时。RIP認(rèn)為一個(gè)好的路由就是它通過的路由器的數(shù)目少,即“距離短”椒丧。RIP允許一條路徑最多只能包含15個(gè)路由器壹甥。“距離”的最大值為16時(shí)即相當(dāng)于不可達(dá)壶熏【淠可見RIP只適用于小型互聯(lián)網(wǎng)。RIP不能在兩個(gè)網(wǎng)絡(luò)之間同時(shí)使用多條路由棒假。RIP選擇一個(gè)具有最少路由器的路由(即最短路由)哪怕還存在另一條高速(低時(shí)延)但路由器較多的路由溯职。 - 外部網(wǎng)關(guān)協(xié)議 BGP
BGP是不同自治系統(tǒng)的路由器之間交換路由信息的協(xié)議。邊界網(wǎng)關(guān)協(xié)議BGP只能是力求尋找一條能夠到達(dá)目的網(wǎng)絡(luò)且比較好的路由(不能兜圈子)帽哑,而并非要尋找一條最佳路由谜酒。
BGP發(fā)言人:每一個(gè)自治系統(tǒng)的管理員要選擇至少一個(gè)路由器作為該自治系統(tǒng)的“BGP發(fā)言人”。一般說來祝拯,兩個(gè)BGP發(fā)言人都是通過一個(gè)共享網(wǎng)絡(luò)連接在一起的甚带,而BGP發(fā)言人往往就是BGP邊界路由器,但也可以不是BGP邊界路由器佳头。
BGP交換路由信息:
一個(gè)BGP發(fā)言人與其他自治系統(tǒng)中的BGP發(fā)言人要交換路由信息鹰贵,就要先建立TCP連接,然后在此連接上交換BGP報(bào)文以建立BGP會(huì)話(session)康嘉,利用BGP會(huì)話交換路由信息碉输。使用TCP連接能提供可靠的服務(wù)也簡(jiǎn)化了路由選擇協(xié)議。使用TCP連接交換路由信息的兩個(gè)BGP發(fā)言人亭珍,彼此成為對(duì)方的鄰站或?qū)Φ日尽?/li>
NAT 網(wǎng)絡(luò)地址轉(zhuǎn)換
網(wǎng)絡(luò)地址轉(zhuǎn)換
NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換):NAT路由器本身的一個(gè)IP敷钾,通過不同端口與本身身后的子網(wǎng)主機(jī)地址形成映射,進(jìn)而子網(wǎng)多個(gè)主機(jī)可以通過以NAT路由器的一個(gè)IP地址訪問外網(wǎng)
這要求NAT路由器要維護(hù)一個(gè)NAT轉(zhuǎn)發(fā)表肄梨,記錄端口到地址的映射關(guān)系
NAT缺點(diǎn):
加重了路由器的負(fù)擔(dān)
對(duì)P2P協(xié)議有阻礙作用阻荒,P2P協(xié)議不能感知到NAT路由器后面子網(wǎng)的主機(jī)
模糊了端口的作用,本來端口是為了表示進(jìn)程而存在的众羡,NAT中一個(gè)端口可以表示一個(gè)主機(jī)了
NAT優(yōu)點(diǎn):
擴(kuò)展了IP地址侨赡,應(yīng)該說IPv4到現(xiàn)在地址資源還沒有枯竭,NAT給它續(xù)命是一個(gè)重要的原因
==================================================================================
客戶端的鏈路層粱侣,包通過鏈路層發(fā)送到路由器羊壹,通過鄰居協(xié)議查找給定IP地址的MAC地址,然后發(fā)送ARP請(qǐng)求查找目的地址齐婴,如果得到回應(yīng)后就可以使用ARP的請(qǐng)求應(yīng)答交換的IP數(shù)據(jù)包現(xiàn)在就可以傳輸了油猫,然后發(fā)送IP數(shù)據(jù)包到達(dá)服務(wù)器的地址。
ARP(地址解析協(xié)議)
不管網(wǎng)絡(luò)層使用的是什么協(xié)議柠偶,在實(shí)際網(wǎng)絡(luò)的鏈路上傳送數(shù)據(jù)幀時(shí)情妖,最終還是必須使用硬件地址。每一個(gè)主機(jī)都設(shè)有一個(gè) ARP 高速緩存(ARP cache)诱担,里面有所在的局域網(wǎng)上的各主機(jī)和路由器的 IP 地址到硬件地址的映射表鲫售。當(dāng)主機(jī) A 欲向本局域網(wǎng)上的某個(gè)主機(jī) B 發(fā)送 IP 數(shù)據(jù)報(bào)時(shí),就先在其 ARP 高速緩存中查看有無主機(jī) B 的 IP 地址该肴。如有情竹,就可查出其對(duì)應(yīng)的硬件地址,再將此硬件地址寫入 MAC 幀匀哄,然后通過局域網(wǎng)將該 MAC 幀發(fā)往此硬件地址