公司做兩個網(wǎng)站有影響嗎黃頁
文章目錄
- 1.基本概念
- 2.協(xié)議頭格式
- 3.網(wǎng)段劃分
- 4.特殊的IP地址
- 5.IP地址的數(shù)量限制
- 6.私有IP地址和公網(wǎng)IP地址
- 7.路由
1.基本概念
IP地址是定位主機的,具有一個將數(shù)據(jù)報從A主機跨網(wǎng)絡(luò)可靠的送到B主機的能力。
但是有能力就一定能做到嗎,只能說有很大的概率。
我們這里舉一個例子來說明TCP和IP分別扮演的角色
比如張三是一個數(shù)學(xué)可以考滿分能力的人,他的父親是教導(dǎo)主任,要求他數(shù)學(xué)比如每次考到滿分,但是張三偶爾還是會失誤沒有達到滿分,所以為了達到每次都考滿分的要求,他的父親選擇重考,直到張三考到滿分為止。在這個故事中張三的父親就扮演了TCP的角色,為IP提供策略,而張三扮演了IP的角色,用于執(zhí)行行動
主機: 配有IP地址, 但是不進行路由控制的設(shè)備; 路由器: 即配有IP地址, 又能進行路由控制; 節(jié)點: 主機和路由器的統(tǒng)稱;
IP:將數(shù)據(jù)從A主機跨網(wǎng)絡(luò)送到B主機,在這個過程中需要進行路徑選擇,在路徑選擇中目的IP非常重要,決定了我們的路徑如何走。
IP = 目標網(wǎng)絡(luò) + 目標主機
2.協(xié)議頭格式
1.如何將報頭和有效載荷分離,如何進行交互?
先提取前20個字節(jié),再獲取4為首部長度,基本單位是4字節(jié),和TCP一樣,IP的報文的范圍為[20,60]字節(jié),這樣就將報頭和有效數(shù)據(jù)進行了分離,8位協(xié)議決定了向上交互給哪一個協(xié)議。
4位版本號(version): 指定IP協(xié)議的版本, 對于IPv4來說, 就是4.
4位頭部長度(header length): IP頭部的長度是多少個32bit, 也就是 length * 4 的字節(jié)數(shù). 4bit表示最大的數(shù)字是15, 因此IP頭部最大長度是60字節(jié).
8位服務(wù)類型(Type Of Service): 3位優(yōu)先權(quán)字段(已經(jīng)棄用), 4位TOS字段, 和1位保留字段(必須置為0). 4位TOS分別表示: 最小延時, 最大吞吐量, 最高可靠性, 最小成本. 這四者相互沖突, 只能選擇一個. 對于ssh/telnet這樣的應(yīng)用程序, 最小延時比較重要; 對于ftp這樣的程序, 最大吞吐量比較重要.
16位總長度(total length): IP數(shù)據(jù)報整體占多少個字節(jié).
16位標識(id): 唯一的標識主機發(fā)送的報文. 如果IP報文在數(shù)據(jù)鏈路層被分片了, 那么每一個片里面的這個id都是相同的.
3位標志字段: 第一位保留(保留的意思是現(xiàn)在不用, 但是還沒想好說不定以后要用到). 第二位置為1表示禁止分片, 這時候如果報文長度超過MTU, IP模塊就會丟棄報文. 第三位表示"更多分片", 如果分片了的話, 最后一個分片置為0, 其他是1. 類似于一個結(jié)束標記.
13位分片偏移(framegament offset): 是分片相對于原始IP報文開始處的偏移. 其實就是在表示當(dāng)前分片在原報文中處在哪個位置. 實際偏移的字節(jié)數(shù)是這個值 * 8 得到的. 因此, 除了最后一個報文之外, 其他報文的長度必須是8的整數(shù)倍(否則報文就不連續(xù)了).
8位生存時間(Time To Live, TTL): 數(shù)據(jù)報到達目的地的最大報文跳數(shù). 一般是64. 每次經(jīng)過一個路由, TTL -= 1, 一直減到0還沒到達, 那么就丟棄了. 這個字段主要是用來防止出現(xiàn)路由循環(huán)
8位協(xié)議: 表示上層協(xié)議的類型
16位頭部校驗和: 使用CRC進行校驗, 來鑒別頭部是否損壞.
32位源地址和32位目標地址: 表示發(fā)送端和接收端.
選項字段(不定長, 最多40字節(jié)): 略
理解16位標識,3位標志,13位片偏移
數(shù)據(jù)鏈路層,MAC幀協(xié)議,要求自己的有效載荷不能超過1500字節(jié)(MTU)
但是IP不能決定單個報文的大小,在網(wǎng)絡(luò)中決定單個報文大小的是TCP,所以當(dāng)TCP報文向下進行交互的時候,如果大于1500字節(jié),那么IP層就需要對報文進行分片,然后對端的IP層又要對報文進行組裝,即分:自己的IP層。
組:對端的IP層。這是因為TCP && MAC并不關(guān)心IP進行了分片。IP分片與組裝不是主流情況
那么如何進行分片?如何進行組裝?
這里由16位標識,3位標志,13位片偏移來完成。
16位標識(id): 唯一的標識主機發(fā)送的報文. 如果IP報文在數(shù)據(jù)鏈路層被分片了, 那么每一個片里面的這個id都是相同的.
3位標志字段: 第一位保留(保留的意思是現(xiàn)在不用, 但是還沒想好說不定以后要用到). 第二位置為1表示禁止分片, 這時候如果報文長度超過MTU, IP模塊就會丟棄報文. 第三位表示"更多分片", 如果分片了的話, 最后一個分片置為0, 其他是1. 類似于一個結(jié)束標記.
13位分片偏移(framegament offset): 是分片相對于原始IP報文開始處的偏移. 其實就是在表示當(dāng)前分片在原報文中處在哪個位置. 實際偏移的字節(jié)數(shù)是這個值 * 8 得到的. 因此, 除了最后一個報文之外, 其他報文的長度必須是8的整數(shù)倍(否則報文就不連續(xù)了).。
我們先回答如下問題:
1.我們是怎么知道一個報文被分片了?
如果更多分片是1,就證明該標識的報文分片了
如果更多分片是0 && 片偏移 > 0說明是分片,否則不是
2.同一個報文的分片怎么識別出來?
同一個報文的分片他們的16為標識相同
3.哪一個是第一個,哪一個是最后一個分片,怎么確定有沒有收全或者丟失?
第一個:更多分片是1,片偏移為0
最后一個:更多分片是0,片偏移 > 0
當(dāng)前的起始位置 + 自身的長度 = 下一個報文中填充的偏移量大小,不相等就說明丟失了
4.哪個在前,哪個在后,如何進行正確的組裝?
只要按照片偏移進行升序即可
5.怎么保證合起來的報文是正確的?
根據(jù)TCP/IP的校驗和
6.分片好嗎?對TCP和UDP包括IP本身有什么影響?
不好,一個報文被拆成多個,任意一個報文的分片丟失,就會造成拼裝組裝的失敗,進而導(dǎo)致對端對整個報文進行重傳
假設(shè)傳送成功的概率為99%,一個報文被分為3片,那么傳輸成功的概率
99% * 99% * 99% < 99% ,分片的概率增加丟包概率
3.網(wǎng)段劃分
IP地址分為兩個部分, 網(wǎng)絡(luò)號和主機號
網(wǎng)絡(luò)號: 保證相互連接的兩個網(wǎng)段具有不同的標識;
主機號: 同一網(wǎng)段內(nèi), 主機之間具有相同的網(wǎng)絡(luò)號, 但是必須有不同的主機號;
不同的子網(wǎng)其實就是把網(wǎng)絡(luò)號相同的主機放到一起.
如果在子網(wǎng)中新增一臺主機, 則這臺主機的網(wǎng)絡(luò)號和這個子網(wǎng)的網(wǎng)絡(luò)號一致, 但是主機號必須不能和子網(wǎng)中的其他主機重復(fù)
通過合理設(shè)置主機號和網(wǎng)絡(luò)號, 就可以保證在相互連接的網(wǎng)絡(luò)中, 每臺主機的IP地址都不相同.
那么問題來了, 手動管理子網(wǎng)內(nèi)的IP, 是一個相當(dāng)麻煩的事情.
有一種技術(shù)叫做DHCP, 能夠自動的給子網(wǎng)內(nèi)新增主機節(jié)點分配IP地址, 避免了手動管理IP的不便.
一般的路由器都帶有DHCP功能. 因此路由器也可以看做一個DHCP服務(wù)器.
過去曾經(jīng)提出一種劃分網(wǎng)絡(luò)號和主機號的方案, 把所有IP 地址分為五類, 如下圖所示(該圖出 自[TCPIP])。
A類 0.0.0.0到127.255.255.255
B類 128.0.0.0到191.255.255.255
C類 192.0.0.0到223.255.255.255
D類 224.0.0.0到239.255.255.255
E類 240.0.0.0到247.255.255.255
下面我們以一個例子來理解子網(wǎng)劃分:
我們使用前三位代表學(xué)院號,后5為代表編號,每個學(xué)院都有學(xué)院群,學(xué)院群就相當(dāng)于局域網(wǎng),每個學(xué)院都有一個學(xué)生主席,他們就好比路由器,他們都在校學(xué)生會群里,校學(xué)生會群就相當(dāng)于公網(wǎng)。假如張三是理學(xué)院的一幕學(xué)生,撿到了一個錢包,里面有學(xué)生證,但是照片很模糊了,只能看到學(xué)號,上面寫著110 00001,張三對比前三位學(xué)號,發(fā)現(xiàn)不是自己學(xué)院的,所以就發(fā)給了學(xué)生會主席,然后學(xué)生會主席知道是電子信息工程學(xué)院的,就@電子信息工程學(xué)院的學(xué)生會主席,然后再由電子信息工程學(xué)院的學(xué)生會主席發(fā)到電子信息工程學(xué)院的群里,然后李四就發(fā)現(xiàn)是自己的,最終就找到了丟失的錢包。張三和李四就相當(dāng)于兩臺主機。
所以,互聯(lián)網(wǎng)中的每一臺主機,都要隸屬于某一個子網(wǎng)。子網(wǎng)劃分可以方便進行定位主機,排除的效率高。
隨著Internet的飛速發(fā)展,這種劃分方案的局限性很快顯現(xiàn)出來,大多數(shù)組織都申請B類網(wǎng)絡(luò)地址, 導(dǎo)致B類地址很快就分配完了, 而A類卻浪費了大量地址
例如, 申請了一個B類地址, 理論上一個子網(wǎng)內(nèi)能允許6萬5千多個主機. A類地址的子網(wǎng)內(nèi)的主機數(shù)更多. 然而實際網(wǎng)絡(luò)架設(shè)中, 不會存在一個子網(wǎng)內(nèi)有這么多的情況. 因此大量的IP地址都被浪費掉了.
針對這種情況提出了新的劃分方案, 稱為CIDR(Classless Interdomain Routing):
引入一個額外的子網(wǎng)掩碼(subnet mask)來區(qū)分網(wǎng)絡(luò)號和主機號;
子網(wǎng)掩碼也是一個32位的正整數(shù). 通常用一串 “0” 來結(jié)尾;
將IP地址和子網(wǎng)掩碼進行 “按位與” 操作, 得到的結(jié)果就是網(wǎng)絡(luò)號;
網(wǎng)絡(luò)號和主機號的劃分與這個IP地址是A類、B類還是C類無關(guān)
一般在一個網(wǎng)絡(luò)中,管理子網(wǎng)中的IP的設(shè)備通常是路由器
目標網(wǎng)絡(luò)和子網(wǎng)掩碼,子網(wǎng)中的主機,通常會被路由器管理
目標網(wǎng)絡(luò)和子網(wǎng)掩碼其實就是由路由器配置的
可見,IP地址與子網(wǎng)掩碼做與運算可以得到網(wǎng)絡(luò)號, 主機號從全0到全1就是子網(wǎng)的地址范圍;
IP地址和子網(wǎng)掩碼還有一種更簡潔的表示方法,例如140.252.20.68/24,表示IP地址為140.252.20.68, 子網(wǎng)掩碼的高
24位是1,也就是255.255.255.0
4.特殊的IP地址
將IP地址中的主機地址全部設(shè)為0, 就成為了網(wǎng)絡(luò)號, 代表這個局域網(wǎng);
將IP地址中的主機地址全部設(shè)為1, 就成為了廣播地址, 用于給同一個鏈路中相互連接的所有主機發(fā)送數(shù)據(jù)包;
127.*的IP地址用于本機環(huán)回(loop back)測試,通常是127.0.0.1
5.IP地址的數(shù)量限制
我們知道, IP地址(IPv4)是一個4字節(jié)32位的正整數(shù). 那么一共只有 2的32次方 個IP地址, 大概是43億左右. 而TCP/IP協(xié)議規(guī)定, 每個主機都需要有一個IP地址.
這意味著, 一共只有43億臺主機能接入網(wǎng)絡(luò)么?
實際上, 由于一些特殊的IP地址的存在, 數(shù)量遠不足43億; 另外IP地址并非是按照主機臺數(shù)來配置的, 而是每一個網(wǎng)卡都需要配置一個或多個IP地址.
CIDR在一定程度上緩解了IP地址不夠用的問題(提高了利用率, 減少了浪費, 但是IP地址的絕對上限并沒有增加), 仍然不是很夠用
這時候有三種方式來解決
動態(tài)分配IP地址: 只給接入網(wǎng)絡(luò)的設(shè)備分配IP地址. 因此同一個MAC地址的設(shè)備, 每次接入互聯(lián)網(wǎng)中, 得到的IP地址不一定是相同的;
NAT技術(shù)
IPv6: IPv6并不是IPv4的簡單升級版. 這是互不相干的兩個協(xié)議, 彼此并不兼容; IPv6用16字節(jié)128位來表示一個IP地址; 但是目前IPv6還沒有普及;
6.私有IP地址和公網(wǎng)IP地址
如果一個組織內(nèi)部組建局域網(wǎng),IP地址只用于局域網(wǎng)內(nèi)的通信,而不直接連到Internet上,理論上 使用任意的IP地址都可以,但是RFC 1918規(guī)定了用于組建局域網(wǎng)的私有IP地址
10.*,前8位是網(wǎng)絡(luò)號,共16,777,216個地址
172.16.到172.31.,前12位是網(wǎng)絡(luò)號,共1,048,576個地址
192.168.*,前16位是網(wǎng)絡(luò)號,共65,536個地址
包含在這個范圍中的, 都成為私有IP, 其余的則稱為全局IP(或公網(wǎng)IP)
一個路由器可以配置兩個IP地址, 一個是WAN口IP, 一個是LAN口IP(子網(wǎng)IP)。WAN口IP對外,LAN口IP對內(nèi)
路由器LAN口連接的主機, 都從屬于當(dāng)前這個路由器的子網(wǎng)中.
不同的路由器, 子網(wǎng)IP其實都是一樣的(通常都是192.168.1.1). 子網(wǎng)內(nèi)的主機IP地址不能重復(fù). 但是子網(wǎng)之間IP地址就可以重復(fù)了.
每一個家用路由器, 其實又作為運營商路由器的子網(wǎng)中的一個節(jié)點. 這樣的運營商路由器可能會有很多級, 最外層的運營商路由器, WAN口IP就是一個公網(wǎng)IP了.
子網(wǎng)內(nèi)的主機需要和外網(wǎng)進行通信時, 路由器將IP首部中的IP地址進行替換(替換成WAN口IP), 這樣逐級替換, 最終數(shù)據(jù)包中的IP地址成為一個公網(wǎng)IP. 這種技術(shù)稱為NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換).
如果希望我們自己實現(xiàn)的服務(wù)器程序, 能夠在公網(wǎng)上被訪問到, 就需要把程序部署在一臺具有外網(wǎng)IP的服務(wù)器上. 這樣的服務(wù)器可以在阿里云/騰訊云上進行購買.
在上圖中,我們以左邊第一臺主機訪問最上面的主機為例,下列是各個主機的源IP和目的IP
src:192.168.1.201
dst:122.77.241.3src:10.1.1.2
dst:122.77.241.3src:122.77.241.4
dst:122.77.241.3src:122.77.241.4
dst:122.77.241.3
路由器有如下的功能:轉(zhuǎn)發(fā),DHCP | 組建局域網(wǎng) 配置無線網(wǎng)絡(luò),設(shè)置網(wǎng)絡(luò)名稱 + 密碼 NAT
7.路由
路由就是在復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)中, 找出一條通往終點的路線;
就向唐僧取經(jīng)一樣,在路途中不斷的問路。
路由的過程, 就是這樣一跳一跳(Hop by Hop) “問路” 的過程.
所謂 “一跳” 就是數(shù)據(jù)鏈路層中的一個區(qū)間. 具體在以太網(wǎng)中指從源MAC地址到目的MAC地址之間的幀傳輸區(qū)間
IP數(shù)據(jù)包的傳輸過程也和問路一樣.
當(dāng)IP數(shù)據(jù)包, 到達路由器時, 路由器會先查看目的IP;
路由器決定這個數(shù)據(jù)包是能直接發(fā)送給目標主機, 還是需要發(fā)送給下一個路由器;
依次反復(fù), 一直到達目標IP地址
那么如何判定當(dāng)前這個數(shù)據(jù)包該發(fā)送到哪里呢? 這個就依靠每個節(jié)點內(nèi)部維護一個路由表
路由表可以使用route命令查看
如果目的IP命中了路由表, 就直接轉(zhuǎn)發(fā)即可;
路由表中的最后一行,主要由下一跳地址和發(fā)送接口兩部分組成,當(dāng)目的地址與路由表中其它行都不匹配時,就按缺省路由條目規(guī)定的接口發(fā)送到下一跳地址。
假設(shè)某主機上的網(wǎng)絡(luò)接口配置和路由表如下:
這臺主機有兩個網(wǎng)絡(luò)接口,一個網(wǎng)絡(luò)接口連到192.168.10.0/24網(wǎng)絡(luò),另一個網(wǎng)絡(luò)接口連到192.168.56.0/24網(wǎng)絡(luò);
路由表的Destination是目的網(wǎng)絡(luò)地址,Genmask是子網(wǎng)掩碼,Gateway是下一跳地址,Iface是發(fā)送接口,Flags中的U標志表示此條目有效(可以禁用某些 條目),G標志表示此條目的下一跳地址是某個路由器的地址,沒有G標志的條目表示目的網(wǎng)絡(luò)地址是與本機接口直接相連的網(wǎng)絡(luò),不必經(jīng)路由器轉(zhuǎn)發(fā);
轉(zhuǎn)發(fā)的過程:
1.遍歷路由表
2.目的IP & 路由表中配置的Genmask,確定該報文要去的目標網(wǎng)絡(luò)
3.對比結(jié)果和Destination
4.通過IFace接口發(fā)出報文
轉(zhuǎn)發(fā)過程例1: 如果要發(fā)送的數(shù)據(jù)包的目的地址是192.168.56.3
跟第一行的子網(wǎng)掩碼做與運算得 到192.168.56.0,與第一行的目的網(wǎng)絡(luò)地址不符
再跟第二行的子網(wǎng)掩碼做與運算得 到192.168.56.0,正是第二行的目的網(wǎng)絡(luò)地址,因此從eth1接口發(fā)送出去;
由于192.168.56.0/24正 是與eth1 接口直接相連的網(wǎng)絡(luò),因此可以直接發(fā)到目的主機,不需要經(jīng)路由器轉(zhuǎn)發(fā);
轉(zhuǎn)發(fā)過程例2: 如果要發(fā)送的數(shù)據(jù)包的目的地址是202.10.1.2
依次和路由表前幾項進行對比, 發(fā)現(xiàn)都不匹配;
按缺省路由條目, 從eth0接口發(fā)出去, 發(fā)往192.168.10.1路由器;
由192.168.10.1路由器根據(jù)它的路由表決定下一跳地址;
路由表生成算法
路由表可以由網(wǎng)絡(luò)管理員手動維護(靜態(tài)路由), 也可以通過一些算法自動生成(動態(tài)路由).
相關(guān)的算法有距離向量算法, LS算法, Dijkstra算法等.