關(guān)鍵詞:應(yīng)用層、socket越走、TCP棚品、IP、數(shù)據(jù)鏈路層廊敌、MAC
互聯(lián)網(wǎng)是指全球網(wǎng)絡(luò)與網(wǎng)絡(luò)之間以一組通用的協(xié)議連成的龐大的國(guó)際網(wǎng)絡(luò),始于1969年美國(guó)的阿帕網(wǎng)门怪。
一骡澈、ARPANET(阿帕網(wǎng))及起源
“阿帕”(ARPA,美國(guó)高級(jí)研究計(jì)劃署)由美國(guó)國(guó)防部(DoD)于20世紀(jì)60年代為應(yīng)對(duì)蘇聯(lián)第一顆人造地球衛(wèi)星發(fā)射成功而建掷空。DoD認(rèn)為如果僅有一個(gè)集中的軍事指揮中心肋殴,一旦被原蘇聯(lián)摧毀囤锉,后果將不堪設(shè)想,需要設(shè)計(jì)一個(gè)分散的指揮系統(tǒng)护锤。于是1967年官地,時(shí)任ARPA信息處理處處長(zhǎng)的拉里·羅伯茨著手籌建“分布式網(wǎng)絡(luò)”,1968年提交了《資源共享的計(jì)算機(jī)網(wǎng)絡(luò)》報(bào)告烙懦,并根據(jù)這份報(bào)告組建了國(guó)防部的“高級(jí)研究計(jì)劃網(wǎng)”驱入,也就是著名的阿帕網(wǎng)。
二氯析、分組交換的發(fā)展
電路交換:建立連接->通話->釋放連接亏较,通話的時(shí)間中,兩個(gè)用戶始終占用端到端的通信資源掩缓。實(shí)時(shí)性好雪情,穩(wěn)定性高,但線路利用率低你辣。
分組交換:采用存儲(chǔ)轉(zhuǎn)發(fā)技術(shù)巡通,把報(bào)文(要發(fā)送的整塊數(shù)據(jù))劃分為幾個(gè)分組。傳送數(shù)據(jù)之前無(wú)需建立連接舍哄,無(wú)需全程占用通信鏈路宴凉,在哪段鏈路傳輸就占用哪段的資源。
三蠢熄、阿帕網(wǎng)的實(shí)現(xiàn)
1.連接
阿帕網(wǎng)是建立在“包交換理論”上的分布式網(wǎng)絡(luò)系統(tǒng)跪解,它有四個(gè)節(jié)點(diǎn),采用兩類通信處理機(jī):交換處理機(jī)(IMP)和終端交換處理機(jī)(TIP)签孔。IMP就是路由器的前生叉讥,以存儲(chǔ)-轉(zhuǎn)發(fā)方式進(jìn)行通信。
2.通信協(xié)議
最初不同品牌的電腦相互不兼容饥追,無(wú)法通過(guò)通信處理機(jī)互聯(lián)图仓。1973年卡恩、瑟夫合作提出了“傳輸控制協(xié)議”(TCP)和“因特網(wǎng)協(xié)議”(IP)但绕,這一協(xié)議族共分為四層:網(wǎng)絡(luò)接口層救崔、互聯(lián)網(wǎng)層、傳輸層捏顺、應(yīng)用層六孵。1984年,DoD將TCP/IP協(xié)議作為所有計(jì)算機(jī)網(wǎng)絡(luò)的標(biāo)準(zhǔn)幅骄。
3.IP地址
TCP/IP先后有四個(gè)版本劫窒,最后一個(gè)版本就是現(xiàn)在使用的YCP/IPv4。1981年Jon Postel 定義了IP地址拆座,是用來(lái)給Internet上的電腦的編號(hào)主巍。
4.分層的網(wǎng)絡(luò)結(jié)構(gòu)
相互通信的計(jì)算機(jī)必須高度協(xié)調(diào)才能夠進(jìn)行通信冠息,為了處理這種復(fù)雜的網(wǎng)絡(luò)問(wèn)題,提出了分層的方法孕索。在下面三種分層方式中逛艰,TCP/IP是真正使用的協(xié)議。
應(yīng)用層:定義應(yīng)用進(jìn)程間通信和交互的規(guī)則搞旭,交互的數(shù)據(jù)單元是報(bào)文散怖,應(yīng)用層產(chǎn)生數(shù)據(jù)。
運(yùn)輸層:定義兩臺(tái)主機(jī)之間通信和交互的規(guī)則选脊,不針對(duì)特定應(yīng)用杭抠,將數(shù)據(jù)進(jìn)行封裝,添加TCP頭部恳啥。
網(wǎng)際層:負(fù)責(zé)為分組交換網(wǎng)上的不同主機(jī)提供通信服務(wù)偏灿,交互的數(shù)據(jù)單元是分組或包。網(wǎng)絡(luò)層的另一個(gè)任務(wù)是選擇合適的路由钝的,添加IP頭部翁垂。
網(wǎng)絡(luò)接口層:鏈路層交互的數(shù)據(jù)單元是幀,物理層交互的是比特硝桩。
(三層交換機(jī)沿猜、二層路由器)
四、現(xiàn)代網(wǎng)絡(luò)
阿帕網(wǎng)借助于通信處理機(jī)以及通信鏈路碗脊,通過(guò)TCP/IP協(xié)議進(jìn)行數(shù)據(jù)傳輸啼肩,形成了現(xiàn)代計(jì)算機(jī)網(wǎng)絡(luò)的雛形。
現(xiàn)今的網(wǎng)絡(luò)互連需要借助于通信鏈路和路由器衙伶,這些網(wǎng)絡(luò)設(shè)備都是需要費(fèi)用和維護(hù)的祈坠,于是就催生出來(lái)了ISP(互聯(lián)網(wǎng)服務(wù)提供者,如中國(guó)電信矢劲、中國(guó)移動(dòng)赦拘、中國(guó)聯(lián)通),所有的用戶主機(jī)屬于網(wǎng)絡(luò)的邊緣部分芬沉,大量的網(wǎng)絡(luò)和連接網(wǎng)絡(luò)的路由器構(gòu)成了互聯(lián)網(wǎng)的核心部分躺同,ISP就是管理維護(hù)這個(gè)核心部分。
五丸逸、操作系統(tǒng)與網(wǎng)絡(luò)通信
操作系統(tǒng)負(fù)責(zé)管理計(jì)算機(jī)硬件資源蹋艺,是應(yīng)用程序與計(jì)算機(jī)硬件之間的中間層,將應(yīng)用程序與計(jì)算機(jī)硬件解耦黄刚。操作系統(tǒng)實(shí)現(xiàn)了TCP/IP協(xié)議车海,提供了進(jìn)程間通信的功能,通過(guò)ip地址定位到主機(jī)隘击,通過(guò)端口號(hào)定位到進(jìn)程侍芝。
1.進(jìn)程
應(yīng)用程序依賴操作系統(tǒng)提供CPU時(shí)間片、主存埋同、IP設(shè)備等資源州叠。操作系統(tǒng)將運(yùn)行的程序抽象為“進(jìn)程”唱逢,操作系統(tǒng)中實(shí)現(xiàn)的兩個(gè)進(jìn)程間網(wǎng)絡(luò)通信的功能就是按照TCP/IP協(xié)議實(shí)現(xiàn)的拜英。可以簡(jiǎn)單理解為兩個(gè)方法:tcp()用來(lái)接收到應(yīng)用層的數(shù)據(jù)后衣洁,添加相應(yīng)頭部虱肄。ip()用來(lái)添加ip相關(guān)頭部致板。
2.端口
進(jìn)程號(hào)是計(jì)算機(jī)內(nèi)部管理應(yīng)用程序的描述,而且是動(dòng)態(tài)分配的咏窿。端口是計(jì)算機(jī)對(duì)外提供通信的接口斟或,例如ftp服務(wù)程序的端口是21,ftp服務(wù)程序可以在21號(hào)這個(gè)“窗口”提貨集嵌。
3.Socket
操作系統(tǒng)提供了網(wǎng)絡(luò)接口Socket萝挤,供應(yīng)用程序調(diào)用來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)互連,因此網(wǎng)絡(luò)編程有時(shí)也叫socket編程根欧。socket是應(yīng)用層和傳輸層中間的一個(gè)層怜珍,是對(duì)TCP/IP協(xié)議的封裝。
六凤粗、web技術(shù)
20世紀(jì)90年代之前酥泛,因特網(wǎng)的主要使用者還是研究人員和學(xué)生,他們主要用來(lái)傳輸文件和收發(fā)電子郵件等嫌拣。1989年CERN(歐洲粒子物理研究所)提交了WWW系統(tǒng)(world wide web柔袁,中文名為“萬(wàn)維網(wǎng)”,簡(jiǎn)稱web)亭罪,使全球的科學(xué)家能夠利用Internet交流自己的工作文檔瘦馍。
web的核心就是內(nèi)容的共享。B/S架構(gòu)是共享超文本文檔的方案应役,瀏覽器客戶端和服務(wù)器程序是兩個(gè)通訊主體情组,雙方通過(guò)HTTP協(xié)議進(jìn)行對(duì)話,通過(guò)URI進(jìn)行資源定位箩祥,消息通過(guò)HTML格式化院崇。
1.基本元素
URI(統(tǒng)一資源標(biāo)識(shí)符):用來(lái)唯一標(biāo)識(shí)服務(wù)器上的一個(gè)文件,包含兩種形式袍祖,URL和URN底瓣。URL是統(tǒng)一資源定位符,包括協(xié)議、域名或IP地址捐凭、文件具體地址三部分拨扶。URN是統(tǒng)一資源名稱,只命名資源茁肠。
HTTP協(xié)議:瀏覽器與web服務(wù)器兩個(gè)應(yīng)用之間通信的協(xié)議患民,最初就是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。
HTML:超文本標(biāo)記語(yǔ)言垦梆,一種借助于標(biāo)記符格式化電子文檔的語(yǔ)言匹颤。
瀏覽器:發(fā)送HTTP請(qǐng)求,解析顯示獲得的響應(yīng)數(shù)據(jù)托猩。
web服務(wù)器:接收瀏覽器客戶端發(fā)起的請(qǐng)求印蓖,并按照HTTP協(xié)議的規(guī)定響應(yīng)的軟件。
2.web技術(shù)發(fā)展
最初所有web頁(yè)面都是靜態(tài)的京腥。GIF圖片第一次為HTML引入了動(dòng)態(tài)元素赦肃。
1993年CGI(Common Gateway Interface)出現(xiàn),定義了web服務(wù)器與外部應(yīng)用程序之間的通信接口標(biāo)準(zhǔn)绞旅,web服務(wù)器可以通過(guò)CGI執(zhí)行外部程序摆尝,讓外部程序根據(jù)web請(qǐng)求生成動(dòng)態(tài)的內(nèi)容。
后來(lái)人們發(fā)現(xiàn)一個(gè)HTML頁(yè)面因悲,只有很少部分?jǐn)?shù)據(jù)是動(dòng)態(tài)的堕汞,大部分是靜態(tài)的,于是出現(xiàn)了web編程腳本語(yǔ)言晃琳,如PHP讯检,最初就是C語(yǔ)言編寫的CGI程序的封裝,用于將靜態(tài)和動(dòng)態(tài)數(shù)據(jù)分開卫旱。
3.企業(yè)開發(fā)平臺(tái)
當(dāng)web開始廣泛應(yīng)用于大型應(yīng)用構(gòu)建時(shí)人灼,系統(tǒng)的穩(wěn)定性、安全性和分布式等方面的要求變得更高顾翼。在許多企業(yè)級(jí)應(yīng)用中投放,數(shù)據(jù)庫(kù)連接、郵件服務(wù)适贸、事務(wù)處理等都是一些通用企業(yè)需求模塊灸芳,于是一些大公司開發(fā)了自己的通用模塊服務(wù),這些服務(wù)性的軟件系列統(tǒng)稱為中間件拜姿。
J2EE就是使用Java語(yǔ)言烙样,開發(fā)企業(yè)級(jí)web應(yīng)用的一整套解決方案。
七蕊肥、從瀏覽器地址欄敲下回車谒获,直到瀏覽器呈現(xiàn)信息,這個(gè)過(guò)程發(fā)生了什么?
這一過(guò)程涉及寬帶接入批狱、瀏覽器裸准、前端技術(shù),DNS精耐,TCP/IP狼速,操作系統(tǒng),網(wǎng)卡卦停,驅(qū)動(dòng)程序,傳輸設(shè)備恼蓬,交換機(jī)惊完、路由器,服務(wù)器等等網(wǎng)絡(luò)处硬、通信小槐、web相關(guān)的幾乎所有技術(shù)。
計(jì)算機(jī)網(wǎng)絡(luò)傳輸?shù)暮诵氖荰CP/IP協(xié)議荷辕,分為四層結(jié)構(gòu):應(yīng)用層產(chǎn)生需要傳輸?shù)恼嬲龜?shù)據(jù)凿跳;傳輸層、網(wǎng)際層疮方、網(wǎng)絡(luò)接口層由操作系統(tǒng)以及網(wǎng)卡驅(qū)動(dòng)程序和物理網(wǎng)卡實(shí)現(xiàn)控嗜,負(fù)責(zé)將數(shù)據(jù)從計(jì)算機(jī)中發(fā)送出去,經(jīng)過(guò)路由器(網(wǎng)際層)等網(wǎng)絡(luò)設(shè)置到達(dá)最終的目的地骡显。
1.瀏覽器發(fā)起請(qǐng)求
1)解析URL:瀏覽器解析URL疆栏,確定通信協(xié)議以及域名、文件資源路徑惫谤。
2)HTTP請(qǐng)求:根據(jù)通信協(xié)議封裝報(bào)文壁顶。如瀏覽器按照HTTP協(xié)議約定的格式,將請(qǐng)求封裝為HTTP請(qǐng)求報(bào)文溜歪。
3)DNS解析:根據(jù)域名若专,操作系統(tǒng)先檢查自己本地的hosts文件,如果沒(méi)有這個(gè)域名的映射蝴猪,則查找本地DNS解析器緩存调衰,如果也沒(méi)有,則會(huì)找TCP/IP參數(shù)重設(shè)置的DNS服務(wù)器拯腮,直到獲得映射的ip窖式。對(duì)于HTTP請(qǐng)求,如果沒(méi)有url中沒(méi)有設(shè)置則默認(rèn)是80端口动壤,萝喘。
4)socket連接:調(diào)用socket接口,與服務(wù)器建立連接和通信,此過(guò)程分為四步:創(chuàng)建套接字阁簸、連接爬早、通信、斷開鏈接启妹。
2.TCP處理
1)TCP報(bào)文格式筛严、字段
如果應(yīng)用層數(shù)據(jù)過(guò)大,會(huì)進(jìn)行分塊饶米,每個(gè)塊添加TCP頭部信息桨啃。TCP頭部包括原端口和目的端口、序號(hào)檬输、確認(rèn)號(hào)照瘾、確認(rèn)ack、同步syn丧慈、終止fin。
2)TCP三次握手
TCP運(yùn)輸連接有三個(gè)階段:建立連接逃默、數(shù)據(jù)傳送、連接釋放完域。
TCP連接過(guò)程有三次握手软吐,連接釋放要進(jìn)行四次揮手筒主。
3.IP層處理
TCP連接的每個(gè)步驟都需要委托IP模塊間數(shù)據(jù)封裝成包發(fā)給通信對(duì)象。
1)TCP和IP的分段:對(duì)于TCP報(bào)文乌妙,IP不需要再進(jìn)行分段了使兔,對(duì)于UDP是可能導(dǎo)致IP分段的。
IP分段手部由固定部分和可變部分組成虐沥。
2)ip地址和硬件地址:ip地址是網(wǎng)際層及以上使用的泽艘,是一種邏輯地址匹涮,因?yàn)镮P地址是用軟件實(shí)現(xiàn)的。數(shù)據(jù)經(jīng)過(guò)IP處理封裝后交給數(shù)據(jù)鏈路層喜每,封裝成MAC幀,MAC幀頭部中的原地址和目的地址都是硬件地址枫笛,也就是網(wǎng)卡地址刚照。IP地址實(shí)現(xiàn)高效的路由選擇无畔,MAC地址實(shí)現(xiàn)相鄰鏈路間的數(shù)據(jù)傳送。目的MAC地址通過(guò)路由表實(shí)現(xiàn)特幔,先找到下一個(gè)中轉(zhuǎn)設(shè)備的IP地址闸昨,再借助于arp協(xié)議薄风,查詢MAC地址饵较。
3)路由表:路由選擇協(xié)議的核心是路由選擇算法循诉,互聯(lián)網(wǎng)被劃分了多個(gè)自治系統(tǒng)(AS)撇他,AS內(nèi)部使用的路由選擇協(xié)議稱為內(nèi)部網(wǎng)關(guān)協(xié)議IGP困肩,主要是RIP和OSPF,外部網(wǎng)關(guān)協(xié)議EGP勇劣,目前主要是BGP-4.
路由表信息:網(wǎng)絡(luò)目標(biāo)比默、網(wǎng)絡(luò)掩碼盆犁、網(wǎng)關(guān)(下一跳路由器入口的ip)谐岁、接口榛臼、躍點(diǎn)數(shù)讽坏。通過(guò)路由表可以獲得目的地IP和下一跳IP例证,以及網(wǎng)絡(luò)接口IP(發(fā)送方的IP).
4)下一跳的ip地址:根據(jù)下一跳IP地址使用ARP協(xié)議可以獲得下一個(gè)設(shè)備的MAC地址
4.鏈路層處理
計(jì)算機(jī)與外界局域網(wǎng)的連接時(shí)通過(guò)通信適配器進(jìn)行的织咧,也就是網(wǎng)卡。適配器和局域網(wǎng)之間的通信是通過(guò)電纜或者雙絞線串行傳輸方式通信抵屿。適配器和操作系統(tǒng)間是通過(guò)主板上的IO總線并行傳輸?shù)脑稹>W(wǎng)卡驅(qū)動(dòng)程序就是實(shí)現(xiàn)鏈路層相關(guān)協(xié)議的實(shí)體艇搀。
數(shù)據(jù)鏈路層協(xié)議有許多種焰雕,一般有三個(gè)基本問(wèn)題:封裝成幀、透明傳輸和差錯(cuò)檢測(cè)辟宗。
數(shù)據(jù)轉(zhuǎn)發(fā)接收:數(shù)據(jù)從應(yīng)用層泊脐,經(jīng)操作系統(tǒng)和網(wǎng)卡驅(qū)動(dòng)程序?qū)f(xié)議棧的實(shí)現(xiàn)郭膛,在經(jīng)過(guò)網(wǎng)卡轉(zhuǎn)換為廣電信號(hào)從網(wǎng)口發(fā)送出去则剃,接下來(lái)就是借助于網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)傳送。網(wǎng)絡(luò)設(shè)備主要是交換機(jī)调煎、路由器士袄。
網(wǎng)絡(luò)設(shè)備的發(fā)展:
(1)集線器,主要是對(duì)接受到的信號(hào)進(jìn)行再生整形放大寓辱,以擴(kuò)大網(wǎng)絡(luò)的傳輸距離秫筏,屬于純硬件網(wǎng)絡(luò)底層設(shè)備挎挖。缺點(diǎn)是容易出錯(cuò)蕉朵,被竊聽。
(2)網(wǎng)橋冷蚂,對(duì)收到的幀根據(jù)其MAC幀的目的地址進(jìn)行轉(zhuǎn)發(fā)和過(guò)濾帝雇。
(3)二層交換機(jī)蛉拙,也被稱為多接口的網(wǎng)橋孕锄。交換機(jī)根據(jù)MAC地址轉(zhuǎn)發(fā)是借助于內(nèi)部的交換表苞尝,是通過(guò)自學(xué)習(xí)算法自動(dòng)的建立起來(lái)的宙址。
(4)路由器抡砂,工作在網(wǎng)絡(luò)層,處理的是IP碴巾,任務(wù)是轉(zhuǎn)發(fā)分組厦瓢。
5.數(shù)據(jù)的接收
1)從網(wǎng)卡到操作系統(tǒng):通過(guò)網(wǎng)線的光/電信號(hào),到達(dá)計(jì)算機(jī)的網(wǎng)口劳跃,轉(zhuǎn)換為數(shù)字信息浙垫,首先經(jīng)過(guò)幀校驗(yàn)序列(FCS)來(lái)校驗(yàn)錯(cuò)誤绞呈,然后檢查MAC頭部中的接收方MAC地址佃声,如果是發(fā)給自己的,就緩存下來(lái)十拣,通知操作系統(tǒng)進(jìn)行處理夭问。操作系統(tǒng)讀取數(shù)據(jù)曹铃,根據(jù)類型交給指定的協(xié)議棧實(shí)現(xiàn)部分陕见。
2)IP模塊接收
當(dāng)網(wǎng)絡(luò)包轉(zhuǎn)交到協(xié)議棧時(shí)评甜,IP模塊會(huì)首先開始工作,檢查IP頭部中的接收方IP地址粘舟,看包是不是發(fā)給自己的柑肴。確認(rèn)包是發(fā)給自己的韧骗,接下來(lái)檢查包有沒(méi)有被分片袍暴,如果是分片的包隶症,則暫存起來(lái)蚂会,等所有分片全部到達(dá)后將分片組裝起來(lái)還原成原始包胁住。然后轉(zhuǎn)給TCP模塊或UDP模塊刊咳。
3)TCP模塊接收-連接
當(dāng)TCP頭部中的控制位SYN為1時(shí)娱挨,表示這是一個(gè)發(fā)起連接的包跷坝。然后生產(chǎn)一個(gè)代表接收確認(rèn)的ACK號(hào),返回服務(wù)器后淮韭,連接完成靠粪。
4)TCP模塊接收-傳輸
發(fā)送方 IP 地址和接收方 IP毫蚓,發(fā)送方端口和接收方端口唯一確定一條連接绍些。
5)web應(yīng)用程序接收
應(yīng)用程序調(diào)用socket庫(kù)的read來(lái)獲取收到的數(shù)據(jù)柬批,根據(jù)接收到的請(qǐng)求氮帐,如果是HTML文檔或圖片則直接返回洛姑,如果是一個(gè)程序楞艾,則將這個(gè)程序輸出的數(shù)據(jù)返回給客戶端龄广。
總結(jié):
應(yīng)用層協(xié)議的軟件根據(jù)目的地的IP地址及端口號(hào),按照HTTP協(xié)議組裝成HTTP請(qǐng)求數(shù)據(jù)敲才。
借助于操作系統(tǒng)提供的Socket接口择葡,調(diào)用TCP模塊對(duì)數(shù)據(jù)進(jìn)行處理敏储,組裝成TCP數(shù)據(jù)虹曙。
IP模塊根據(jù)目的地IP地址,借助于操作系統(tǒng)的路由表選擇下一跳路由矾踱,然后根據(jù)ARP協(xié)議得到下一站的物理地址呛讲。此時(shí)就有了源IP地址返奉,目的IP地址芽偏,源端口污尉,目的端口,源MAC某宪,目的MAC兴喂。
然后操作系統(tǒng)與網(wǎng)卡驅(qū)動(dòng)配合將數(shù)據(jù)封裝成以太網(wǎng)幀衣迷,借助于網(wǎng)卡將數(shù)據(jù)轉(zhuǎn)換為光電信號(hào)發(fā)送出去。
路由器的端口有網(wǎng)卡和MAC滴肿,網(wǎng)卡將光電信號(hào)轉(zhuǎn)換為數(shù)據(jù)泼差,進(jìn)行校驗(yàn)堆缘,MAC檢驗(yàn)確認(rèn)是發(fā)給自己的普碎,然后根據(jù)路由表進(jìn)行轉(zhuǎn)發(fā)麻车,找到下一跳IP动猬,然后ARP協(xié)議查找MAC赁咙,完成數(shù)據(jù)在鏈路層的傳遞。
最終到達(dá)目的主機(jī)崔拥,主機(jī)的網(wǎng)卡接收光電信號(hào)链瓦,然后通知操作系統(tǒng)澡绩,操作系統(tǒng)解析MAC數(shù)據(jù)報(bào)文俺附,然后IP模塊接收事镣,然后TCP/UDP璃哟,最終到達(dá)WEB應(yīng)用程序随闪。