計算機網(wǎng)絡學習的核心內(nèi)容就是網(wǎng)絡協(xié)議的學習鸵赫。網(wǎng)絡協(xié)議是為計算機網(wǎng)絡中進行數(shù)據(jù)交換而建立的規(guī)則、標準或者說是約定的集合躏升。因為不同用戶的數(shù)據(jù)終端可能采取的字符集是不同的辩棒,兩者需要進行通信,必須要在一定的標準上進行。一個很形象地比喻就是我們的語言一睁,我們大天朝地廣人多钻弄,地方性語言也非常豐富,而且方言之間差距巨大者吁。A地區(qū)的方言可能B地區(qū)的人根本無法接受窘俺,所以我們要為全國人名進行溝通建立一個語言標準,這就是我們的普通話的作用复凳。同樣瘤泪,放眼全球,我們與外國友人溝通的標準語言是英語育八,所以我們才要苦逼的學習英語对途。
計算機網(wǎng)絡協(xié)議同我們的語言一樣,多種多樣髓棋。而ARPA公司與1977年到1979年推出了一種名為ARPANET的網(wǎng)絡協(xié)議受到了廣泛的熱捧实檀,其中最主要的原因就是它推出了人盡皆知的TCP/IP標準網(wǎng)絡協(xié)議。目前TCP/IP協(xié)議已經(jīng)成為Internet中的“通用語言”按声,下圖為不同計算機群之間利用TCP/IP進行通信的示意圖膳犹。
1. 網(wǎng)絡層次劃分
為了使不同計算機廠家生產(chǎn)的計算機能夠相互通信,以便在更大的范圍內(nèi)建立計算機網(wǎng)絡签则,國際標準化組織(ISO)在1978年提出了“開放系統(tǒng)互聯(lián)參考模型”须床,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它將計算機網(wǎng)絡體系結構的通信協(xié)議劃分為七層怀愧,自下而上依次為:物理層(Physics Layer)侨颈、數(shù)據(jù)鏈路層(Data Link Layer)余赢、網(wǎng)絡層(Network Layer)芯义、傳輸層(Transport Layer)、會話層(Session Layer)妻柒、表示層(Presentation Layer)扛拨、應用層(Application Layer)。 其中第四層完成數(shù)據(jù)傳送服務举塔,上面三層面向用戶绑警。
除了標準的OSI七層模型以外,常見的網(wǎng)絡層次劃分還有TCP/IP四層協(xié)議以及TCP/IP五層協(xié)議央渣,它們之間的對應關系如下圖所示:
2. OSI七層網(wǎng)絡模型
TCP/IP協(xié)議毫無疑問是互聯(lián)網(wǎng)的基礎協(xié)議计盒,沒有它就根本不可能上網(wǎng),任何和互聯(lián)網(wǎng)有關的操作都離不開TCP/IP協(xié)議芽丹。不管是OSI七層模型還是TCP/IP的四層北启、五層模型,每一層中都要自己的專屬協(xié)議,完成自己相應的工作以及與上下層級之間進行溝通咕村。由于OSI七層模型為網(wǎng)絡的標準層次劃分场钉,所以我們以OSI七層模型為例從下向上進行一一介紹。
1)物理層(Physical Layer)
激活懈涛、維持逛万、關閉通信端點之間的機械特性、電氣特性批钠、功能特性以及過程特性宇植。該層為上層協(xié)議提供了一個傳輸數(shù)據(jù)的可靠的物理媒體。簡單的說埋心,物理層確保原始的數(shù)據(jù)可在各種物理媒體上傳輸当纱。物理層記住兩個重要的設備名稱,中繼器(Repeater踩窖,也叫放大器)和集線器坡氯。
2)數(shù)據(jù)鏈路層(Data Link Layer)
數(shù)據(jù)鏈路層在物理層提供的服務的基礎上向網(wǎng)絡層提供服務,其最基本的服務是將源自網(wǎng)絡層來的數(shù)據(jù)可靠地傳輸?shù)较噜徆?jié)點的目標機網(wǎng)絡層洋腮。為達到這一目的箫柳,數(shù)據(jù)鏈路必須具備一系列相應的功能,主要有:如何將數(shù)據(jù)組合成數(shù)據(jù)塊啥供,在數(shù)據(jù)鏈路層中稱這種數(shù)據(jù)塊為幀(frame)悯恍,幀是數(shù)據(jù)鏈路層的傳送單位;如何控制幀在物理信道上的傳輸伙狐,包括如何處理傳輸差錯涮毫,如何調(diào)節(jié)發(fā)送速率以使與接收方相匹配;以及在兩個網(wǎng)絡實體之間提供數(shù)據(jù)鏈路通路的建立贷屎、維持和釋放的管理罢防。數(shù)據(jù)鏈路層在不可靠的物理介質(zhì)上提供可靠的傳輸。該層的作用包括:物理地址尋址唉侄、數(shù)據(jù)的成幀咒吐、流量控制、數(shù)據(jù)的檢錯属划、重發(fā)等恬叹。
有關數(shù)據(jù)鏈路層的重要知識點:
1> 數(shù)據(jù)鏈路層為網(wǎng)絡層提供可靠的數(shù)據(jù)傳輸;
2> 基本數(shù)據(jù)單位為幀同眯;
3> 主要的協(xié)議:以太網(wǎng)協(xié)議绽昼;
4> 兩個重要設備名稱:網(wǎng)橋和交換機。
3)網(wǎng)絡層(Network Layer)
網(wǎng)絡層的目的是實現(xiàn)兩個端系統(tǒng)之間的數(shù)據(jù)透明傳送须蜗,具體功能包括尋址和路由選擇硅确、連接的建立肿孵、保持和終止等。它提供的服務使傳輸層不需要了解網(wǎng)絡中的數(shù)據(jù)傳輸和交換技術疏魏。如果您想用盡量少的詞來記住網(wǎng)絡層停做,那就是“路徑選擇、路由及邏輯尋址”大莫。
網(wǎng)絡層中涉及眾多的協(xié)議蛉腌,其中包括最重要的協(xié)議,也是TCP/IP的核心協(xié)議——IP協(xié)議只厘。IP協(xié)議非常簡單烙丛,僅僅提供不可靠、無連接的傳送服務羔味。IP協(xié)議的主要功能有:無連接數(shù)據(jù)報傳輸河咽、數(shù)據(jù)報路由選擇和差錯控制。與IP協(xié)議配套使用實現(xiàn)其功能的還有地址解析協(xié)議ARP赋元、逆地址解析協(xié)議RARP忘蟹、因特網(wǎng)報文協(xié)議ICMP、因特網(wǎng)組管理協(xié)議IGMP搁凸。具體的協(xié)議我們會在接下來的部分進行總結媚值,有關網(wǎng)絡層的重點為:
1> 網(wǎng)絡層負責對子網(wǎng)間的數(shù)據(jù)包進行路由選擇。此外护糖,網(wǎng)絡層還可以實現(xiàn)擁塞控制褥芒、網(wǎng)際互連等功能;
2> 基本數(shù)據(jù)單位為IP數(shù)據(jù)報嫡良;
3> 包含的主要協(xié)議:
IP協(xié)議(Internet Protocol锰扶,因特網(wǎng)互聯(lián)協(xié)議);
ICMP協(xié)議(Internet Control Message Protocol,因特網(wǎng)控制報文協(xié)議);
ARP協(xié)議(Address Resolution Protocol寝受,地址解析協(xié)議);
RARP協(xié)議(Reverse Address Resolution Protocol坷牛,逆地址解析協(xié)議)。
4> 重要的設備:路由器羡蛾。
4)傳輸層(Transport Layer)
第一個端到端漓帅,即主機到主機的層次锨亏。傳輸層負責將上層數(shù)據(jù)分段并提供端到端的痴怨、可靠的或不可靠的傳輸。此外器予,傳輸層還要處理端到端的差錯控制和流量控制問題浪藻。
傳輸層的任務是根據(jù)通信子網(wǎng)的特性,最佳的利用網(wǎng)絡資源乾翔,為兩個端系統(tǒng)的會話層之間爱葵,提供建立施戴、維護和取消傳輸連接的功能,負責端到端的可靠數(shù)據(jù)傳輸萌丈。在這一層赞哗,信息傳送的協(xié)議數(shù)據(jù)單元稱為段或報文。
網(wǎng)絡層只是根據(jù)網(wǎng)絡地址將源結點發(fā)出的數(shù)據(jù)包傳送到目的結點辆雾,而傳輸層則負責將數(shù)據(jù)可靠地傳送到相應的端口肪笋。
有關網(wǎng)絡層的重點:
1> 傳輸層負責將上層數(shù)據(jù)分段并提供端到端的、可靠的或不可靠的傳輸以及端到端的差錯控制和流量控制問題度迂;
2> 包含的主要協(xié)議:TCP協(xié)議(Transmission Control Protocol藤乙,傳輸控制協(xié)議)、UDP協(xié)議(User Datagram Protocol惭墓,用戶數(shù)據(jù)報協(xié)議)坛梁;
3> 重要設備:網(wǎng)關。
5)會話層
會話層管理主機之間的會話進程腊凶,即負責建立划咐、管理、終止進程之間的會話钧萍。會話層還利用在數(shù)據(jù)中插入校驗點來實現(xiàn)數(shù)據(jù)的同步尖殃。
6)表示層
表示層對上層數(shù)據(jù)或信息進行變換以保證一個主機應用層信息可以被另一個主機的應用程序理解。表示層的數(shù)據(jù)轉(zhuǎn)換包括數(shù)據(jù)的加密划煮、壓縮送丰、格式轉(zhuǎn)換等。
7)應用層
為操作系統(tǒng)或網(wǎng)絡應用程序提供訪問網(wǎng)絡服務的接口弛秋。
會話層器躏、表示層和應用層重點:
1> 數(shù)據(jù)傳輸基本單位為報文;
2> 包含的主要協(xié)議:FTP(文件傳送協(xié)議)蟹略、Telnet(遠程登錄協(xié)議)登失、DNS(域名解析協(xié)議)、SMTP(郵件傳送協(xié)議)挖炬,POP3協(xié)議(郵局協(xié)議)揽浙,HTTP協(xié)議(Hyper Text Transfer Protocol)。
3. IP地址
1)網(wǎng)絡地址
IP地址由網(wǎng)絡號(包括子網(wǎng)號)和主機號組成意敛,網(wǎng)絡地址的主機號為全0馅巷,網(wǎng)絡地址代表著整個網(wǎng)絡。
2)廣播地址
廣播地址通常稱為直接廣播地址草姻,是為了區(qū)分受限廣播地址钓猬。
廣播地址與網(wǎng)絡地址的主機號正好相反,廣播地址中撩独,主機號為全1敞曹。當向某個網(wǎng)絡的廣播地址發(fā)送消息時账月,該網(wǎng)絡內(nèi)的所有主機都能收到該廣播消息。
3)組播地址
D類地址就是組播地址澳迫。
先回憶下A局齿,B,C橄登,D類地址吧:
A類地址以0開頭项炼,第一個字節(jié)作為網(wǎng)絡號,地址范圍為:0.0.0.0~127.255.255.255示绊;(modified @2016.05.31)
B類地址以10開頭锭部,前兩個字節(jié)作為網(wǎng)絡號,地址范圍是:128.0.0.0~191.255.255.255;
C類地址以110開頭面褐,前三個字節(jié)作為網(wǎng)絡號拌禾,地址范圍是:192.0.0.0~223.255.255.255。
D類地址以1110開頭展哭,地址范圍是224.0.0.0~239.255.255.255湃窍,D類地址作為組播地址(一對多的通信);
E類地址以1111開頭匪傍,地址范圍是240.0.0.0~255.255.255.255您市,E類地址為保留地址,供以后使用役衡。
注:只有A,B,C有網(wǎng)絡號和主機號之分茵休,D類地址和E類地址沒有劃分網(wǎng)絡號和主機號。
4)255.255.255.255
該IP地址指的是受限的廣播地址手蝎。受限廣播地址與一般廣播地址(直接廣播地址)的區(qū)別在于榕莺,受限廣播地址只能用于本地網(wǎng)絡,路由器不會轉(zhuǎn)發(fā)以受限廣播地址為目的地址的分組棵介;一般廣播地址既可在本地廣播钉鸯,也可跨網(wǎng)段廣播。例如:主機192.168.1.1/30上的直接廣播數(shù)據(jù)包后邮辽,另外一個網(wǎng)段192.168.1.5/30也能收到該數(shù)據(jù)報唠雕;若發(fā)送受限廣播數(shù)據(jù)報,則不能收到吨述。
注:一般的廣播地址(直接廣播地址)能夠通過某些路由器(當然不是所有的路由器)岩睁,而受限的廣播地址不能通過路由器。
5)0.0.0.0
常用于尋找自己的IP地址锐极,例如在我們的RARP笙僚,BOOTP和DHCP協(xié)議中,若某個未知IP地址的無盤機想要知道自己的IP地址灵再,它就以255.255.255.255為目的地址肋层,向本地范圍(具體而言是被各個路由器屏蔽的范圍內(nèi))的服務器發(fā)送IP請求分組。
6)回環(huán)地址
127.0.0.0/8被用作回環(huán)地址翎迁,回環(huán)地址表示本機的地址栋猖,常用于對本機的測試,用的最多的是127.0.0.1汪榔。
7)A蒲拉、B、C類私有地址
私有地址(private address)也叫專用地址痴腌,它們不會在全球使用雌团,只具有本地意義。
A類私有地址:10.0.0.0/8士聪,范圍是:10.0.0.0~10.255.255.255
B類私有地址:172.16.0.0/12锦援,范圍是:172.16.0.0~172.31.255.255
C類私有地址:192.168.0.0/16,范圍是:192.168.0.0~192.168.255.255
4. 子網(wǎng)掩碼及網(wǎng)絡劃分
隨著互連網(wǎng)應用的不斷擴大剥悟,原先的IPv4的弊端也逐漸暴露出來灵寺,即網(wǎng)絡號占位太多,而主機號位太少区岗,所以其能提供的主機地址也越來越稀缺略板,目前除了使用NAT在企業(yè)內(nèi)部利用保留地址自行分配以外,通常都對一個高類別的IP地址進行再劃分慈缔,以形成多個子網(wǎng)叮称,提供給不同規(guī)模的用戶群使用。
這里主要是為了在網(wǎng)絡分段情況下有效地利用IP地址藐鹤,通過對主機號的高位部分取作為子網(wǎng)號颅拦,從通常的網(wǎng)絡位界限中擴展或壓縮子網(wǎng)掩碼,用來創(chuàng)建某類地址的更多子網(wǎng)教藻。但創(chuàng)建更多的子網(wǎng)時距帅,在每個子網(wǎng)上的可用主機地址數(shù)目會比原先減少。
什么是子網(wǎng)掩碼括堤?
子網(wǎng)掩碼是標志兩個IP地址是否同屬于一個子網(wǎng)的碌秸,也是32位二進制地址,其每一個為1代表該位是網(wǎng)絡位悄窃,為0代表主機位讥电。它和IP地址一樣也是使用點式十進制來表示的。如果兩個IP地址在子網(wǎng)掩碼的按位與的計算下所得結果相同轧抗,即表明它們共屬于同一子網(wǎng)中恩敌。
在計算子網(wǎng)掩碼時,我們要注意IP地址中的保留地址横媚,即“ 0”地址和廣播地址纠炮,它們是指主機地址或網(wǎng)絡地址全為“ 0”或“ 1”時的IP地址月趟,它們代表著本網(wǎng)絡地址和廣播地址,一般是不能被計算在內(nèi)的恢口。
子網(wǎng)掩碼的計算:
對于無須再劃分成子網(wǎng)的IP地址來說孝宗,其子網(wǎng)掩碼非常簡單,即按照其定義即可寫出:如某B類IP地址為 10.12.3.0耕肩,無須再分割子網(wǎng)因妇,則該IP地址的子網(wǎng)掩碼255.255.0.0。如果它是一個C類地址猿诸,則其子網(wǎng)掩碼為 255.255.255.0婚被。其它類推,不再詳述梳虽。下面我們關鍵要介紹的是一個IP地址址芯,還需要將其高位主機位再作為劃分出的子網(wǎng)網(wǎng)絡號,剩下的是每個子網(wǎng)的主機號怖辆,這時該如何進行每個子網(wǎng)的掩碼計算是复。
下面總結一下有關子網(wǎng)掩碼和網(wǎng)絡劃分常見的面試考題:
1)利用子網(wǎng)數(shù)來計算
在求子網(wǎng)掩碼之前必須先搞清楚要劃分的子網(wǎng)數(shù)目,以及每個子網(wǎng)內(nèi)的所需主機數(shù)目竖螃。
(1) 將子網(wǎng)數(shù)目轉(zhuǎn)化為二進制來表示;
如欲將B類IP地址168.195.0.0劃分成27個子網(wǎng):27=11011淑廊;
(2) 取得該二進制的位數(shù),為N特咆;
該二進制為五位數(shù)季惩,N = 5
(3) 取得該IP地址的類子網(wǎng)掩碼,將其主機地址部分的的前N位置1即得出該IP地址劃分子網(wǎng)的子網(wǎng)掩碼腻格。
將B類地址的子網(wǎng)掩碼255.255.0.0的主機地址前5位置 1画拾,得到 255.255.248.0
2)利用主機數(shù)來計算
如欲將B類IP地址168.195.0.0劃分成若干子網(wǎng),每個子網(wǎng)內(nèi)有主機700臺:
(1) 將主機數(shù)目轉(zhuǎn)化為二進制來表示菜职;
700=1010111100青抛;
(2) 如果主機數(shù)小于或等于254(注意去掉保留的兩個IP地址),則取得該主機的二進制位數(shù)酬核,為N蜜另,這里肯定 N<8。如果大于254嫡意,則 N>8举瑰,這就是說主機地址將占據(jù)不止8位;
該二進制為十位數(shù)蔬螟,N=10此迅;
(3) 使用255.255.255.255來將該類IP地址的主機地址位數(shù)全部置1,然后從后向前的將N位全部置為 0,即為子網(wǎng)掩碼值耸序。
將該B類地址的子網(wǎng)掩碼255.255.0.0的主機地址全部置1忍些,得到255.255.255.255,然后再從后向前將后 10位置0,即為:11111111.11111111.11111100.00000000佑吝,即255.255.252.0坐昙。這就是該欲劃分成主機為700臺的B類IP地址 168.195.0.0的子網(wǎng)掩碼绳匀。
3)還有一種題型芋忿,要你根據(jù)每個網(wǎng)絡的主機數(shù)量進行子網(wǎng)地址的規(guī)劃和計算子網(wǎng)掩碼。這也可按上述原則進行計算疾棵。
比如一個子網(wǎng)有10臺主機戈钢,那么對于這個子網(wǎng)需要的IP地址是:
10+1+1+1=13
注意:加的第一個1是指這個網(wǎng)絡連接時所需的網(wǎng)關地址,接著的兩個1分別是指網(wǎng)絡地址和廣播地址是尔。
因為13小于16(16等于2的4次方)殉了,所以主機位為4位。而256-16=240拟枚,所以該子網(wǎng)掩碼為255.255.255.240薪铜。
如果一個子網(wǎng)有14臺主機,不少人常犯的錯誤是:依然分配具有16個地址空間的子網(wǎng)恩溅,而忘記了給網(wǎng)關分配地址隔箍。這樣就錯誤了,因為14+1+1+1=17脚乡,17大于16蜒滩,所以我們只能分配具有32個地址(32等于2的5次方)空間的子網(wǎng)。這時子網(wǎng)掩碼為:255.255.255.224奶稠。
5. ARP/RARP協(xié)議
地址解析協(xié)議俯艰,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議锌订。主機發(fā)送信息時將包含目標IP地址的ARP請求廣播到網(wǎng)絡上的所有主機竹握,并接收返回消息,以此確定目標的物理地址辆飘;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間啦辐,下次請求時直接查詢ARP緩存以節(jié)約資源。地址解析協(xié)議是建立在網(wǎng)絡中各個主機互相信任的基礎上的劈猪,網(wǎng)絡上的主機可以自主發(fā)送ARP應答消息昧甘,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發(fā)送偽ARP應答報文战得,使其發(fā)送的信息無法到達預期的主機或到達錯誤的主機充边,這就構成了一個ARP欺騙。ARP命令可用于查詢本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態(tài)對應關系等浇冰。
ARP工作流程舉例:
主機A的IP地址為192.168.1.1贬媒,MAC地址為0A-11-22-33-44-01;
主機B的IP地址為192.168.1.2肘习,MAC地址為0A-11-22-33-44-02际乘;
當主機A要與主機B通信時,地址解析協(xié)議可以將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址漂佩,以下為工作流程:
(1)根據(jù)主機A上的路由表內(nèi)容脖含,IP確定用于訪問主機B的轉(zhuǎn)發(fā)IP地址是192.168.1.2。然后A主機在自己的本地ARP緩存中檢查主機B的匹配MAC地址投蝉。
(2)如果主機A在ARP緩存中沒有找到映射养葵,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣播到本地網(wǎng)絡上的所有主機瘩缆。源主機A的IP地址和MAC地址都包括在ARP請求中关拒。本地網(wǎng)絡上的每臺主機都接收到ARP請求并且檢查是否與自己的IP地址匹配庸娱。如果主機發(fā)現(xiàn)請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。
(3)主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。
(4)主機B將包含其MAC地址的ARP回復消息直接發(fā)送回主機A。
(5)當主機A收到從主機B發(fā)來的ARP回復消息時,會用主機B的IP和MAC地址映射更新ARP緩存赘来。本機緩存是有生存期的幌缝,生存期結束后,將再次重復上面的過程甩挫。主機B的MAC地址一旦確定,主機A就能向主機B發(fā)送IP通信了法精。
逆地址解析協(xié)議,即RARP相味,功能和ARP協(xié)議相對斯碌,其將局域網(wǎng)中某個主機的物理地址轉(zhuǎn)換為IP地址,比如局域網(wǎng)中有一臺主機只知道物理地址而不知道IP地址瘩绒,那么可以通過RARP協(xié)議發(fā)出征求自身IP地址的廣播請求阳堕,然后由RARP服務器負責回答壹堰。
RARP協(xié)議工作流程:
(1)給主機發(fā)送一個本地的RARP廣播,在此廣播包中响蕴,聲明自己的MAC地址并且請求任何收到此請求的RARP服務器分配一個IP地址谆焊;
(2)本地網(wǎng)段上的RARP服務器收到此請求后,檢查其RARP列表浦夷,查找該MAC地址對應的IP地址辖试;
(3)如果存在,RARP服務器就給源主機發(fā)送一個響應數(shù)據(jù)包并將此IP地址提供給對方主機使用劈狐;
(4)如果不存在罐孝,RARP服務器對此不做任何的響應;
(5)源主機收到從RARP服務器的響應信息懈息,就利用得到的IP地址進行通訊肾档;如果一直沒有收到RARP服務器的響應信息,表示初始化失敗辫继。
6. 路由選擇協(xié)議
常見的路由選擇協(xié)議有:RIP協(xié)議怒见、OSPF協(xié)議。
RIP協(xié)議 :底層是貝爾曼福特算法姑宽,它選擇路由的度量標準(metric)是跳數(shù)遣耍,最大跳數(shù)是15跳,如果大于15跳炮车,它就會丟棄數(shù)據(jù)包舵变。
OSPF協(xié)議 :Open Shortest Path First開放式最短路徑優(yōu)先酣溃,底層是迪杰斯特拉算法,是鏈路狀態(tài)路由選擇協(xié)議纪隙,它選擇路由的度量標準是帶寬赊豌,延遲。
7. TCP/IP協(xié)議
TCP/IP協(xié)議是Internet最基本的協(xié)議绵咱、Internet國際互聯(lián)網(wǎng)絡的基礎碘饼,由網(wǎng)絡層的IP協(xié)議和傳輸層的TCP協(xié)議組成。通俗而言:TCP負責發(fā)現(xiàn)傳輸?shù)膯栴}悲伶,一有問題就發(fā)出信號艾恼,要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡佤镲薄6鳬P是給因特網(wǎng)的每一臺聯(lián)網(wǎng)設備規(guī)定一個地址钠绍。
IP層接收由更低層(網(wǎng)絡接口層例如以太網(wǎng)設備驅(qū)動程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層---TCP或UDP層花沉;相反柳爽,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包是不可靠的主穗,因為IP并沒有做任何事情來確認數(shù)據(jù)包是否按順序發(fā)送的或者有沒有被破壞泻拦,IP數(shù)據(jù)包中含有發(fā)送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
TCP是面向連接的通信協(xié)議忽媒,通過三次握手建立連接,通訊完成時要拆除連接腋粥,由于TCP是面向連接的所以只能用于端到端的通訊晦雨。TCP提供的是一種可靠的數(shù)據(jù)流服務,采用“帶重傳的肯定確認”技術來實現(xiàn)傳輸?shù)目煽啃园濉CP還采用一種稱為“滑動窗口”的方式進行流量控制闹瞧,所謂窗口實際表示接收能力,用以限制發(fā)送方的發(fā)送速度。
TCP報文首部格式:
TCP協(xié)議的三次握手和四次揮手:
注:seq:"sequance"序列號;ack:"acknowledge"確認號雅采;SYN:"synchronize"請求同步標志镣衡;;ACK:"acknowledge"確認標志"嗦嗡;FIN:"Finally"結束標志。
TCP連接建立過程:首先Client端發(fā)送連接請求報文,Server段接受連接后回復ACK報文蘸朋,并為這次連接分配資源。Client端接收到ACK報文后也向Server段發(fā)生ACK報文扣唱,并分配資源藕坯,這樣TCP連接就建立了团南。
TCP連接斷開過程:假設Client端發(fā)起中斷連接請求,也就是發(fā)送FIN報文炼彪。Server端接到FIN報文后吐根,意思是說"我Client端沒有數(shù)據(jù)要發(fā)給你了",但是如果你還有數(shù)據(jù)沒有發(fā)送完成辐马,則不必急著關閉Socket佑惠,可以繼續(xù)發(fā)送數(shù)據(jù)。所以你先發(fā)送ACK齐疙,"告訴Client端膜楷,你的請求我收到了,但是我還沒準備好贞奋,請繼續(xù)你等我的消息"赌厅。這個時候Client端就進入FIN_WAIT狀態(tài),繼續(xù)等待Server端的FIN報文轿塔。當Server端確定數(shù)據(jù)已發(fā)送完成特愿,則向Client端發(fā)送FIN報文,"告訴Client端勾缭,好了揍障,我這邊數(shù)據(jù)發(fā)完了,準備好關閉連接了"俩由。Client端收到FIN報文后毒嫡,"就知道可以關閉連接了,但是他還是不相信網(wǎng)絡幻梯,怕Server端不知道要關閉兜畸,所以發(fā)送ACK后進入TIME_WAIT狀態(tài),如果Server端沒有收到ACK則可以重傳碘梢∫б。“,Server端收到ACK后煞躬,"就知道可以斷開連接了"肛鹏。Client端等待了2MSL后依然沒有收到回復,則證明Server端已正常關閉恩沛,那好在扰,我Client端也可以關閉連接了。Ok复唤,TCP連接就這樣關閉了健田!
為什么要三次揮手?
在只有兩次“握手”的情形下佛纫,假設Client想跟Server建立連接妓局,但是卻因為中途連接請求的數(shù)據(jù)報丟失了总放,故Client端不得不重新發(fā)送一遍;這個時候Server端僅收到一個連接請求好爬,因此可以正常的建立連接局雄。但是,有時候Client端重新發(fā)送請求不是因為數(shù)據(jù)報丟失了存炮,而是有可能數(shù)據(jù)傳輸過程因為網(wǎng)絡并發(fā)量很大在某結點被阻塞了炬搭,這種情形下Server端將先后收到2次請求,并持續(xù)等待兩個Client請求向他發(fā)送數(shù)據(jù)...問題就在這里穆桂,Cient端實際上只有一次請求宫盔,而Server端卻有2個響應,極端的情況可能由于Client端多次重新發(fā)送請求數(shù)據(jù)而導致Server端最后建立了N多個響應在等待享完,因而造成極大的資源浪費灼芭!所以,“三次握手”很有必要般又!
為什么要四次揮手彼绷?
試想一下,假如現(xiàn)在你是客戶端你想斷開跟Server的所有連接該怎么做茴迁?第一步寄悯,你自己先停止向Server端發(fā)送數(shù)據(jù),并等待Server的回復堕义。但事情還沒有完猜旬,雖然你自身不往Server發(fā)送數(shù)據(jù)了,但是因為你們之前已經(jīng)建立好平等的連接了胳螟,所以此時他也有主動權向你發(fā)送數(shù)據(jù)昔馋;故Server端還得終止主動向你發(fā)送數(shù)據(jù),并等待你的確認糖耸。其實,說白了就是保證雙方的一個合約的完整執(zhí)行丘薛!
使用TCP的協(xié)議:FTP(文件傳輸協(xié)議)嘉竟、Telnet(遠程登錄協(xié)議)、SMTP(簡單郵件傳輸協(xié)議)洋侨、POP3(和SMTP相對舍扰,用于接收郵件)、HTTP協(xié)議等希坚。
8. UDP協(xié)議
UDP用戶數(shù)據(jù)報協(xié)議边苹,是面向無連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號和源端口號信息裁僧,由于通訊不需要連接个束,所以可以實現(xiàn)廣播發(fā)送慕购。 UDP通訊時不需要接收方確認,屬于不可靠的傳輸茬底,可能會出現(xiàn)丟包現(xiàn)象沪悲,實際應用中要求程序員編程驗證。
UDP與TCP位于同一層阱表,但它不管數(shù)據(jù)包的順序殿如、錯誤或重發(fā)。因此最爬,UDP不被應用于那些使用虛電路的面向連接的服務涉馁,UDP主要用于那些面向查詢---應答的服務,例如NFS爱致。相對于FTP或Telnet烤送,這些服務需要交換的信息量較小。
每個UDP報文分UDP報頭和UDP數(shù)據(jù)區(qū)兩部分蒜鸡。報頭由四個16位長(2字節(jié))字段組成胯努,分別說明該報文的源端口、目的端口逢防、報文長度以及校驗值叶沛。UDP報頭由4個域組成,其中每個域各占用2個字節(jié)忘朝,具體如下: 』沂稹(1)源端口號;
(2)目標端口號局嘁;
(3)數(shù)據(jù)報長度溉箕;
(4)校驗值。
使用UDP協(xié)議包括:TFTP(簡單文件傳輸協(xié)議)悦昵、SNMP(簡單網(wǎng)絡管理協(xié)議)肴茄、DNS(域名解析協(xié)議) 、 NFS但指、 BOOTP寡痰。
TCP 與 UDP 的區(qū)別:TCP是面向連接的,可靠的字節(jié)流服務棋凳;UDP是面向無連接的拦坠,不可靠的數(shù)據(jù)報服務。
9. DNS協(xié)議
DNS是域名系統(tǒng)(DomainNameSystem)的縮寫剩岳,該系統(tǒng)用于命名組織到域?qū)哟谓Y構中的計算機和網(wǎng)絡服務贞滨,可以簡單地理解為將URL轉(zhuǎn)換為IP地址。域名是由圓點分開一串單詞或縮寫組成的拍棕,每一個域名都對應一個惟一的IP地址晓铆,在Internet上域名與IP地址之間是一一對應的勺良,DNS就是進行域名解析的服務器。DNS命名用于Internet等TCP/IP網(wǎng)絡中尤蒿,通過用戶友好的名稱查找計算機和服務郑气。
10. NAT協(xié)議
NAT網(wǎng)絡地址轉(zhuǎn)換(Network Address Translation)屬接入廣域網(wǎng)(WAN)技術,是一種將私有(保留)地址轉(zhuǎn)化為合法IP地址的轉(zhuǎn)換技術腰池,它被廣泛應用于各種類型Internet接入方式和各種類型的網(wǎng)絡中尾组。原因很簡單,NAT不僅完美地解決了lP地址不足的問題示弓,而且還能夠有效地避免來自網(wǎng)絡外部的攻擊讳侨,隱藏并保護網(wǎng)絡內(nèi)部的計算機。
11. DHCP協(xié)議
DHCP動態(tài)主機設置協(xié)議(Dynamic Host Configuration Protocol)是一個局域網(wǎng)的網(wǎng)絡協(xié)議奏属,使用UDP協(xié)議工作跨跨,主要有兩個用途:給內(nèi)部網(wǎng)絡或網(wǎng)絡服務供應商自動分配IP地址,給用戶或者內(nèi)部網(wǎng)絡管理員作為對所有計算機作中央管理的手段囱皿。
12. HTTP協(xié)議
超文本傳輸協(xié)議(HTTP勇婴,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議。所有的WWW文件都必須遵守這個標準嘱腥。
HTTP 協(xié)議包括哪些請求耕渴?
GET:請求讀取由URL所標志的信息。
POST:給服務器添加信息(如注釋)齿兔。
PUT:在給定的URL下存儲一個文檔橱脸。
DELETE:刪除給定的URL所標志的資源。
HTTP 中分苇, POST 與 GET 的區(qū)別
1)Get是從服務器上獲取數(shù)據(jù)添诉,Post是向服務器傳送數(shù)據(jù)。
2)Get是把參數(shù)數(shù)據(jù)隊列加到提交表單的Action屬性所指向的URL中医寿,值和表單內(nèi)各個字段一一對應栏赴,在URL中可以看到。
3)Get傳送的數(shù)據(jù)量小靖秩,不能大于2KB艾帐;Post傳送的數(shù)據(jù)量較大,一般被默認為不受限制盆偿。
4)根據(jù)HTTP規(guī)范,GET用于信息獲取准浴,而且應該是安全的和冪等的事扭。
I. 所謂 安全的 意味著該操作用于獲取信息而非修改信息。換句話說乐横,GET請求一般不應產(chǎn)生副作用求橄。就是說今野,它僅僅是獲取資源信息,就像數(shù)據(jù)庫查詢一樣罐农,不會修改条霜,增加數(shù)據(jù),不會影響資源的狀態(tài)涵亏。
II. 冪等 的意味著對同一URL的多個請求應該返回同樣的結果宰睡。
13. 一個舉例
在瀏覽器中輸入 www.baidu.com 后執(zhí)行的全部過程
現(xiàn)在假設如果我們在客戶端(客戶端)瀏覽器中輸入http://www.baidu.com,而baidu.com為要訪問的服務器(服務器),下面詳細分析客戶端為了訪問服務器而執(zhí)行的一系列關于協(xié)議的操作:
1)客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48气筋,通過這個IP地址找到客戶端到服務器的路徑拆内。客戶端瀏覽器發(fā)起一個HTTP會話到220.161.27.48宠默,然后通過TCP進行封裝數(shù)據(jù)包麸恍,輸入到網(wǎng)絡層。
2)在客戶端的傳輸層搀矫,把HTTP會話請求分成報文段抹沪,添加源和目的端口,如服務器使用80端口監(jiān)聽客戶端的請求瓤球,客戶端由系統(tǒng)隨機選擇一個端口如5000融欧,與服務器進行交換,服務器把相應的請求返回給客戶端的5000端口冰垄。然后使用IP層的IP地址查找目的端蹬癌。
3)客戶端的網(wǎng)絡層不用關系應用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達服務器虹茶,期間可能經(jīng)過多個路由器逝薪,這些都是由路由器來完成的工作,不作過多的描述蝴罪,無非就是通過查找路由表決定通過那個路徑到達服務器董济。
4)客戶端的鏈路層,包通過鏈路層發(fā)送到路由器要门,通過鄰居協(xié)議查找給定IP地址的MAC地址虏肾,然后發(fā)送ARP請求查找目的地址,如果得到回應后就可以使用ARP的請求應答交換的IP數(shù)據(jù)包現(xiàn)在就可以傳輸了欢搜,然后發(fā)送IP數(shù)據(jù)包到達服務器的地址封豪。