最近這段時間一直在學習計算機網(wǎng)絡(luò)方面的知識洽损,今天書差不多算是看完了,所以想寫一篇文章來給自己這段時間對于計算機網(wǎng)絡(luò)的學習做一個總結(jié)吧吧雹∏妥矗可能會顯得很基礎(chǔ)和啰嗦,主要是初學者泊窘,不要介意熄驼。
我們學生在學校經(jīng)常會用自己的筆記本電腦來上網(wǎng),比如想通過瀏覽器打開百度的主頁烘豹,這個動作看起來很簡單瓜贾,其實背后蘊藏著很多的計算機網(wǎng)絡(luò)方面的知識。
首先我們的電腦為了可以與外網(wǎng)通信携悯,需要獲得自己本機的IP地址祭芦;一臺主機通常直接與一臺路由器連接,該路由器即為該主機的默認路由器(default router)憔鬼,又稱為第一跳路由器(first-hop router)龟劲,每當某主機發(fā)送一個分組時,該分組就被傳送給它的默認路由器轴或,我們將源主機的默認路由器稱為源路由器(source router)昌跌,把目的主機的默認路由器稱為目的路由器(destination router)。(所以一個分組從源主機到目的主機的選路問題顯然可歸結(jié)為從源路由器到目的路由器的選路問題照雁。)所以我們的電腦為了可以與外界通信蚕愤,也需要建立與自己的默認路的連接,此時需要獲得自己默認路由器的地址饺蚊;為了可以瀏覽網(wǎng)頁萍诱,需要DNS域名服務(wù)系統(tǒng),來把網(wǎng)頁地址轉(zhuǎn)換為該網(wǎng)頁所在服務(wù)器的IP地址污呼,為了獲得DNS的服務(wù)裕坊,需要取得本地DNS服務(wù)器的地址。
我們的電腦首先運行的是DHCP(Dynamic host configuration protocol)--動態(tài)主機配置協(xié)議曙求,DHCP協(xié)議使用的傳輸層協(xié)議是UDP碍庵,主機將DHCP請求經(jīng)傳輸層UDP、網(wǎng)絡(luò)層IP以及以太網(wǎng)中802.3協(xié)議的封裝后的幀以廣播的形式(目的地址是全1)發(fā)送到本地局域網(wǎng)中悟狱,然后本地局域網(wǎng)中的DHCP服務(wù)器接收請求静浴,并發(fā)送一個DHCP響應(yīng)給主機,響應(yīng)包括分配給主機的IP地址挤渐,其默認路由器的IP地址苹享,以及DNS服務(wù)器的名字和IP地址。如下圖所示,是主機與本地DHCP服務(wù)器通信的示意圖得问。
此時我們的電腦主機已經(jīng)獲得了自己的IP地址囤攀、默認路由器的IP地址以及DNS服務(wù)器的IP地址和名字。在我們發(fā)送HTTP請求的時候需要先獲得網(wǎng)址:www.baidu.com所在服務(wù)器的IP地址宫纬,這樣我們才可以跟該web服務(wù)器通信焚挠,發(fā)送HTTP請求。此時就需要運行DNS協(xié)議漓骚,向DNS服務(wù)器發(fā)送請求蝌衔,當主機把DNS請求經(jīng)UDP、IP封裝成網(wǎng)絡(luò)層的IP數(shù)據(jù)包以后蝌蹂,到鏈路層都是利用MAC地址而非IP地址在交換機噩斟、路由器等之間進行轉(zhuǎn)發(fā)的,但是主機現(xiàn)在只知道DNS服務(wù)器的IP地址孤个,而不知道DNS服務(wù)器的MAC地址剃允,此時需要運行網(wǎng)絡(luò)層的ARP(Address Resolution Protocol)-地址解析協(xié)議,根據(jù)IP地址獲取物理地址(MAC地址)齐鲤。而且在鏈路層中源和目的MAC地址都是相鄰兩個鏈路中適配器的MAC地址斥废,所以主機利用ARP協(xié)議向整個局域網(wǎng)發(fā)出ARP請求的廣播幀,然后默認路由器接收幀并把ARP響應(yīng)幀回送給主機佳遂,ARP響應(yīng)幀包括路由器接口的MAC地址营袜。
此時主機算是知道了默認路由器的MAC地址,可以把DNS請求幀發(fā)送到默認路由器上丑罪。接著路由器從接收的幀中把IP數(shù)據(jù)包取出來,然后根據(jù)目的IP地址把該數(shù)據(jù)包從校園網(wǎng)發(fā)送到外網(wǎng)上凤壁,然后經(jīng)過多個路由器的轉(zhuǎn)發(fā)最終到達DNS服務(wù)器吩屹,路由器根據(jù)轉(zhuǎn)發(fā)表來轉(zhuǎn)發(fā)該數(shù)據(jù)包,其中的轉(zhuǎn)發(fā)表是根據(jù)各種選路算法拧抖、選路協(xié)議來確定的煤搜,其中包括RIP,OSPF唧席、IS-IS以及BGP等協(xié)議擦盾。DNS服務(wù)器一層層拆解數(shù)據(jù)包,最終得到DNS的請求淌哟,然后DNS服務(wù)器再回送一個DNS響應(yīng)迹卢,響應(yīng)含有域名www.baidu.com的web服務(wù)器的IP地址,然后也是相似的經(jīng)運輸層徒仓、網(wǎng)絡(luò)層腐碱、鏈路層和物理層到達主機的默認路由器,最終到達主機掉弛。
當知道了web服務(wù)器的IP地址以后症见,主機就可以發(fā)送HTTP請求了喂走,HTTP協(xié)議所使用的運輸層協(xié)議是TCP,TCP連接建立需要三次握手谋作,第一次握手:客戶機到服務(wù)器的SYN芋肠、seq=x;第二次握手:服務(wù)器到客戶機的SYN遵蚜、ACK帖池、ack=x+1、seq=y和第三次握手:客戶機到服務(wù)器的ACK谬晕、seq=x+1碘裕、ack=y+1,客戶機在第三次握手時就把數(shù)據(jù)發(fā)送給服務(wù)器了攒钳,此時TCP連接已經(jīng)建立帮孔。
客戶機把HTTP請求發(fā)送到TCP socket中,當包含該HTTP請求的TCP數(shù)據(jù)段到達web服務(wù)器以后不撑,服務(wù)器回送一個帶有HTTP響應(yīng)(網(wǎng)頁內(nèi)容)的TCP數(shù)據(jù)段給主機文兢,主機從TCP數(shù)據(jù)段中取出HTTP響應(yīng),然后交付給響應(yīng)的socket端口焕檬,瀏覽器最終讀取并解釋和渲染該網(wǎng)頁最終顯示在主機屏幕上姆坚。