互聯(lián)網(wǎng)協(xié)議
本文只為了自己記錄,加深理解,原文請看阮一峰老師的http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
N層通信模型
我在北京發(fā)了一條QQ消息筝蚕,為何隔了半個地球,在洛杉磯朋友能夠收到改橘,這就是互聯(lián)網(wǎng)通信.對于我和洛杉磯的朋友來說羡儿,我們接觸到的只是QQ這個應(yīng)用程序凤粗,但是真實的數(shù)據(jù)是轉(zhuǎn)化成0101發(fā)出去/接收到的仿滔,這就是應(yīng)用-->二進制-->通信-->二進制-->應(yīng)用的傳輸過程.
相比osi7層模型嘉裤,tcp/ip 4層模型,我更喜歡阮一峰老師的五層模型圖:
第一層 - 物理層
它就是把電腦連接起來的物理手段据过,作用是負責(zé)傳送0和1的電信號惋砂。例如:光纖,電纜
這就叫做"物理層",它就是把電腦連接起來的物理手段绳锅。它主要規(guī)定了網(wǎng)絡(luò)的一些電氣特性西饵,作用是負責(zé)傳送0和1的電信號。
第二層 - 數(shù)據(jù)鏈路層 - mac地址到mac地址
1.為何需要這層
單純的0和1沒有任何意義鳞芙,必須規(guī)定解讀方式:多少個電信號算一組眷柔?每個信號位有何意義?一種叫做"以太網(wǎng)"(Ethernet)的協(xié)議規(guī)定原朝,一組電信號構(gòu)成一個數(shù)據(jù)包驯嘱,叫做"幀"(Frame)。
這就是"數(shù)據(jù)鏈路層"的功能喳坠,它在"物理層"的上方鞠评,確定了0和1的分組方式。
2.幀的具體構(gòu)成
每一幀分成兩個部分:標頭(Head)和數(shù)據(jù)(Data)丙笋。
"標頭"包含數(shù)據(jù)包的一些說明項谢澈,比如發(fā)送者、接受者御板、數(shù)據(jù)類型等等锥忿;"數(shù)據(jù)"則是數(shù)據(jù)包的具體內(nèi)容。
"標頭"的長度怠肋,固定為18字節(jié)敬鬓。"數(shù)據(jù)"的長度,最短為46字節(jié)笙各,最長為1500字節(jié)钉答。因此,整個"幀"最短為64字節(jié)杈抢,最長為1518字節(jié)数尿。如果數(shù)據(jù)很長,就必須分割成多個幀進行發(fā)送惶楼。
3.mac地址(網(wǎng)卡地址)
A.mac地址用來作為接受/發(fā)送數(shù)據(jù)的唯一標識
以太網(wǎng)規(guī)定右蹦,連入網(wǎng)絡(luò)的所有設(shè)備,都必須具有"網(wǎng)卡"接口歼捐。數(shù)據(jù)包必須是從一塊網(wǎng)卡何陆,傳送到另一塊網(wǎng)卡。網(wǎng)卡的地址豹储,就是數(shù)據(jù)包的發(fā)送地址和接收地址贷盲,這叫做MAC地址
0和1組成的電信號分組,通過mac地址到mac地址的方式傳輸
B.mac地址
每塊網(wǎng)卡出廠的時候,都有一個全世界獨一無二(同一個廠商才唯一)的MAC地址剥扣,長度是48個二進制位巩剖,通常用12個十六進制數(shù)表示。
PS:MAC地址可不是世界上獨一無二的钠怯,只是其散列足夠大球及,使得在同一個子網(wǎng)中MAC地址碰巧相同的兩塊網(wǎng)卡幾率很小很小而已。
4.怎么發(fā)送數(shù)據(jù)出去--廣播
首先,需要知道對方的mac地址才能向?qū)Ψ桨l(fā)送數(shù)據(jù)包,這由ARP協(xié)議來解決
Q : 知道了地址之后,怎么發(fā)送給對方
A : 用廣播的方式發(fā)給所有網(wǎng)絡(luò)里的網(wǎng)卡(mac地址),接收方根據(jù)幀的head里面標識的接收方mac地址是否等于自己來判斷,一致就接收數(shù)據(jù),不一致就拋掉數(shù)據(jù)
比如,1號給2,3,4,5都發(fā)了數(shù)據(jù),但是幀head的接收方mac地址和2一致,所以3,4,5都拋棄了,只有2接受并處理了數(shù)據(jù).這個就叫廣播
新方法 緩存MAC地址
老式的的集線器(市面上已經(jīng)不存在了)才是這種廣播模式呻疹,現(xiàn)在交換機會記錄并緩存各個交換機端口連接的設(shè)備的MAC地址吃引,轉(zhuǎn)發(fā)包時會按緩存的地址表轉(zhuǎn)發(fā)到特定的交換機端口,除非地址表里面沒有目的MAC地址刽锤,不然不會廣播包的镊尺。
第三層 - 網(wǎng)絡(luò)層 - IP到IP
1.網(wǎng)絡(luò)層的由來
原因
mac地址能過廣播的方式,給當前同一個子網(wǎng)絡(luò)下的所有計算機發(fā)送了數(shù)據(jù)包,但是缺點是每一臺計算機都會收到一次包,并且廣播不能傳播到其他子網(wǎng)絡(luò)去,否則互聯(lián)網(wǎng)上每一臺計算機都會收到所有包,那會引起災(zāi)難并思。
作用
網(wǎng)絡(luò)層的作用是引進一套新的地址庐氮,使得我們能夠區(qū)分不同的計算機是否屬于同一個子網(wǎng)絡(luò)。這套地址就叫做"網(wǎng)絡(luò)地址"宋彼,簡稱"網(wǎng)址".
MAC地址 + 網(wǎng)址
每臺計算機有了兩種地址弄砍,一種是MAC地址仙畦,另一種是網(wǎng)絡(luò)地址。兩種地址之間沒有任何聯(lián)系音婶,MAC地址是綁定在網(wǎng)卡上的慨畸,網(wǎng)絡(luò)地址則是管理員分配的,它們只是隨機組合在一起衣式。網(wǎng)絡(luò)地址幫助我們確定計算機所在的子網(wǎng)絡(luò)寸士,MAC地址則將數(shù)據(jù)包送到該子網(wǎng)絡(luò)中的目標網(wǎng)卡。
2.IP協(xié)議
規(guī)定網(wǎng)絡(luò)地址的協(xié)議碴卧,叫做IP協(xié)議弱卡。作用主要有兩個,一個是為每一臺計算機分配IP地址住册,另一個是確定哪些地址在同一個子網(wǎng)絡(luò)(通過子網(wǎng)掩碼)婶博。
它所定義的地址,就被稱為IP地址荧飞。
IPv4
目前凡蜻,廣泛采用的是IP協(xié)議第四版,簡稱IPv4垢箕。這個版本規(guī)定划栓,網(wǎng)絡(luò)地址由32個二進制位組成。
IPv6 的誕生
(1)更大的地址空間
IPv4中規(guī)定IP地址長度為32条获,即有232-1個地址忠荞,也就是最多有2的32次方的電腦可以聯(lián)到Internet上;而IPv6中IP地址的長度為128帅掘,即有2128-1個地`址委煤。整個地球的每平方米面積上仍可分配1000多個地址
(2)更小的路由表
IPv6的地址分配一開始就遵循聚類(Aggregation)的原則,這使得路由器能在路由表中用一條記錄(Entry)表示一片子網(wǎng)修档,大大減小了路由器中路由表的長度碧绞,提高了路由器轉(zhuǎn)發(fā)數(shù)據(jù)包的速度。 增強的組播(Multicast)支持以及對流的支持(Flow-control)吱窝。
(3)對DHCP協(xié)議的改進和擴展
使得網(wǎng)絡(luò)(尤其是局域網(wǎng))的管理更加方便和快捷.
(4)更高的安全性
在使用IPv6網(wǎng)絡(luò)中用戶可以對網(wǎng)絡(luò)層的數(shù)據(jù)進行加密并對IP報文進行校驗,這極大的增強了網(wǎng)絡(luò)安全
子網(wǎng)掩碼
子網(wǎng)掩碼讥邻,就是表示子網(wǎng)絡(luò)特征的一個參數(shù)。就是掩去主機部分院峡,保留網(wǎng)絡(luò)部分
它在形式上等同于IP地址兴使,也是一個32位二進制數(shù)字,它的網(wǎng)絡(luò)部分全部為1照激,主機部分全部為0发魄。如果已知網(wǎng)絡(luò)部分是前24位,主機部分是后8位,那么子網(wǎng)絡(luò)掩碼就是11111111.11111111.11111111.00000000励幼,寫成十進制就是255.255.255.0
知道"子網(wǎng)掩碼"汰寓,我們就能判斷,任意兩個IP地址是否處在同一個子網(wǎng)絡(luò)苹粟。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1有滑,運算結(jié)果為1,否則為0)六水,然后比較結(jié)果是否相同俺孙,如果是的話辣卒,就表明它們在同一個子網(wǎng)絡(luò)中掷贾,否則就不是。
IP地址與子網(wǎng)掩碼進行“按位與”運算荣茫,得到網(wǎng)絡(luò)地址想帅。
例如:
第一個IP地址的網(wǎng)絡(luò)地址:172.16.254.233
換算成二進制格式: 10101100 00010000 11111110 11101001
掩碼地址255.255.255.0 換算成二進制格式: 11111111 11111111 11111111 00000000
你把它們逐位進行&運算, 就可以將最后的8位全部變?yōu)?, 而前24位數(shù)字不變. 得到10101100 00010000 11111110 00000000, 即172.16.254.0
第二個IP地址的網(wǎng)絡(luò)地址:172. 16.254.233& 255.255.255.0 = 172. 16.254.0
一致,所以是同一個子網(wǎng)絡(luò)
3.IP數(shù)據(jù)包
以太網(wǎng)協(xié)議每一個數(shù)據(jù)包包含"標頭"和data,ip數(shù)據(jù)包則是將以太網(wǎng)數(shù)據(jù)包的data進一步分成"標頭"和data.
"標頭"部分主要包括版本啡莉、長度港准、IP地址等信息,"數(shù)據(jù)"部分則是IP數(shù)據(jù)包的具體內(nèi)容咧欣。
4.ARP協(xié)議
也就是在同一個子網(wǎng)絡(luò)中發(fā)一個特殊包,該包包含目的IP地址,所有子網(wǎng)絡(luò)下的計算機收到包后,拿出其中的ip和本機ip對比,一致的話就將自己的mac地址包成一個包,發(fā)給詢問計算機.不一致就拋棄.
所以有了IP地址,可以將數(shù)據(jù)發(fā)給同一個網(wǎng)絡(luò)的任何一臺計算機.
第四層 - 傳輸層 - 端口到端口
1.由來
Q : 同一臺主機上有許多程序都需要用到網(wǎng)絡(luò)浅缸,比如,你一邊瀏覽網(wǎng)頁魄咕,一邊與朋友在線聊天衩椒。當一個數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)來的時候,你怎么知道哮兰,它是表示網(wǎng)頁的內(nèi)容毛萌,還是表示在線聊天的內(nèi)容?
A : 通過監(jiān)聽不同端口
端口
端口是每一個使用網(wǎng)卡的程序的編號喝滞。每個數(shù)據(jù)包都發(fā)到主機的特定端口阁将,所以不同的程序就能取到自己所需要的數(shù)據(jù)。
"端口"是0到65535之間的一個整數(shù)右遭,正好16個二進制位做盅。0到1023的端口被系統(tǒng)占用,用戶只能選用大于1023的端口窘哈。任何一個應(yīng)用程序都會隨機選用一個端口言蛇,然后與服務(wù)器的相應(yīng)端口聯(lián)系。
"傳輸層"的功能宵距,就是建立"端口到端口"的通信腊尚。相比之下,"網(wǎng)絡(luò)層"的功能是建立"主機到主機"的通信满哪。只要確定主機和端口婿斥,我們就能實現(xiàn)程序之間的交流劝篷。
socket
Unix系統(tǒng)就把主機+端口,叫做"套接字"(socket)民宿。
2.UDP協(xié)議
現(xiàn)在娇妓,我們必須在數(shù)據(jù)包中加入端口信息,UDP數(shù)據(jù)包活鹰,也是由"標頭"和"數(shù)據(jù)"兩部分組成哈恰。
"標頭"部分主要定義了發(fā)出端口和接收端口,"數(shù)據(jù)"部分就是具體的內(nèi)容志群。然后着绷,把整個UDP數(shù)據(jù)包放入IP數(shù)據(jù)包的"數(shù)據(jù)"部分,這時整個數(shù)據(jù)包如下
3.TCP協(xié)議
UDP協(xié)議的缺點是不知道對方是否收到了數(shù)據(jù),為了提高準確性,誕生了TCP。
這個協(xié)議可以近似認為锌云,它就是有確認機制的UDP協(xié)議荠医,但是過程復(fù)雜、實現(xiàn)困難桑涎、消耗較多的資源彬向,每發(fā)出一個數(shù)據(jù)包都要求確認。如果有一個數(shù)據(jù)包遺失攻冷,就收不到確認娃胆,發(fā)出方就知道有必要重發(fā)這個數(shù)據(jù)包了。
第五層 - 應(yīng)用層 - 應(yīng)用程序到應(yīng)用程序
"應(yīng)用層"的作用等曼,就是規(guī)定應(yīng)用程序的數(shù)據(jù)格式里烦。
舉例來說,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù)涉兽,比如Email招驴、WWW、FTP等等枷畏。那么别厘,必須有不同協(xié)議規(guī)定電子郵件、網(wǎng)頁拥诡、FTP數(shù)據(jù)的格式触趴,這些應(yīng)用程序協(xié)議
就構(gòu)成了應(yīng)用層
。
這是最高的一層渴肉,直接面對用戶冗懦。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的"數(shù)據(jù)"部分。因此仇祭,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣披蕉。