五層協議
TCP/IP五層模型講解(2分)
我們將應用層,表示層,會話層並作應用層,從tcp/ip五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議
就理解了整個互聯網通信的原理。
首先,用戶感知到的只是最上面一層應用層,自上而下每層都依賴於下一層,所以我們從最下一層開始切入,比較好理解
每層都運行特定的協議,越往上越靠近用戶,越往下越靠近硬件
物理層(2分)
物理層由來:上面提到,孤立的計算機之間要想一起玩,就必須接入internet,言外之意就是計算機之間必須完成組網
物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字0
數據鏈路層(5分)
數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麽意思
數據鏈路層的功能:定義了電信號的分組方式
以太網協議:
早期的時候各個公司都有自己的分組方式,後來形成了統一的標準,即以太網協議ethernet
ethernet規定
- 一組電信號構成一個數據包,叫做‘幀’
- 每一數據幀分成:報頭head和數據data兩部分
head | data |
---|---|
head包含:(固定18個字節)
- 發送者/源地址,6個字節
- 接收者/目標地址,6個字節
- 數據類型,6個字節
data包含:(最短46字節,最長1500字節)
- 數據包的具體內容
head長度+data長度=最短64字節,最長1518字節,超過最大限制就分片發送
mac地址:
head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具備網卡,發送端和接收端的地址便是指網卡的地址,即mac地址
mac地址:每塊網卡出廠時都被燒制上一個世界唯一的mac地址,長度為48位2進制,通常由12位16進制數表示(前六位是廠商編號,後六位是流水線號)
廣播:
有了mac地址,同一網絡內的兩臺主機就可以通信了(一臺主機通過arp協議獲取另外一臺主機的mac地址)
ethernet采用最原始的方式,廣播的方式進行通信,即計算機通信基本靠吼
網絡層(40分)
網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就可以彼此通信了,問題是世界範圍的互聯網是由
一個個彼此隔離的小的局域網組成的,那麽如果所有的通信都采用以太網的廣播方式,那麽一臺機器發送的包全世界都會收到,
這就不僅僅是效率低的問題了,這會是一種災難
上圖結論:必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,如果是就采用廣播的方式發送,如果不是,
就采用路由的方式(向不同廣播域/子網分發數據包),mac地址是無法區分的,它只跟廠商有關
網絡層功能:引入一套新的地址用來區分不同的廣播域/子網,這套地址即網絡地址
IP協議:
- 規定網絡地址的協議叫ip協議,它定義的地址稱之為ip地址,廣泛采用的v4版本即ipv4,它規定網絡地址由32位2進制表示
- 範圍0.0.0.0-255.255.255.255
- 一個ip地址通常寫成四段十進制數,例:172.16.10.1
子網掩碼
所謂”子網掩碼”,就是表示子網絡特征的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP地址172.16.10.1,如果已知網絡部分是前24位,主機部分是後8位,那麽子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
子網掩碼是用來標識一個IP地址的哪些位是代表網絡位,以及哪些位是代表主機位。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成網絡地址和主機地址兩部分。
蒙蔽的你肯定想問,我要區分網絡位和主機位幹鬼用?
這就像寄信,你給你的南方姑娘寄信,她肉身在廈門,詳細地址是廈門鼓浪嶼三街27號,那網絡位就相當於城市,詳細地址就是主機位,網絡位幫你定位到城市,主機位幫你找到你的南方姑娘。 路由器通過子網掩碼來確定哪些是網絡位,哪些是主機位
區分網絡位和主機位是為了劃分子網,就是把一個大網絡分成多個小網絡,為什麽要分子網呢?
- 廣播風暴:6萬臺主機在一個網段裏,通信基本靠吼,任何一個人要吼一嗓子,6萬多個人必須被動聽著,一會你的網絡就癱瘓啦。
- 地址浪費:運營商在公網上有很多級聯的路由器,有時候2個路由器之間只會用掉幾個IP,如果不進行子網劃分,那同網段的其它主機也就都不能用了。舉例兩個級聯路由器的接口ip分別為222.34.24.12/24,222.34.24.13/24, 此可承載255個主機的網段只用了2個IP,那其它的就全浪費了,因為不能再分配給別人。
劃分子網本質上就是借主機位到給網絡位,每借一位主機位,這個網段的可分配主機就會越少,比如192.168.1.0/24可用主機255個,借一位變成192.168.1.0/25,那可用主機就從255-128=127個了(從最大的值開始借),再借一位192.168.1.0/26,那可用主機數就變成了255-(128+64)=63個啦
IP地址分類:
IP地址根據網絡ID的不同分為5種類型,A類地址、B類地址、C類地址、D類地址和E類地址。
- A類IP地址:一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是“0”, 地址範圍從1.0.0.0 到126.0.0.0。可用的A類網絡有126個,每個網絡能容納1億多個主機。
- B類IP地址 :一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是“10”,地址範圍從128.0.0.0到191.255.255.255。可用的B類網絡有16382個,每個網絡能容納6萬多個主機 。
- C類IP地址:一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是“110”。範圍從192.0.0.0到223.255.255.255。C類網絡可達209萬余個,每個網絡能容納254個主機。
- D類地址用於多點廣播(Multicast): D類IP地址第一個字節以“lll0”開始,它是一個專門保留的地址。它並不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。
- E類IP地址 以“llll0”開始,為將來使用保留。
全零(“0.0.0.0”)地址對應於當前主機。全“1”的IP地址(“255.255.255.255”)是當前子網的廣播地址。
回環地址(127.0.0.1) 又稱為本機地址,那它跟0.0.0.0是什麽區別呢?那得先了解回環接口
環回接口(loopback)。平時我們用127.0.0.1來嘗試自己的機器服務器好使不好使。走的就是這個loopback接口。對於環回接口,有如下三點值得註意:
- 傳給環回地址(一般是127.0.0.1)的任何數據均作為IP輸入。
- 傳給廣播地址或多播地址的數據報復制一份傳給環回接口,然後送到以太網上。這是 因為廣播傳送和多播傳送的定義包含主機本身。
- 任何傳給該主機IP地址的數據均送到環回接口。
IP報文
IP協議是TCP/IP協議的核心,所有的TCP,UDP,IMCP,IGCP的數據都以IP數據格式傳輸,要註意的是,IP不是可靠的協議,這是說,IP協議沒有提供一種數據未傳達以後的處理機制--這被認為是上層協議--TCP或UDP要做的事情。所以這也就出現了TCP是一個可靠的協議,而UDP就沒有那麽可靠的區別。這是後話,暫且不提。
IP協議頭
挨個解釋它是教科書的活計,我感興趣的只是那八位的TTL字段,還記得這個字段是做什麽的麽?這個字段規定該數據包在穿過多少個路由之後才會被拋棄(這裏就體現出來IP協議包的不可靠性,它不保證數據被送達),某個ip數據包每穿過一個路由器,該數據包的TTL數值就會減少1,當該數據包的TTL成為零,它就會被自動拋棄。這個字段的最大值也就是255,也就是說一個協議包也就在路由器裏面穿行255次就會被拋棄了,根據系統的不同,這個數字也不一樣,一般是32或者是64
ARP協議
arp協議由來:計算機通信基本靠吼,即廣播的方式,所有上層的包到最後都要封裝上以太網頭,然後通過以太網協議發送,在談及以太網協議時候,我門了解到
通信是基於mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就需要通過arp協議
arp協議功能:廣播的方式發送數據包,獲取目標主機的mac地址
協議工作方式:每臺主機ip都是已知的
例如:主機172.16.10.10/24訪問172.16.10.11/24
一:首先通過ip地址和子網掩碼區分出自己所處的子網
場景 | 數據包地址 |
---|---|
同一子網 | 目標主機mac,目標主機ip |
不同子網 | 網關mac,目標主機ip |
二:分析172.16.10.10/24與172.16.10.11/24處於同一網絡(如果不是同一網絡,那麽下表中目標ip為172.16.10.1,通過arp獲取的是網關的mac)
源mac | 目標mac | 源ip | 目標ip | 數據部分 | |
---|---|---|---|---|---|
發送端主機 | 發送端mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 數據 |
三:這個包會以廣播的方式在發送端所處的子網內傳輸,所有主機接收後拆開包,發現目標ip為自己的,就響應,返回自己的mac
查看本機arp表的命令
Alexs-MacBook-Pro:~ alex$ arp -a
? (192.168.0.3) at 0:21:cc:65:52:f0 on en4 ifscope [ethernet]
? (192.168.0.64) at 68:f7:28:d0:4b:21 on en4 ifscope [ethernet]
? (192.168.0.233) at 84:d9:31:3:ae:8b on en4 ifscope [ethernet]
? (192.168.0.254) at 60:da:83:be:c2:5a on en4 ifscope [ethernet]
? (192.168.0.255) at (incomplete) on en4 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en4 ifscope permanent [ethernet]
ICMP
前面講到了,IP協議並不是一個可靠的協議,它不保證數據被送達,那麽,自然的,保證數據送達的工作應該由其他的模塊來完成。其中一個重要的模塊就是ICMP(網絡控制報文)協議。
當傳送IP數據包發生錯誤--比如主機不可達,路由不可達等等,ICMP協議將會把錯誤信息封包,然後傳送回給主機。給主機一個處理錯誤的機會.
我們一般主要用ICMP協議檢測網絡是否通暢,基於ICMP協議的工具主要有ping 和traceroute
ping
Alexs-MacBook-Pro:~ alex$ ping www.baidu.com
PING www.a.shifen.com (111.13.100.91): 56 data bytes
64 bytes from 111.13.100.91: icmp_seq=0 ttl=54 time=6.563 ms
64 bytes from 111.13.100.91: icmp_seq=1 ttl=54 time=6.320 ms
64 bytes from 111.13.100.91: icmp_seq=2 ttl=54 time=6.698 ms
64 bytes from 111.13.100.91: icmp_seq=3 ttl=54 time=6.445 ms
^C
--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 6.320/6.506/6.698/0.140 ms
ping這個單詞源自聲納定位,而這個程序的作用也確實如此,它利用ICMP協議包來偵測另一個主機是否可達。原理是用類型碼為0的ICMP發請 求,受到請求的主機則用類型碼為8的ICMP回應。ping程序來計算間隔時間,並計算有多少個包被送達。用戶就可以判斷網絡大致的情況。我們可以看到, ping給出來了傳送的時間和TTL的數據。
traceroute
用來查看從當前主機到某地址一共經過多少跳路由
$ traceroute www.baidu.com
traceroute: Warning: www.baidu.com has multiple addresses; using 111.13.100.91
traceroute to www.a.shifen.com (111.13.100.91), 64 hops max, 52 byte packets
1 192.168.0.254 (192.168.0.254) 0.458 ms 0.274 ms 0.246 ms
2 122.71.64.1 (122.71.64.1) 2.006 ms 1.788 ms 1.626 ms
3 * 222.35.254.253 (222.35.254.253) 2.024 ms 2.243 ms
4 222.35.254.241 (222.35.254.241) 9.333 ms
61.233.9.50 (61.233.9.50) 4.960 ms
61.233.9.93 (61.233.9.93) 3.010 ms
5 61.237.2.202 (61.237.2.202) 3.442 ms 3.497 ms
......
傳輸層(15分)
傳輸層的由來:網絡層的ip幫我們區分子網,以太網層的mac幫我們找到主機,然後大家使用的都是應用程序,你的電腦上可能同時開啟qq,暴風影音,迅雷等多個應用程序,
那麽我們通過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程序呢?答案就是端口,端口即應用程序與網卡關聯的編號。
傳輸層功能:建立端口到端口的通信
補充:端口範圍0-65535,0-1023為系統占用端口
傳輸層有兩種協議,TCP和UDP,見下圖
tcp協議
可靠傳輸,TCP數據包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包不必再分割。
以太網頭 | ip 頭 | tcp頭 | 數據 |
---|---|---|---|
為什麽tcp是可靠的數據傳輸呢?
最可靠的方式就是只要不得到確認,就重新發送數據報,直到得到對方的確認為止。
tcp報文
tcp的3次握手和4四揮手
![image_1c1phb5ao10jb183v1l3i1psgo6037.png-281.7kB][17]
udp協議
不可靠傳輸,”報頭”部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
以太網頭 | ip頭 | udp頭 | 數據 |
---|---|---|---|
總結
TCP協議雖然安全性很高,但是網絡開銷大,而UDP協議雖然沒有提供安全機制,但是網絡開銷小,在現在這個網絡安全已經相對較高的情況下,為了保證傳輸的速率,我們一般還是會優先考慮UDP協議!
[17]: http://static.zybuluo.com/agocan/gbg90sa2fn94tkk3asobet6u/image_1c1phb5ao10jb183v1l3i1psgo6037.png
五層協議