1. 基礎(chǔ)知識
1.1 3種常見的計(jì)算機(jī)體系結(jié)構(gòu)劃分
OSI分層(7層):物理層、數(shù)據(jù)鏈路層恨豁、網(wǎng)絡(luò)層嚣镜、傳輸層爬迟、會話層橘蜜、表示層、應(yīng)用層付呕。
TCP/IP分層(4層):網(wǎng)絡(luò)接口層计福、網(wǎng)際層、運(yùn)輸層徽职、應(yīng)用層象颖。
五層協(xié)議(5層):物理層、數(shù)據(jù)鏈路層姆钉、網(wǎng)絡(luò)層说订、運(yùn)輸層、應(yīng)用層潮瓶。
每一層的作用如下:
- 物理層:激活陶冷、維持、關(guān)閉通信端點(diǎn)之間的機(jī)械特性毯辅、電氣特性埂伦、功能特性以及過程特性。該層為上層協(xié)議提供了一個(gè)傳輸數(shù)據(jù)的物理媒體思恐。物理層的任務(wù)就是透明地傳送比特流沾谜。
- 數(shù)據(jù)鏈路層:數(shù)據(jù)鏈路層在不可靠的物理介質(zhì)上提供可靠的傳輸。該層的作用包括:物理地址尋址胀莹、數(shù)據(jù)的成幀基跑、流量控制、數(shù)據(jù)的檢錯(cuò)描焰、重發(fā)等媳否。
- 網(wǎng)絡(luò)層:網(wǎng)絡(luò)層負(fù)責(zé)對子網(wǎng)間的數(shù)據(jù)包進(jìn)行路由選擇。此外,網(wǎng)絡(luò)層還可以實(shí)現(xiàn)擁塞控制逆日、網(wǎng)際互連等功能嵌巷。
- 傳輸層:構(gòu)的最高層,直接為用戶的應(yīng)用進(jìn)程提供服務(wù)室抽。
- 運(yùn)輸層的任務(wù)是負(fù)責(zé)向兩個(gè)主機(jī)中進(jìn)程之間的通信提供服務(wù)搪哪。由于一個(gè)主機(jī)可同時(shí)運(yùn)行多個(gè)進(jìn)程,因此運(yùn)輸層具有復(fù)用和分用的功能坪圾。復(fù)用是指多個(gè)應(yīng)用層進(jìn)程可同時(shí)使用運(yùn)輸層的服務(wù)晓折,分用是指運(yùn)輸層把收到的信息分別交付給應(yīng)用層中的相應(yīng)進(jìn)程。
- 應(yīng)用層:為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問網(wǎng)絡(luò)服務(wù)的接口兽泄。
1.2 常見的網(wǎng)絡(luò)協(xié)議
網(wǎng)絡(luò)層
- IP協(xié)議:網(wǎng)際協(xié)議
- ICMP協(xié)議:Internet控制報(bào)文協(xié)議
- ARP協(xié)議:地址解析協(xié)議
- RARP協(xié)議:逆地址解析協(xié)議
傳輸層
- UDP協(xié)議:用戶數(shù)據(jù)報(bào)協(xié)議
- TCP協(xié)議:傳輸控制協(xié)議
應(yīng)用層
- FTP:文件傳送協(xié)議
- Telenet:遠(yuǎn)程登錄協(xié)議
- DNS:域名解析協(xié)議
- POP3:郵局協(xié)議
- HTTP協(xié)議
- SMTP:簡單郵件傳送協(xié)議
- SNMP:簡單網(wǎng)絡(luò)管理協(xié)議
- TFTP:簡單文件傳送協(xié)議
2. 網(wǎng)際協(xié)議IP
IP協(xié)議的特點(diǎn)
- 不可靠:并不保證IP數(shù)據(jù)報(bào)能成功地到達(dá)目的地漓概。如果發(fā)生某種錯(cuò)誤,如某個(gè)路由器暫時(shí)用完了緩沖區(qū)病梢,IP有一個(gè)簡單的錯(cuò)誤處理算法:丟棄該數(shù)據(jù)報(bào)胃珍,然后發(fā)送ICMP消息報(bào)給信源端。任何可靠性必須由上層提供(如TCP)蜓陌。
- 無連接:IP并不維護(hù)任何關(guān)于后續(xù)數(shù)據(jù)報(bào)的狀態(tài)消息觅彰,每個(gè)連接都是獨(dú)立的。這也說明钮热,IP數(shù)據(jù)報(bào)可以不按發(fā)送順序接收填抬。
2.1 IP首部
普通的IP首部長20個(gè)字節(jié)(不包含選項(xiàng)字段),包含協(xié)議版本號隧期、首部長度飒责、總長度、唯一標(biāo)識仆潮、TTL宏蛉、首部檢驗(yàn)和、源IP地址和目的IP地址鸵闪。
- 通過首部長度和總長度字段就可以知道IP數(shù)據(jù)報(bào)中數(shù)據(jù)內(nèi)容的起始位置和長度檐晕。
- TTL生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過的最多路由器數(shù)。初始值由源主機(jī)設(shè)置蚌讼,一旦經(jīng)過一個(gè)處理它的路由器辟灰,其值就減一;當(dāng)該字段的值為0時(shí)篡石,數(shù)據(jù)報(bào)就被丟棄芥喇。
- 首部檢驗(yàn)和字段是根據(jù)IP首部計(jì)算的檢驗(yàn)和碼(ICMP、UDP凰萨、TCP檢驗(yàn)和同時(shí)覆蓋了首部和數(shù)據(jù)部分)继控。
- 如果長度超過了MTU械馆,則要進(jìn)行分片,根據(jù)IP頭部的格式武通,有一個(gè)16位的標(biāo)識霹崎,分片的時(shí)候會把這個(gè)標(biāo)識復(fù)制到所有的分片中去,也就是說同一個(gè)IP的分片冶忱,他們的標(biāo)識是一樣的尾菇;然后3bit標(biāo)志中有一位是表示是否最后一片,除了最后一片為0囚枪,其它片這個(gè)標(biāo)識位都為1派诬;修改IP的長度為分片中實(shí)際數(shù)據(jù)的長度;片偏移量是該片偏移原始數(shù)據(jù)的位置链沼。 接收端根據(jù) 標(biāo)識默赂,是否為最后一片,各個(gè)片的長度括勺,偏移量就可以把分片的包重新組裝起來缆八。
2.2 IP地址
IP地址一般有網(wǎng)絡(luò)號和主機(jī)號組成(D類和E類無此分法)。網(wǎng)絡(luò)號標(biāo)志主機(jī)(或路由器)所連接到的網(wǎng)絡(luò)朝刊,主機(jī)號則標(biāo)志該網(wǎng)絡(luò)下的主機(jī)或路由器耀里。
由于一個(gè)路由器至少應(yīng)當(dāng)連接到兩個(gè)網(wǎng)絡(luò)(這樣它才能將IP數(shù)據(jù)報(bào)從一個(gè)網(wǎng)絡(luò)轉(zhuǎn)發(fā)到另一個(gè)網(wǎng)絡(luò))蜈缤,因此一個(gè)路由器至少應(yīng)當(dāng)有兩個(gè)不同的IP地址拾氓。路由器只根據(jù)目的站的IP地址的網(wǎng)絡(luò)號進(jìn)行路由選擇。
上圖中的A類底哥、B類咙鞍、C類地址都是單播地址(一對一通信),是最常用的趾徽。網(wǎng)絡(luò)號字段的最前面有1-4位的類別位续滋。其中有兩個(gè)特殊的IP地址,主機(jī)號全為0的IP地址代表網(wǎng)絡(luò)地址孵奶,主機(jī)號全為1的IP地址為廣播地址疲酌。當(dāng)向某個(gè)網(wǎng)絡(luò)的廣播地址發(fā)送消息時(shí),該網(wǎng)絡(luò)內(nèi)的所有主機(jī)都能收到該廣播消息了袁。
A類地址:以0開頭朗恳,第一個(gè)字節(jié)范圍:0~127;
B類地址:以10開頭载绿,第一個(gè)字節(jié)范圍:128~191粥诫;
C類地址:以110開頭,第一個(gè)字節(jié)范圍:192~223崭庸;
D類地址:以1110開頭怀浆,第一個(gè)字節(jié)范圍為224~239谊囚;
3個(gè)特殊的IP地址
-
255.255.255.255
該IP地址指的是受限的廣播地址。受限廣播地址與一般廣播地址(直接廣播地址)的區(qū)別在于执赡,受限廣播地址之只能用于本地網(wǎng)絡(luò)镰踏,路由器不會轉(zhuǎn)發(fā)以受限廣播地址為目的地址的分組;一般廣播地址既可在本地廣播沙合,也可跨網(wǎng)段廣播余境。例如:主機(jī)192.168.1.1/30上的直接廣播數(shù)據(jù)包后,另外一個(gè)網(wǎng)段192.168.1.5/30也能收到該數(shù)據(jù)報(bào)灌诅;若發(fā)送受限廣播數(shù)據(jù)報(bào)芳来,則不能收到。 -
0.0.0.0
常用于尋找自己的IP地址猜拾,例如在我們的RARP即舌,BOOTP和DHCP協(xié)議中,若某個(gè)未知IP地址的無盤機(jī)想要知道自己的IP地址挎袜,它就以255.255.255.255為目的地址顽聂,向本地范圍(具體而言是被各個(gè)路由器屏蔽的范圍內(nèi))的服務(wù)器發(fā)送IP請求分組。 -
127.0.0.1
127.0.0.0/8被用作回環(huán)地址盯仪,回環(huán)地址表示本機(jī)的地址紊搪,常用于對本機(jī)的測試,用的最多的是127.0.0.1全景。
2.3 劃分子網(wǎng)
劃分子網(wǎng)的方法是從主機(jī)號借用若干個(gè)位作為子網(wǎng)號subnet-id耀石,而主機(jī)號host-id 也就相應(yīng)減少了若干個(gè)位。于是兩級IP地址在本單位內(nèi)部就變?yōu)槿塈P地址:網(wǎng)絡(luò)號爸黄、子網(wǎng)號和主機(jī)號滞伟。
IP地址 ::= {<網(wǎng)絡(luò)號>, <子網(wǎng)號>, <主機(jī)號>}
子網(wǎng)對外部路由器來說隱藏了內(nèi)部網(wǎng)絡(luò)組織的細(xì)節(jié),在外部看來炕贵,不同子網(wǎng)的主機(jī)仍屬于同一個(gè)網(wǎng)絡(luò)梆奈。
凡是從其他網(wǎng)絡(luò)發(fā)送給本單位某個(gè)主機(jī)的IP數(shù)據(jù)報(bào),仍然是根據(jù)IP數(shù)據(jù)報(bào)的目的網(wǎng)絡(luò)號net-id称开,先找到連接在本單位網(wǎng)絡(luò)上的路由器亩钟。然后此路由器在收到 IP 數(shù)據(jù)報(bào)后,再按目的網(wǎng)絡(luò)號 net-id 和子網(wǎng)號 subnet-id 找到目的子網(wǎng)鳖轰。最后就將 IP 數(shù)據(jù)報(bào)直接交付目的主機(jī)清酥。
如何正確地區(qū)分子網(wǎng)號和主機(jī)號是一個(gè)問題,這可以通過子網(wǎng)掩碼來確定脆霎。將網(wǎng)絡(luò)號和子網(wǎng)號全設(shè)為1的IP地址為子網(wǎng)掩碼总处。給定IP地址和子網(wǎng)掩碼以后,主機(jī)就可以確定IP數(shù)據(jù)報(bào)的目的地是本子網(wǎng)的主機(jī)睛蛛,本網(wǎng)絡(luò)中其他子網(wǎng)的主機(jī)鹦马,還是其他網(wǎng)絡(luò)的主機(jī)胧谈。
2.4 ARP協(xié)議與RARP協(xié)議
RAP為IP地址到對應(yīng)硬件地址之間提供動態(tài)映射;RARP則相反荸频。RAP高效運(yùn)行的關(guān)鍵是由于每個(gè)主機(jī)上都有一個(gè)RAP高速緩存菱肖,來存放最近Internet地址到硬件地址之間的映射記錄。
ARP協(xié)議的工作原理
- 首先旭从,每個(gè)主機(jī)都會在自己的ARP緩沖區(qū)中建立一個(gè)ARP列表稳强,以表示IP地址和MAC地址之間的對應(yīng)關(guān)系。
- 當(dāng)源主機(jī)要發(fā)送數(shù)據(jù)時(shí)和悦,首先檢查ARP列表中是否有對應(yīng)IP地址的目的主機(jī) MAC地址退疫,如果有,則直接發(fā)送數(shù)據(jù)鸽素,如果沒有褒繁,就向本網(wǎng)段的所有主機(jī)發(fā)送ARP數(shù)據(jù)包,該數(shù)據(jù)包包括的內(nèi)容有源主機(jī)IP地址馍忽、源主機(jī)MAC地址棒坏、目的主機(jī)的IP地址。
- 當(dāng)本網(wǎng)絡(luò)的所有主機(jī)收到該ARP數(shù)據(jù)包時(shí)遭笋,首先檢查數(shù)據(jù)包中的IP地址是否是自己的IP地址坝冕,如果不是,則忽略該數(shù)據(jù)包瓦呼,如果是喂窟,則首先從數(shù)據(jù)包中取出源主機(jī)的IP和MAC地址寫入到ARP列表中,如果已經(jīng)存在吵血,則覆蓋谎替,然后將自己的MAC 地址寫入ARP響應(yīng)包中,告訴源主機(jī)自己是它想要找的MAC地址蹋辅。
- 源主機(jī)收到ARP響應(yīng)包后。將目的主機(jī)的IP和MAC地址寫入ARP列表挫掏,并利用此信息發(fā)送數(shù)據(jù)侦另。如果源主機(jī)一直沒有收到 ARP響應(yīng)數(shù)據(jù)包,表示ARP查詢失敗尉共。
2.5 ICMP(Internet控制報(bào)文協(xié)議)
ICMP是IP層的一個(gè)組成部分褒傅,它傳遞差錯(cuò)報(bào)文以及其他需要注意的信息。ICMP報(bào)文是在IP數(shù)據(jù)報(bào)內(nèi)部(IP首部+ICMP報(bào)文)被傳輸?shù)陌烙选CMP報(bào)文由類型字段殿托、代碼字段、檢驗(yàn)和和其他字節(jié)組成剧蚣,前兩個(gè)字段決定了ICMP報(bào)文的類型支竹。
ICMP地址掩碼請求旋廷,用于無盤系統(tǒng)在引導(dǎo)過程中獲取自己自己的子網(wǎng)掩碼。該ICMP報(bào)文的類型字段為17或18礼搁,代碼字段為0饶碘,并返回32位子網(wǎng)掩碼。
ICMP端口不可達(dá)差錯(cuò)馒吴,如果收到一份UDP數(shù)據(jù)報(bào)而目的端口與某個(gè)正在使用的進(jìn)程不相符扎运,那么UDP返回一個(gè)ICMP不可達(dá)報(bào)文。ICMP報(bào)文必須包括生成差錯(cuò)報(bào)文的數(shù)據(jù)報(bào)IP首部饮戳,還必須至少包括跟在該IP首部后面的前8個(gè)字節(jié)豪治。
2.6 ping程序
ping程序的目的是為了測試另一臺主機(jī)是否可達(dá)。該程序發(fā)送一份ICMP回顯請求報(bào)文給主機(jī)扯罐,并等待返回ICMP回顯應(yīng)答鬼吵。它只利用ICMP回顯請求和回顯應(yīng)答報(bào)文,而不經(jīng)過傳輸層篮赢。
ping 127.0.0.1環(huán)回地址時(shí)齿椅,如果不能ping通說明當(dāng)前機(jī)器的TCP/IP協(xié)議棧有問題,127本身是一個(gè)虛接口启泣,任何時(shí)候都是直接上交到內(nèi)核中處理的涣脚。
ping 192.168.1.X 本機(jī)的以太網(wǎng)地址,則是測試本機(jī)的網(wǎng)絡(luò)適配器(就是網(wǎng)卡啦)寥茫,一般是以太網(wǎng)驅(qū)動程序遣蚀。
ping這兩個(gè)地址時(shí)你會發(fā)現(xiàn),但使用wireshark抓包時(shí)纱耻,是沒有ICMP的回顯請求發(fā)出的芭梯,這說明這兩個(gè)ping程序是不會發(fā)送到網(wǎng)絡(luò)中的(只在局域網(wǎng)中)。
ping 同一網(wǎng)段中的網(wǎng)絡(luò)地址弄喘,不通則說明網(wǎng)絡(luò)線路出現(xiàn)了故障玖喘,如果網(wǎng)絡(luò)中還存在路由器,則應(yīng)該先ping路由器在本網(wǎng)絡(luò)的地址蘑志,不通則是本機(jī)和路由器之間的線路有問題累奈。通了,則再ping路由器所在目標(biāo)計(jì)算機(jī)網(wǎng)絡(luò)所在網(wǎng)段的端口IP地址急但,不通則說明了路由器出現(xiàn)了故障澎媒,通了就再ping目標(biāo)主機(jī)的IP地址。
如果ping www.baidu.com等網(wǎng)絡(luò)地址ping不通時(shí)波桩,則說明本機(jī)的DNS服務(wù)器設(shè)置錯(cuò)誤戒努。
3. TCP協(xié)議
3.1 TCP服務(wù)的特點(diǎn)
TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)镐躲。面向連接意味著應(yīng)用程序在使用TCP協(xié)議之前储玫,必須先建立TCP連接侍筛。在傳送數(shù)據(jù)完畢后,必須釋放已經(jīng)建立的TCP連接缘缚。TCP通過以下方式來提供可靠性:
- 應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊勾笆。
- 超時(shí)重傳。當(dāng)TCP發(fā)出一個(gè)段后桥滨,它啟動一個(gè)定時(shí)器窝爪,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到確認(rèn)齐媒,將重發(fā)這個(gè)報(bào)文段蒲每。
- 當(dāng)TCP收到發(fā)自TCP連接另一端的數(shù)據(jù)后,他將發(fā)送一個(gè)確認(rèn)喻括。該確認(rèn)通常將推遲幾分之一秒邀杏。
- TCP將保持他首部和數(shù)據(jù)的檢驗(yàn)和。
- 由于IP數(shù)據(jù)報(bào)的到達(dá)可能會失序唬血,因此TCP報(bào)文段的到達(dá)也可能失序望蜡。如有必要,TCP將對收到的數(shù)據(jù)進(jìn)行重新排序拷恨,并以正確的順序交付給應(yīng)用層脖律。
- 既然IP數(shù)據(jù)報(bào)會發(fā)生重復(fù),TCP的接收端必須丟棄重復(fù)的數(shù)據(jù)腕侄。
- 流量控制小泉。防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。
3.2 TCP的首部
TCP雖然是面向字節(jié)流的冕杠,但TCP傳送的數(shù)據(jù)單元卻是報(bào)文段微姊。一個(gè)TCP報(bào)文段分為首部和數(shù)據(jù)兩部分,而TCP的全部功能都體現(xiàn)在它首部中各字段的作用分预。因此兢交,只有弄清TCP首部各字段的作用才能掌握TCP的工作原理。TCP報(bào)文首部固定部分各字段的意義如下:
源端口和目的端口
各占兩字節(jié)噪舀,分別寫入源端口號和目的端口號魁淳。TCP的分用也是通過端口實(shí)現(xiàn)的。報(bào)文段序號
占4字節(jié)与倡。在一個(gè)TCP連接中傳送的字節(jié)流中的每一個(gè)字節(jié)都按順序編號。整個(gè)要傳送的字節(jié)流的起始序號必須在連接建立時(shí)設(shè)置昆稿,首部中的序號字段值則是指本報(bào)文所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號纺座。確認(rèn)號
期望收到對方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號。若確認(rèn)號為N溉潭,則表明到序號N-1為止的所有數(shù)據(jù)都已正確收到净响。數(shù)據(jù)偏移
指出TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn)少欺,實(shí)際上指出了TCP報(bào)文段的首部長度。6個(gè)控制位
確認(rèn)ACK:TCP規(guī)定馋贤,在連接建立后所有傳送的報(bào)文段都必須把ACK置1赞别。
復(fù)位RST:當(dāng)RST=1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重錯(cuò)誤配乓,必須釋放連接仿滔,然后再重新建立運(yùn)輸連接。
同步SYN:在連接建立時(shí)用來同步序號犹芹。當(dāng)SYN=1而ACK=0時(shí)崎页,表明這是一個(gè)連接請求報(bào)文段。對方若同意建立連接腰埂,則應(yīng)在響應(yīng)的報(bào)文段中使用SYN=1和ACK=1.
終止FIN:用來釋放一個(gè)連接飒焦。當(dāng)FIN=1時(shí),表明此報(bào)文段的發(fā)送方的數(shù)據(jù)已發(fā)送完畢屿笼,并要求釋放運(yùn)輸連接牺荠。窗口
窗口字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量,該值經(jīng)常在動態(tài)變化著驴一。例如休雌,設(shè)確認(rèn)號是701,窗口字段是1000蛔趴。這就表明從701算起挑辆,發(fā)送此報(bào)文段的一方還有接收1000個(gè)字節(jié)數(shù)據(jù)的接收緩存空間。
3.3 TCP連接的建立與終止過程
三次握手
第一次握手:客戶端發(fā)送syn包(syn=x)到服務(wù)器孝情,并進(jìn)入SYN_SEND狀態(tài)鱼蝉,等待服務(wù)器確認(rèn);
第二次握手:服務(wù)器收到syn包箫荡,必須確認(rèn)客戶的SYN(ack=x+1)魁亦,同時(shí)自己也發(fā)送一個(gè)SYN包(syn=y),即SYN+ACK包羔挡,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)洁奈;
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1)绞灼,此包發(fā)送完畢利术,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手低矮。
握手過程中傳送的包里不包含數(shù)據(jù)印叁,三次握手完畢后,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下轮蜕,TCP連接一旦建立,在通信雙方中的任何一方主動關(guān)閉連接之前跃洛,TCP 連接都將被一直保持下去率触。
四次握手
與建立連接的“三次握手”類似,斷開一個(gè)TCP連接則需要“四次握手”汇竭。
第一次揮手:主動關(guān)閉方發(fā)送一個(gè)FIN葱蝗,用來關(guān)閉主動方到被動關(guān)閉方的數(shù)據(jù)傳送,也就是主動關(guān)閉方告訴被動關(guān)閉方:我已經(jīng)不會再給你發(fā)數(shù)據(jù)了(當(dāng)然韩玩,在fin包之前發(fā)送出去的數(shù)據(jù)垒玲,如果沒有收到對應(yīng)的ack確認(rèn)報(bào)文,主動關(guān)閉方依然會重發(fā)這些數(shù)據(jù))找颓,但是合愈,此時(shí)主動關(guān)閉方還可以接受數(shù)據(jù)。
第二次揮手:被動關(guān)閉方收到FIN包后击狮,發(fā)送一個(gè)ACK給對方佛析,確認(rèn)序號為收到序號+1。
第三次揮手:被動關(guān)閉方發(fā)送一個(gè)FIN彪蓬,用來關(guān)閉被動關(guān)閉方到主動關(guān)閉方的數(shù)據(jù)傳送寸莫,也就是告訴主動關(guān)閉方,我的數(shù)據(jù)也發(fā)送完了档冬,不會再給你發(fā)數(shù)據(jù)了活孩。(與SYN相同葬项,一個(gè)FIN占用一個(gè)序號)。
第四次揮手:主動關(guān)閉方收到FIN后,發(fā)送一個(gè)ACK給被動關(guān)閉方眶根,確認(rèn)序號為收到序號+1脚乡,至此哥蔚,完成四次揮手姑隅。
TCP的半關(guān)閉
TCP提供了連接的一端在結(jié)束它的發(fā)送后還能接收來自另一端數(shù)據(jù)的能力,這就是半關(guān)閉玫氢。為了使用這一特性帚屉,編程接口必須為應(yīng)用程序提供一中方式來說明“我們已經(jīng)完成了數(shù)據(jù)傳送,因此發(fā)送一個(gè)文件結(jié)束(FIN)給另一端漾峡,但我還想接收另一端的數(shù)據(jù)攻旦,直到它給我發(fā)送文件結(jié)束FIN”。
2MSL等待狀態(tài)
TIME_WAIT狀態(tài)也稱為2MSL等待狀態(tài)生逸。每個(gè)具體TCP實(shí)現(xiàn)必須選擇一個(gè)報(bào)文段最大生存時(shí)間MSL敬特,它是任何報(bào)文段被丟棄前在網(wǎng)絡(luò)內(nèi)的最長時(shí)間(RFC指出其為2min掰邢,實(shí)現(xiàn)中常用值還有30s和1min)牺陶。當(dāng)TCP執(zhí)行一個(gè)主動關(guān)閉伟阔,并發(fā)回最后一個(gè)ACK,該連接必須在TIME_WAIT狀態(tài)停留的2倍的MSL掰伸;這樣可讓TCP再次發(fā)送最后的ACK以防這個(gè)ACK丟失(另一方超時(shí)并重發(fā)最后的FIN)。
3.4 使用UDP和TCP的場景
UDP的典型應(yīng)用:實(shí)時(shí)性合搅,不需要重傳機(jī)制歧蕉,局域網(wǎng)(本身網(wǎng)絡(luò)穩(wěn)定性高)
- UDP適合于這樣的進(jìn)程:需要簡單的請求-響應(yīng)通信灾部,而較少考慮流量控制和差錯(cuò)控制惯退。對于需要傳送成塊數(shù)據(jù)的進(jìn)程(如FTP)則不適合使用UDP。
- UDP適合于具有內(nèi)部流量控制和差錯(cuò)控制機(jī)制的進(jìn)程催跪,如簡單文件傳輸協(xié)議TFTP锁蠕。
- 對多播來說懊蒸,UDP是一個(gè)合適的傳輸協(xié)議骑丸。
- UDP常用于交互實(shí)時(shí)應(yīng)用,以避免接收報(bào)文之間的不一致延時(shí)铸豁。
- UDP可用于管理進(jìn)程黄鳍,如SNMP框沟。
TCP對應(yīng)的協(xié)議:
- FTP:定義了文件傳輸協(xié)議忍燥,使用21端口。常說某某計(jì)算機(jī)開了FTP服務(wù)便是啟動了文件傳輸服務(wù)厂捞。下載文件靡馁,上傳主頁,都要用到FTP服務(wù)臭墨。
- Telnet:它是一種用于遠(yuǎn)程登陸的端口胧弛,用戶可以以自己的身份遠(yuǎn)程連接到計(jì)算機(jī)上,通過這種端口可以提供一種基于DOS模式下的通信服務(wù)损晤。如以前的BBS是-純字符界面的尤勋,支持BBS的服務(wù)器將23端口打開斥黑,對外提供服務(wù)眉厨。
- SMTP:定義了簡單郵件傳送協(xié)議憾股,現(xiàn)在很多郵件服務(wù)器都用的是這個(gè)協(xié)議服球,用于發(fā)送郵件斩熊。如常見的免費(fèi)郵件服務(wù)中用的就是這個(gè)郵件服務(wù)端口,所以在電子郵件設(shè)置-中撤指裕看到有這么SMTP端口設(shè)置這個(gè)欄雕沉,服務(wù)器開放的是25號端口坡椒。
- POP3:它是和SMTP對應(yīng),POP3用于接收郵件汗唱。通常情況下渡嚣,POP3協(xié)議所用的是110端口。也是說绝葡,只要你有相應(yīng)的使用POP3協(xié)議的程序(例如Fo-xmail或Outlook)藏畅,就可以不以Web方式登陸進(jìn)郵箱界面愉阎,直接用郵件程序就可以收到郵件(如是163郵箱就沒有必要先進(jìn)入網(wǎng)易網(wǎng)站榜旦,再進(jìn)入自己的郵-箱來收信)溅呢。
- HTTP協(xié)議:是從Web服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
UDP對應(yīng)的協(xié)議:
- DNS:用于域名解析服務(wù)驶鹉,將域名地址轉(zhuǎn)換為IP地址室埋。DNS用的是53號端口姚淆。
DNS工作原理:當(dāng)DNS客戶機(jī)需要在程序中使用名稱時(shí)肉盹,它會查詢DNS服務(wù)器來解析該名稱疹尾。客戶機(jī)發(fā)送的每條查詢信息包括三條信息:包括:指定的DNS域名腋颠,指定的查詢類型淑玫,DNS域名的指定類別絮蒿。該應(yīng)用一般不直接為用戶使用叁鉴,而是為其他應(yīng)用服務(wù)幌墓,如HTTP常侣,SMTP等在其中需要完成主機(jī)名到IP地址的轉(zhuǎn)換胳施。 - SNMP:簡單網(wǎng)絡(luò)管理協(xié)議巾乳,使用161號端口,是用來管理網(wǎng)絡(luò)設(shè)備的氨鹏。由于網(wǎng)絡(luò)設(shè)備很多仆抵,無連接的服務(wù)就體現(xiàn)出其優(yōu)勢镣丑。
- TFTP(Trival File Transfer Protocal)莺匠,簡單文件傳輸協(xié)議趣竣,該協(xié)議在熟知端口69上使用UDP服務(wù)。
4. 超文本傳送協(xié)議HTTP
HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議卫袒,由于其簡捷夕凝、快速的方式码秉,適用于分布式超媒體信息系統(tǒng)泡徙。HTTP協(xié)議的主要特點(diǎn)可概括如下:
- 支持客戶/服務(wù)器模式。
- 簡單快速:客戶向服務(wù)器請求服務(wù)時(shí)挑围,只需傳送請求方法和路徑杉辙。請求方法常用的有GET蜘矢、HEAD综看、POST红碑。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同析珊。由于HTTP協(xié)議簡單忠寻,使得HTTP服務(wù)器的程序規(guī)模小奕剃,因而通信速度很快。
- 靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象叙量。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記绞佩。
- 無連接:無連接的含義是限制每次連接只處理一個(gè)請求品山。服務(wù)器處理完客戶的請求烤低,并收到客戶的應(yīng)答后扑馁,即斷開連接腻要。采用這種方式可以節(jié)省傳輸時(shí)間雄家。
- 無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議趟济。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力顷编。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息勾效,則它必須重傳层宫,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大萌腿。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快锌历。
4.1 瀏覽網(wǎng)頁的過程
瀏覽網(wǎng)頁的過程其實(shí)就是瀏覽器作為一個(gè)瀏覽的“客戶端”究西,向服務(wù)器端發(fā)送了 一次請求卤材,把服務(wù)器端的文件“抓”到本地扇丛,再進(jìn)行解釋帆精、展現(xiàn)卓练。
- 使用統(tǒng)一資源定位符URL來標(biāo)志萬維網(wǎng)上的各種文檔昆庇,并使每一個(gè)文檔在整個(gè)因特網(wǎng)的范圍內(nèi)具有唯一的標(biāo)識符URL。
- 通過超文本傳送協(xié)議HTTP來實(shí)現(xiàn)萬維網(wǎng)上各種連接辉川,使用TCP連接進(jìn)行可靠的傳送乓旗。
- 使用超文本標(biāo)記語言HTML使得網(wǎng)頁設(shè)計(jì)者可以很方便地用鏈接從本頁面的某處鏈接到任意網(wǎng)頁屿愚,并在自己主機(jī)屏幕上顯示妆距。
4.2 統(tǒng)一資源定位符URL
URL是用來表示從因特網(wǎng)上得到的資源位置和訪問這些資源的方法娱据。URL給資源的位置提供一種抽象的識別方法中剩,并用這種方法給資源定位结啼。只要能夠?qū)Y源定位郊愧,系統(tǒng)就可以對資源進(jìn)行各種操作糕珊,如存取红选、更新喇肋、替換和查找其屬性蝶防。URL相當(dāng)于一個(gè)文件名在網(wǎng)絡(luò)范圍的擴(kuò)展间学。因此低葫,URL是與因特網(wǎng)相連的機(jī)器上的任何可訪問對象的指針嘿悬。由于訪問不同對象使用的協(xié)議不同善涨,URL還能之處讀取某個(gè)對象時(shí)所使用的協(xié)議钢拧。URL的一般形式為:
<協(xié)議>://<主機(jī)>:<端口>/<路徑>
協(xié)議是指用哪種協(xié)議獲取該萬維網(wǎng)文檔娶靡,如http,ftp伯铣;主機(jī)是指該網(wǎng)絡(luò)文檔所在主機(jī)的域名腔寡;端口和路徑有時(shí)可以省略。對萬維網(wǎng)的網(wǎng)點(diǎn)訪問使用HTTP協(xié)議凭语,HTTP的默認(rèn)端口號是80似扔,通吵椿裕可省略黔寇。若在省略文件的路徑缝裤,則URL就指到因特網(wǎng)上的某個(gè)主頁倘是。如: www.baidu.com。
4.3 HTTP請求報(bào)文
HTTP規(guī)定在HTTP客戶與HTTP服務(wù)器之間的每次交互,都由一個(gè)ASCII碼串構(gòu)成的請求和一個(gè)“MIME-like”的響應(yīng)組成答倡,HTTP報(bào)文通常都使用TCP連接傳送瘪撇。HTTP有兩類報(bào)文:請求報(bào)文(從客戶向服務(wù)器發(fā)送請求報(bào)文)和響應(yīng)報(bào)文(從服務(wù)器到客戶的回答)倔既。HTTP請求報(bào)文和響應(yīng)報(bào)文都是由三部分組成渤涌,兩種報(bào)文格式的區(qū)別就是開始行不同茸俭。
- 開始行 用于區(qū)分是請求報(bào)文還是響應(yīng)報(bào)文调鬓。開始行在兩種報(bào)文中分別叫請求行和狀態(tài)行腾窝。
- 首部行 用來說明瀏覽器或報(bào)文主題的一些信息燕锥。
- 實(shí)體主體 在請求報(bào)文中一般不用該字段归形,而在響應(yīng)報(bào)文中也可能沒有該字段。
請求行只有三個(gè)內(nèi)容蔼紧,即方法奸例、請求資源URL和HTTP的版本查吊。下表給出了請求報(bào)文中常用的幾種方法逻卖。
GET:請求讀取由URL所標(biāo)志的信息炼杖。
POST:給服務(wù)器添加信息(如注釋)。
HEAD:請求獲取由Request-URI所標(biāo)識的資源的響應(yīng)消息報(bào)頭盗迟。
PUT:在給定的URL下存儲一個(gè)文檔坤邪。
DELETE:刪除給定的URL所標(biāo)志的資源。
GET方法诈乒,在瀏覽器的地址欄中輸入網(wǎng)址的方式訪問網(wǎng)頁時(shí)罩扇,瀏覽器采用GET方法向服務(wù)器獲取資源。POST方法要求被請求服務(wù)器接受附在請求后面的數(shù)據(jù)怕磨,常用于提交表單。POST與GET的區(qū)別如下:
- Get是從服務(wù)器上獲取數(shù)據(jù)肠鲫,Post是向服務(wù)器傳送數(shù)據(jù)员帮。
- Get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的Action屬性所指向的URL中,值和表單內(nèi)各個(gè)字段一一對應(yīng)导饲,在URL中可以看到捞高。
- Get傳送的數(shù)據(jù)量小,不能大于2KB渣锦;post傳送的數(shù)據(jù)量較大硝岗,一般被默認(rèn)為不受限制。
- 根據(jù)HTTP規(guī)范袋毙,GET用于信息獲取型檀,而且應(yīng)該是安全的和冪等的。
- 所謂安全的意味著該操作用于獲取信息而非修改信息听盖。換句話說胀溺,GET 請求一般不應(yīng)產(chǎn)生副作用。就是說皆看,它僅僅是獲取資源信息仓坞,就像數(shù)據(jù)庫查詢一樣,不會修改腰吟,增加數(shù)據(jù)无埃,不會影響資源的狀態(tài)。
- 冪等的意味著對同一URL的多個(gè)請求應(yīng)該返回同樣的結(jié)果毛雇。
GET http://www.bilibili.com/video/douga.html HTTP/1.1
下面是一個(gè)請求報(bào)文的例子
HTTP響應(yīng)報(bào)文
在接收和解釋請求消息后录语,服務(wù)器返回一個(gè)HTTP響應(yīng)消息。HTTP響應(yīng)也是由三個(gè)部分組成禾乘,分別是:狀態(tài)行、消息報(bào)頭虽缕、響應(yīng)正文始藕。狀態(tài)行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中蒲稳,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼伍派;Reason-Phrase表示狀態(tài)代碼的文本描述江耀。
狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別诉植,且有五種可能取值:
1xx:指示信息--表示請求已接收祥国,繼續(xù)處理
2xx:成功--表示請求已被成功接收、理解晾腔、接受
3xx:重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤--請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請求
常見狀態(tài)代碼舌稀、狀態(tài)描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯(cuò)誤灼擂,不能被服務(wù)器所理解
401 Unauthorized //請求未經(jīng)授權(quán)壁查,這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden //服務(wù)器收到請求,但是拒絕提供服務(wù)
404 Not Found //請求資源不存在剔应,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請求睡腿,一段時(shí)間后可能恢復(fù)正常
5. DNS域名系統(tǒng)
DNS是一中用于TCP/IP應(yīng)用程序的分布式數(shù)據(jù)庫,它提供域名到IP地址的轉(zhuǎn)換峻贮。舉例來說席怪,如果你要訪問域名math.stackexchange.com,首先要通過DNS查出它的IP地址是151.101.129.69 纤控。
5.1 因特網(wǎng)的域名結(jié)構(gòu)
因特網(wǎng)在命名時(shí)采用的是層次樹狀結(jié)構(gòu)的命名方法挂捻。任何一個(gè)連接在因特網(wǎng)上的主機(jī)或路由器,都有一個(gè)唯一的層次結(jié)構(gòu)的名字嚼黔,即域名(domain name)细层。每一個(gè)域名都是有標(biāo)號(label)序列組成,而各標(biāo)號之間用點(diǎn)(小數(shù)點(diǎn))隔開唬涧。如mail.cctv.com疫赎,這是中央電視臺用于手法電子郵件的計(jì)算機(jī)的域名,它由三個(gè)標(biāo)號組成碎节,其中標(biāo)號com是頂級域名捧搞,標(biāo)號cctv是二級域名,標(biāo)號mail是三級域名狮荔。
5.2 域名服務(wù)器
如果采用上述的樹狀結(jié)構(gòu)胎撇,每一個(gè)節(jié)點(diǎn)都采用一個(gè)域名服務(wù)器,這樣會使得域名服務(wù)器的數(shù)量太多殖氏,使域名服務(wù)器系統(tǒng)的運(yùn)行效率降低晚树。所以在DNS中,采用劃分區(qū)的方法來解決雅采。
一個(gè)服務(wù)器所負(fù)責(zé)管轄(或有權(quán)限)的范圍叫做區(qū)(zone)爵憎。各單位根據(jù)具體情況來劃分自己管轄范圍的區(qū)慨亲。但在一個(gè)區(qū)中的所有節(jié)點(diǎn)必須是能夠連通的。每一個(gè)區(qū)設(shè)置相應(yīng)的權(quán)限域名服務(wù)器宝鼓,用來保存該區(qū)中的所有主機(jī)到域名IP地址的映射刑棵。總之愚铡,DNS服務(wù)器的管轄范圍不是以“域”為單位蛉签,而是以“區(qū)”為單位。區(qū)是DNS服務(wù)器實(shí)際管轄的范圍沥寥。區(qū) <= 域碍舍。
因特網(wǎng)上的DNS服務(wù)器也是按照層次安排的。每一個(gè)域名服務(wù)器只對域名體系中的一部分進(jìn)行管轄营曼。根據(jù)域名服務(wù)器所起的作用乒验,可以把域名服務(wù)器劃分為下面四種不同的類型。
- 根域名服務(wù)器:最高層次的蒂阱,也是最重要的域名服務(wù)器锻全。所有的根域名服務(wù)器都知道所有的頂級域名服務(wù)器的域名和IP地址。不管是哪一個(gè)本地域名服務(wù)器录煤,若要對因特網(wǎng)上任何一個(gè)域名進(jìn)行解析鳄厌,只要自己無法解析,就首先求助根域名服務(wù)器妈踊。假定所有的根域名服務(wù)器都癱瘓了了嚎,那么整個(gè)DNS系統(tǒng)就無法工作。很多情況下廊营,根域名服務(wù)器并不直接把待查詢的域名直接解析出IP地址歪泳,而是告訴本地域名服務(wù)器下一步應(yīng)當(dāng)找哪一個(gè)頂級域名服務(wù)器進(jìn)行查詢。
- 頂級域名服務(wù)器:負(fù)責(zé)管理在該頂級域名服務(wù)器注冊的二級域名露筒。
- 權(quán)限域名服務(wù)器:負(fù)責(zé)一個(gè)“區(qū)”的域名服務(wù)器呐伞。
- 本地域名服務(wù)器:本地服務(wù)器不屬于下圖的域名服務(wù)器的層次結(jié)構(gòu),但是它對域名系統(tǒng)非常重要慎式。當(dāng)一個(gè)主機(jī)發(fā)出DNS查詢請求時(shí)伶氢,這個(gè)查詢請求報(bào)文就發(fā)送給本地域名服務(wù)器。
5.3 域名的解析過程
主機(jī)向本地域名服務(wù)器的查詢一般都是采用遞歸查詢瘪吏。所謂遞歸查詢就是:如果主機(jī)所詢問的本地域名服務(wù)器不知道被查詢的域名的IP地址癣防,那么本地域名服務(wù)器就以DNS客戶的身份,向其它根域名服務(wù)器繼續(xù)發(fā)出查詢請求報(bào)文(即替主機(jī)繼續(xù)查詢)掌眠,而不是讓主機(jī)自己進(jìn)行下一步查詢蕾盯。因此,遞歸查詢返回的查詢結(jié)果或者是所要查詢的IP地址蓝丙,或者是報(bào)錯(cuò)级遭,表示無法查詢到所需的IP地址香嗓。
本地域名服務(wù)器向根域名服務(wù)器的查詢的迭代查詢。迭代查詢的特點(diǎn):當(dāng)根域名服務(wù)器收到本地域名服務(wù)器發(fā)出的迭代查詢請求報(bào)文時(shí)装畅,要么給出所要查詢的IP地址,要么告訴本地服務(wù)器:“你下一步應(yīng)當(dāng)向哪一個(gè)域名服務(wù)器進(jìn)行查詢”沧烈。然后讓本地服務(wù)器進(jìn)行后續(xù)的查詢掠兄。根域名服務(wù)器通常是把自己知道的頂級域名服務(wù)器的IP地址告訴本地域名服務(wù)器,讓本地域名服務(wù)器再向頂級域名服務(wù)器查詢锌雀。頂級域名服務(wù)器在收到本地域名服務(wù)器的查詢請求后蚂夕,要么給出所要查詢的IP地址,要么告訴本地服務(wù)器下一步應(yīng)當(dāng)向哪一個(gè)權(quán)限域名服務(wù)器進(jìn)行查詢腋逆。最后婿牍,知道了所要解析的IP地址或報(bào)錯(cuò),然后把這個(gè)結(jié)果返回給發(fā)起查詢的主機(jī)惩歉。
下面舉一個(gè)例子演示整個(gè)查詢過程:
假定域名為m.xyz.com的主機(jī)想知道另一個(gè)主機(jī)y.abc.com的IP地址等脂。例如,主機(jī)m.xyz.com打算發(fā)送郵件給y.abc.com撑蚌。這時(shí)就必須知道主機(jī)y.abc.com的IP地址上遥。下面是上圖a的幾個(gè)查詢步驟:
- 主機(jī)m.abc.com先向本地服務(wù)器dns.xyz.com進(jìn)行遞歸查詢。
- 本地服務(wù)器采用迭代查詢争涌。它先向一個(gè)根域名服務(wù)器查詢粉楚。
- 根域名服務(wù)器告訴本地服務(wù)器,下一次應(yīng)查詢的頂級域名服務(wù)器dns.com的IP地址亮垫。
- 本地域名服務(wù)器向頂級域名服務(wù)器dns.com進(jìn)行查詢模软。
- 頂級域名服務(wù)器dns.com告訴本地域名服務(wù)器,下一步應(yīng)查詢的權(quán)限服務(wù)器dns.abc.com的IP地址饮潦。
- 本地域名服務(wù)器向權(quán)限域名服務(wù)器dns.abc.com進(jìn)行查詢燃异。
- 權(quán)限域名服務(wù)器dns.abc.com告訴本地域名服務(wù)器,所查詢的主機(jī)的IP地址害晦。
- 本地域名服務(wù)器最后把查詢結(jié)果告訴m.xyz.com特铝。
整個(gè)查詢過程共用到了8個(gè)UDP報(bào)文。
為了提高DNS查詢效率壹瘟,并減輕服務(wù)器的負(fù)荷和減少因特網(wǎng)上的DNS查詢報(bào)文數(shù)量鲫剿,在域名服務(wù)器中廣泛使用了高速緩存,用來存放最近查詢過的域名以及從何處獲得域名映射信息的記錄稻轨。例如灵莲,在上面的查詢過程中,如果在m.xyz.com的主機(jī)上不久前已經(jīng)有用戶查詢過y.abc.com的IP地址殴俱,那么本地域名服務(wù)器就不必向根域名服務(wù)器重新查詢y.abc.com的IP地址政冻,而是直接把告訴緩存中存放的上次查詢結(jié)果(即y.abc.com的IP地址)告訴用戶枚抵。
6. 面試題精選
例題1:TCP和UDP有什么區(qū)別?
TCP是傳輸控制協(xié)議明场,提供的是面向連接汽摹、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器批次交換數(shù)據(jù)前苦锨,必須建立TCP連接之后才能傳輸數(shù)據(jù)逼泣。TCP提供超時(shí)重傳、丟棄重復(fù)數(shù)據(jù)舟舒、流量控制等功能拉庶,保證數(shù)據(jù)能從一端傳到另一端。
UDP是用戶數(shù)據(jù)報(bào)協(xié)議秃励,是一個(gè)簡單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議氏仗。UDP不提供可靠性,不保證數(shù)據(jù)能夠到達(dá)目的地夺鲜。由于UDP在傳輸數(shù)據(jù)前不用在客戶和服務(wù)器之間建立連接皆尔,且沒有超時(shí)重傳等機(jī)制,故而傳輸速度很快谣旁。
例題2:TCP的可靠性如何保證床佳?
TCP的可靠性是通過順序編號和確認(rèn)(ACK)來實(shí)現(xiàn)的。
例題3:在瀏覽器中輸入www.baidu.com后執(zhí)行的全部過程
- 客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48榄审,通過這個(gè)IP地址找到客戶端到服務(wù)器的路徑砌们。客戶端瀏覽器發(fā)起一個(gè)HTTP會話到220.161.27.48搁进,然后通過TCP進(jìn)行封裝數(shù)據(jù)包浪感,輸入到網(wǎng)絡(luò)層。
- 在客戶端的傳輸層饼问,把HTTP會話請求分成報(bào)文段影兽,添加源和目的端口,如服務(wù)器使用80端口監(jiān)聽客戶端的請求莱革,客戶端由系統(tǒng)隨機(jī)選擇一個(gè)端口如5000峻堰,與服務(wù)器進(jìn)行交換,服務(wù)器把相應(yīng)的請求返回給客戶端的5000端口盅视。然后使用IP層的IP地址查找目的端捐名。
- 客戶端的網(wǎng)絡(luò)層不用關(guān)系應(yīng)用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達(dá)服務(wù)器闹击,期間可能經(jīng)過多個(gè)路由器镶蹋,這些都是由路由器來完成的工作,我不作過多的描述,無非就是通過查找路由表決定通過那個(gè)路徑到達(dá)服務(wù)器贺归。
- 客戶端的鏈路層淆两,包通過鏈路層發(fā)送到路由器,通過鄰居協(xié)議查找給定IP地址的MAC地址拂酣,然后發(fā)送ARP請求查找目的地址秋冰,如果得到回應(yīng)后就可以使用ARP的請求應(yīng)答交換的IP數(shù)據(jù)包現(xiàn)在就可以傳輸了,然后發(fā)送IP數(shù)據(jù)包到達(dá)服務(wù)器的地址婶熬。
例題4:诺ち客網(wǎng)由于訪問客戶量的增長,原來的服務(wù)器不足以維持請求,經(jīng)常發(fā)生宕機(jī)的突發(fā)情況,因此為了解決這個(gè)問題,CEO決定新增加幾臺服務(wù)器,那么問題是這些接入WEB服務(wù)器第一次被訪問到時(shí),不同協(xié)議的發(fā)生順序是下面中的(ARP -> DNS -> HTTP)尸诽。
解析:當(dāng)你給WEB服務(wù)器接上網(wǎng)線的時(shí)候,它會自動發(fā)送一條ARP信息盯另,使得接入網(wǎng)關(guān)能找的到它性含;網(wǎng)關(guān)上會形成一條MAC地址到IP地址的映射記錄。如用戶在瀏覽器中輸入域名鸳惯,如本地DNS緩存中沒有商蕴,必然會進(jìn)行一次DNS查詢,以確定該域名的IP地址芝发。獲得DNS對應(yīng)的IP地址以后绪商,使用HTTP協(xié)議訪問web服務(wù)器(不考慮TCP三次握手建立連接的階段)。
例題5:將一個(gè)C類網(wǎng)絡(luò)劃分為3個(gè)子網(wǎng)辅鲸,每個(gè)子網(wǎng)最少要容納55臺主機(jī)格郁,使用的子網(wǎng)掩碼是?(2017樂視實(shí)習(xí)生)
答:255.255.255.192
例題5:IP路由表包括哪幾項(xiàng)內(nèi)容独悴?
IP路由表通常包括三項(xiàng)內(nèi)容例书,他們是子網(wǎng)掩碼、目的網(wǎng)絡(luò)地址刻炒、到目的網(wǎng)絡(luò)路徑上“下一個(gè)”路由器的地址决采。