網絡建設、運維全部知識總結篇
做者:Danbo 2015-9-22前端
OSPF
OSPF的特色:node
1.無環路:AS內防環機制是經過SPF算法計算路由,從算法自己保證了不會生成環路。AS間防環:經過區域劃分,非骨幹區域簡直的通信只能靠骨幹區域通信。
2.區域劃分:優勢減少了內存的消耗和CPU的負擔。
3.支持等價路由。
4.路由等級:區域內、區域間、區域外(E一、E2)
自制系統(Autonomous System)
一組使用相同路由協議且處於同一技術掌控的連續的路由範圍。
一臺OSPF路由器對其餘OSPF路由器的跟蹤須要每臺路由器都提供一個RID,路由器ID在OSPF區域內惟一標識一臺路由器,1.手工route-id配置;2.最大loopback地址;3.最大IP地址。
使用loopback地址的好處:1.穩定,一旦路由器啓動,這個環回接口就處於活動狀態。2.最重要的是具備更好的控制路由ID的能力。
OSPF創建在協議號89的基礎上,是傳輸層協議;EIGRP協議號88;RIP使用UDP520所以是應用層協議;BGP使用TCP179端口所以也是應用層協議;ARP/RARP是網絡層協議,可是其工做的內容確實鏈路層。
而且注意對於ARP請求和相應包來講有幀類型字段,對於ARP請求和應答的話這個字段是0x0806。其幀頭中具備協議字段,0x0800表明IP,所以工做在網絡層。
Hello協議:
1.發現鄰居;
2.在創建鄰居關係時利用Hello包協商幾個必要的參數;
3.確保雙向通訊;
4.充當keepalive。
5.用於在MA網絡上進行DR/BDR的選舉。
OSPF創建鄰居的條件:(百度筆試考了)
1.Area ID必須一致;
2.Hello包中的HelloInterval和HelloDeadInterva的時間必須相同;
3.驗證類型及驗證密鑰必須相等;
4.所處的區域標記必須相同;
5.必須物理直連(OSPF包的TTL值爲1,虛鏈路除外);
6.同一區域內兩臺路由器的RID不能相同。
注意:路由器在發送Hello包時,會把包含全部鄰居的RID。
OSPF網絡類型:
1.點到點
T1鏈路:1.544Mbps,是連接單獨一對路由器的。在這種類型的鏈路上老是能夠造成鄰居關係的。在這種網絡上的OSPF使用組播地址進行通信。
2.廣播型網絡
好比以太網,DR與BDR使用AllSPFRouters(224.0.0.5)與非DR/BDR進行通訊,而非DR/BDR使用AllDRothers(224.0.0.6)與DR/BDR進行通訊。
3.NBMA網絡
好比幀中繼網絡,這樣多路訪問網絡沒有廣播能力,須要選舉DR和BDR,而且OSPF數據包是以單播進行通訊的,必需要使用neighbor手工指定鄰居。
4.點到多點網絡
是NBMA網絡的特殊配置,能夠看作是一羣點到點鏈路的集合。不須要選舉DR/BDR,OSPF數據包以單播進行傳輸。
5.虛鏈路
OSPF數據包以單播方式發送。
除了以上5中網絡類型,也能夠將網絡概括爲如下兩種網絡
傳送網絡:與兩臺及以上的路由器相連的網絡。
末梢網絡:僅僅和一臺路由器相連。
若是沒有DR/BDR的話,那麼網絡上將產生n²個:LSA通告,顯得太亂了,因而就選舉DR。
1.首先根據端口優先級(缺省爲1,ip ospf priority),越大越優先。0表示沒有資格選舉爲DR。
2.優先級相等,再根據RID,越大越優先。
注意DR/BDR具備穩定性,指的是:路由器的優先級能夠影響一個選舉過程,可是一旦選舉完畢,即便更高的優先級加入後也不會替換DR/BDR。這點與RID相似。
DR是一個僞節點的概念,即任從僞節點到任何與之相連的路由器的代價都有0,經過這種方式,全部代價都不會受到僞節點的影響。而且DR是接口特性。
Process ID:這個是思科私有的,能夠依賴這個屬性讓Cisco路由器運行多個OSPF進程。不一樣進程之間至關於不能類型的協議。
OSPF Hello Interval:在廣播型網絡上爲10s(點到點或者廣播),非廣播上爲30s(點到多點或NBMA)
OSPF RouterDeadInterval:廣播型網絡上爲40s,非廣播爲120s。(注意是4倍關係)
Wait Timer(等待計時器)在開始選舉DR和BDR以前,路由器等待鄰居路由器通告本身爲DR、BDR的時間,等待長度就是RouterDeadInterval的時間。
RxmtInterval(重傳時間):路由器發送OSPF數據包後沒獲得回覆以前將要等待多長時間重傳。5s
Neighboring Router:只有創建起了鄰接關係的路由器之間,纔會在這個字段中顯示出鄰居路由器的RID。
以上信息能夠經過:show ip ospf interface f0/0中查看到。
OSPF接口狀態機:
1.Down
2.點到點:這個狀態僅適用於點到點,點到多點,以及虛鏈路網絡中,接口處於這個狀態後,該接口就開始起做用了。此時每隔HelloInterval的時間發送一次Hello數據包,並嘗試和接口鏈路另外一端相連的鄰居路由器創建鄰接關係。
3.Waiting:這個是MA網絡中會出現的,開始發送Hello包,而且試圖去選舉DR和BDR或者去發現網絡中的DR或BDR。
4.DR:這樣狀態就表明該路由是DR
5.Backup:該路由器是 BDR。
6.DRother:既不是DR也不是BDR的路由器。
7.Loopback:環回口。
鄰接關係的四個階段:
1.鄰居發現階段;
2.雙向通訊階段;
3.數據庫同步階段;
4.Full徹底鄰接階段;
鄰居狀態機,鄰居之間造成徹底鄰接關係的過程:
1.失效狀態(Down):鄰居會話的初始狀態,指明在最近的RouterDeadInterval的時間內尚未收到來自鄰居路由器的Hello數據包。除非在NMBA網絡中,不然Hello包是不會發給哪些失效的鄰居路由器的,而且在NBMA網絡中,是以每一個隔PollInterval(120s)的時間發送一次。
2.嘗試狀態(Attempt):僅適合NMBA中,哪些具備DR選舉這個的路由器和其鄰居路由器的相連的接口開始變得有效(Active),這臺具備DR選舉資格的路由器將鄰居路由器的狀態設爲Attempt狀態,並使用HelloInterval時間代替PollInterval的時間來向鄰居發送Hello包。
3.初始狀態(Init):在最近的RouterDeadInterval的時間內,收到的鄰居的Hello包。
4.雙向通訊階段(2-way):在來自鄰居路由器的Hello包中看到了本身的RID。(只有在這個狀態或者更高狀態時纔有資格被選做該網絡上的DR或BDR,若是在Init收到一個DBD數據包,也能夠引發鄰居狀態直接轉換成2-way狀態)。
5.信息交換初始狀態(ExStart):開始創建主從關係和協商DBD的序列號。而且具備最高RID的路由器成爲」主「路由器。注意:主從關係的協商也是靠DBD包的,只是此時交換的DBD包中的I位(初始位)置1.
6.信息交換狀態(Exchange):在這個狀態先雙方開始交換DBD,而且根據DBD造成LSR,並向對方發送鏈路狀態請求數據包。
7.信息加載狀態(Loading):這個狀態下,收到鄰居發送的LSR,而且返回LSU進行交換鏈路狀態通告信息(LSA)。
8.徹底鄰接狀態(Full):鄰居路由器之間具備相同的鏈路狀態數據庫,達到徹底鄰接關係。
在交換LSA以後必須對其進行確認,LSA的確認有兩種:
1.顯示確認:直接返回含有LSA頭部的LSAck消息;之前已經收到過了。
2.隱式確認:返回收到LSA的相同實例的LSU;第一次收到。
注意OSPF對LSA的確承認以使用單個鏈路狀態確認多個LSA通告。這個鏈路狀態確認數據包不須要攜帶完整的LSA信息,而只是須要攜帶LSA的頭部就能夠了。沒收到確認的LSA會被放進鏈路狀態重傳列表中,而且每一個RxmtInterval(5s)時間就會從新傳輸一次,知道該LSA獲得確認爲止。其中LSAck能夠被延時發送,可是延時時間必須小於RxmtInterval時間。
OSPF採用直接確認的兩種狀況:
1.從鄰居不斷的收到重複的LSA,可能代表鄰居尚未收到這個LSA的一鏈路狀態數據庫裏已經沒有這個LSA的實例。
可靠泛洪:序列號,校驗和,老化時間
當路由器收到相同的LSA的多個實例,路由器如何肯定哪一個是最新的:
1.比較序列號,擁有最大的序列號的LSA就是最新的LSA;
2.假如相等,比較誰擁有最大的無符號校驗和。
3.校驗和也相等的話,就比較老化時間誰的大誰是最新的LSA。
4.若是這些LSA的老化時間之差多餘15min(MaxAgeDiff),那麼擁有較小的老化時間的LSA將是最新的LSA。
5.若是還比較不出來那麼就沒法區分誰是最新的LSA,那麼這兩個LSA就被認爲是相同的。
OSPF定義瞭如下3種
域內通訊(Intra-Area Traffic)
域間通訊(Inter-Area Traffic )
外部通訊(External Traffic)
被分割的區域(或稱爲分段區域,Partitioned Area):因爲鏈路失效而使一個區域的一部分和其餘部分隔離開來的情形。非骨幹區域變成分段區域,此時並不會中斷通訊,他們之間的通訊會被認爲是區域間的通訊。可是若是骨幹區域分段了,那麼會把骨幹區域隔離成兩部分區域,並在兩部分區域上建立兩個單獨的OSPF域。
咱們解決的辦法就是利用虛鏈路(Virtual Links)
1.經過非骨幹區域鏈接一個區域到骨幹區域。
2.經過 一個非骨幹區域鏈接一個分段的骨幹區域兩邊部分區域。
配置虛鏈路注意事項:虛鏈路不能是一個末梢區域,必須是傳送區域(即必須擁有所有的路由信息),而且必須配置在兩臺ABR之間。
OSPF採用 LSA組步調(group pacing)的機制:每個LSA通告都有屬於本身的從新刷新計時器,可是當它們獨自使用的重刷新計時器超時(30min)的時候,會引入一個時延來延遲這些LSA通告的泛洪擴散。經過時延可讓更多的LSA通告共同編成一組,從而可讓跟新數據包攜帶大量的LSA通告,默認狀況下足步調時間爲4min。
OSPF數據包類型:
1.Hello包:週期性發送,用來發現和維持OSPF鄰居關係的 。這個是依賴於計時器的,好比在 高速鏈路上Hello Interval:10s,死亡時間是40s;低速鏈路30s,死亡時間120s。(這個高速與低速是本很被評級而不是實際的帶寬。)
2.DBD包:描述本地LSDB中每條LSA的摘要信息,和DR與BDR的選舉(2-way狀態)包含一些字段:I初始爲、M後繼位、MS主從,發生在ExStart狀態、DC(用於按需鏈路上的do not age位)
3.LSR包:向鄰居請求特定的LSA。
4.LSU包:包含LSA。
5.LSAck:確認收到的LSA。(確認DBD和LSU兩種數據包。)
OSPF鄰接的條件:
1.區域ID
2.hello/dead time
3.認證類型
4.末節區域標記
5.物理直連(不然怎麼多是鄰接的呢!!!)
OSPF數據庫同步
OSPF不管網絡類型都是使用組播地址發送更新的,只有在發送確認包的時候使用單播地址。(224.0.0.5allspfrouter,224.0.0.6alldrouter),不過有時候在非廣播網絡中咱們使用neighber命令則使用的是單播,咱們這裏講的是默認方式。
同步數據庫過程:
1.Down(失效狀態):鄰居會話的初始狀態,在一個RouterDeadInterval的時間內沒有收到來自鄰居的Hello包。
2.Init(初始狀態):當一臺路由器發送Hello包後其狀態變成Init狀態。注意這裏使用的是組播(224.0.0.5)發送Hello包,這是由於在剛開始其鄰居表是空的,不可能以單播發送Hello包。當其鄰居路由器收到這個組播包後,就知道對方的IP地址了,而後以單播反饋hello包,而後就達到下一種過程w-way。
3.Two-Way(雙向通信):收到鄰居發送的Hello包中看到本身的RID。(DR/BDR的選舉在這個階段,前提是須要選,在廣播 和NBMA網路中須要選。注意DR的概念是限於端口的,是一個多路訪問環境一個DR,DR是用過路由器的優先級選擇的(0~255,默認是1,0表示沒有資格被選舉爲DR,可在接口下經過:ip ospf priority修改,優先級相等再根據RID,都是越大越優先。))
4.ExStart(信息交換的初始狀態):路由器和其鄰居路由器創建主從關係(肯定誰先發送DBD包)並肯定DBD包的序列號。
5.Exchange(信息交換狀態):雙方交換DBD信息,並根據收到的DBD與本地鏈路狀態數據庫做比較而後造成LSR包。
6.Loading(信息加載狀態):向鄰居發送LSR請求最新的LSA鏈路狀態通告信息,此狀態雙方正在同步鏈路狀態數據庫。
7.Full(徹底鄰接狀態):當鄰居路由器之間具備相同的LSDB時,就達到了徹底鄰接狀態。
經過:debug ip ospf adj能夠觀察到鄰接關係創建的過程。
鄰居是關係達到two-way的狀態,鄰接是關係達到full的狀態,鄰居關係只互發hello包,鄰接關係則發DBD,LSU,LSA這些linux
當路由器檢測到本地鏈路發生改變的時候的過程:
1.當R1檢測到鏈路發生變化的時候會發送LSU給DR,在MA網絡中洪泛任務交給DR來完成(BDR也記錄這些路由信息的變化,只是接下來不會再從本身的接口泛洪出去)。
2.而後同步完LSDB後再根據算法計算最短路徑樹造成路由。
以上R1與DR之間,DR與DRothers路由器之間是經過單播泛洪的。
OSPF常見的網絡類型:
1.point-to-point(點到點網絡):鏈接單獨的一對路由器到的。在點到點網絡上的有效鄰居老是能夠造成鄰接關係,經過組播更新數據。
2.broadcast(廣播型網絡):好比在咱們的以太網上,鏈接多臺路由器,選舉DR和BDR,經過兩種組播地址通訊。
3.NBMA(非廣播多路訪問):好比幀中繼網絡中,能夠鏈接多臺路由器,可是沒有廣播數據包的能力,一個NMBA網絡上路由器發送的數據包將不能被其餘路由器收到,咱們須要經過手工配置鄰居的方式解決。須要選舉DR和BDR。而且使用單播通訊。
4.point-to-multipoint(點到多點):能夠看作是一羣點到點鏈路的集合,不須要選舉DR和BDR,以單播方式通訊。
5.virtual links(虛鏈路):經過單播傳送。
注意:點到點和廣播型網絡都被認爲是一種高速網絡(即經過組播更新的都是高速鏈路)。
傳送網絡:在傳送網絡中數據包僅僅是經過這個區域,,始發和目的網絡都不是這個區域。
末梢網絡:數據包的始發或目的地址屬於這個網絡。注意:loopback接口能夠認爲是一種末梢網絡,並當作32位主機路由來通告。
OSPF RID:用於表示OSPF的路由器,經過show ip ospf來查看。
1.router-id手工配置。(不包含0.0.0.0和255.255.255.255)
2.最大的邏輯接口環回口IP。(若是在配置新的環回口以前已經起了OSPF進程,咱們必需要clear ip ospf process,清一下進程,這個是爲了增長其穩定性,也就是DR是沒有搶佔模式的,即你在網絡中新增長一臺路由器,這臺路由器是不會搶佔DR的,咱們知道DR,BDR的選舉發生在2-way狀態,不可能當加入一臺新的路由器的時候就從新再通過四個狀態,這樣即不穩定又消耗帶寬,不必。而在二層STP根橋是有搶佔模式的,所以咱們配置了root-guard來防禦跟被搶佔。)
OSPF的兩個穩定性:一個是RID不會搶佔,一個是DR選舉完以後不會搶佔。
3.最大的物理接口的IP地址。
注意:若是在不一樣區域內RID相同此時不影響鄰居關係的創建。
在同一區域內時,兩邊配置相同RID的路由器都能與中中間的路由器創建起鄰居關係,但相互之間創建不起來,而且相互學習不到對方的路由,而且中間的路由器不能同時存在兩邊路由器上的路由,會在二者之間來回跳。
LSA Types
Type1-Router LSA:由每臺路由器產生,包含路由器的 直連鏈路的接口IP前綴和開銷,描述到達每臺路由的可達性,在其始發的區域內傳播。
Type2-Network LSA:由DR產生,描述 直連路由器RID和 直連網段的掩碼,表述到達DR或BDR的可達性,在其始發的區域內傳播。
Type3-Network Summary LSA:由ABR產生,用來通告本區域外的路由信息(包括前綴、掩碼、開銷),描述到達ABR的可達性,整個OSPF區域內。
Type4-ASBR Summary LSA:由ABR產生, 通告這臺ASBR的可達性(ASBR的RID),在整個OSPF區域內傳播。
Type5-AS External LSA:由ASBR產生,描述 到達自治系統外部的路由信息,在整個AS內泛洪(除了Stub,NSSA區域)。
Type7-NSSA External LSA:由NSSA區域內的ASBR產生,描述到達AS外部的路由,在NSSA區域內泛洪。
注意:NSSA External LSA其頭部有一個P-bit標誌,其置1的時候,會在NSSA區域的ABR路由器上將Type-7的LSA轉換爲Type-5的LSA而後擴散到其餘區域。
而Stub區域內的路由器所發送的Hello包中會有一個E-bit,其置0,表示不接收外部任何置1的Hello包,也就沒法與非Stub區域的路由器構成鄰接關係了。
瞭解的LSA:
Type6-MOSPF,用在組播OSPF中。
Type8-External Attribute LSA:外部屬性LSA,用在將BGP路由信息重發布到OSPF中攜帶AS-PATH屬性。
Type9-10-11-Opaque LSA:非透明LSA,用於OSPF擴展屬性的。
LSA的類型:
O, O IA, E1, E2;E2外部路由的Cost值都相同,E1會加上區域內的的COST。
咱們必定要弄懂,COST值是以出接口計算的。不管RIP、EIGRP、OSPF都是這樣的。
OSPF鏈路狀態數據庫過載保護:在進程下設置:max-lsa 12000(容許接收lsa的最大條目)
若是超過最大數量則會報警: Maximum number of non self-generated LSA has been exceeded "ospf 1" - 2 LSAs,而且過一下子會down掉鄰居關係。
OSPF的被動接口是:禁止發送或接收鏈路狀態更新。
有兩種方式:1.先passive-interface default全部端口,再反向開啓不被動的接口:no passive-interface s0/0
2.直接passive-interface掉全部要被動的接口。
這個passive接口的做用:好比路由器上的某個端口接的是交換機,咱們爲了避免讓OSPF向這個端口發送LSU的包,咱們能夠將其接口設置爲被動接口。有人說爲何以前不發佈這個接口不就行了。呵呵,若是咱們不通告這個接口那麼OSPF的其餘路由器就沒法學習到這個網段,那麼根本就不會通了。注意咱們不要再傳輸網上使用被動接口,不然OSPF的鄰居關係就會down掉,只能用在末節網絡。
OSPF防環機制:
AS內防環機制是經過SPF算法計算路由,從算法自己保證了不會生成環路。
AS間防環:經過區域劃分,非骨幹區域簡直的通信只能靠骨幹區域通信,區域之間的傳輸是矢量的,所以就會有區域間的水平分割。
虛鏈路:
若是非骨幹區域沒有與骨幹區域相連,或者區域0被隔開了或者不來連續,那麼就要用到虛鏈路把各區域的ABR鏈接起來。而且在虛鏈路上不會有hello包的產生,由於其實一個虛擬隧道。
咱們傾向使用RID創建虛鏈路,這樣更穩定:area n vitual-link router-id
經過:show ip ospf vitual-links查看其狀態。看到:Adjacency State FULL(hello suppressed )
路由彙總:
1.隱藏網絡的不穩定性。
2.節約路由表體積,節約CPU資源,減小LSA在網絡上的洪泛。
區域間彙總:針對類型3LSA彙總(O IA);在ABR上彙總。
域間彙總:針對類型5LSA彙總(O E一、O E2);在ASBR上彙總。
執行了路由彙總的路由器會自動生成一條通往Null0接口的空路由,防止環路。這個 防環主要是在執行彙總路由的路由器上收到上游路由器發送給他的默認路由,那麼當某條明細路由down掉後就會匹配這條默認路由,至此就會造成路由環路。
區域間彙總:area n range 192.168.1.0 255.255.255.0 n指的明細路由所在的區域。
默認狀況下使用area range命令施行路由彙總後,會自動產生一條指向空接口的null0路由,不過能夠經過no discard-route不在它的路由表中加載這條路由。不過若是沒有自動建立,能夠使用discard-route命令建立。
彙總路由會繼承全部明細路由中開銷最小值,若是最小開銷的路由down掉後,SPF算法會從新計算。OSPF在鏈路狀態變化(好比接口優先級、up/down、cost值)時會從新進行SPF計算。
對於域外匯總其實在ASBR路由器上使用命令:summary-address 192.168.1.0 255.255.255.0
area range命令的缺省行爲是通告指定的範圍。它也能夠用來抑制一個地址範圍的通告,使用關鍵字:not-advertise的命令area range將使指定範圍的前綴被抑制。
OSPF區域間路由過濾:
使用前綴列表挑選路由:
ip prefix-list LIST1 seq 10 deny 192.168.1.0/24
ip prefix-list LIST1 seq 20 permit 0.0.0.0/24 非容許即禁止。
router os 1
area n filter-list prefix LIST out|in
OSPF的默認路由
對於OSPF域內去往AS外時,此時咱們可讓ASBR路由器向區域內宣告一條類型爲:O*E2的默認路由。當有多臺ASBR時,咱們最好修改其通告默認路由的開銷,讓其餘的條目作備份。
命令:default-information originate,不過前提是ASBR上必須有一條默認路由,若是沒有的話咱們能夠建立一條指向null0的默認路由:ip route 0.0.0.0 0.0.0.0 null0。不過咱們能夠經過命令 default-information originate always忽略這個規則。
OSPF特殊區域
Stub(末節)區域:拒絕接受類型5的LSA,同時也拒絕相似4的LSA,ABR路由器上會自動產生一條基於類型3的默認路由,用於引導Stub區域內的路由通往AS外部。
配置命令:區域內每臺路由器:area n stub,經過:area n default-cost 10用來改變所通告的默認路由的開銷值,默認爲1.這個當有多臺ABR路由器時,能夠更改通告的默認路由cost值,其中一個主,另外一個做爲備份ABR。
當末梢區域內存在多個ABR路由器時,可是由於缺省路由的緣由,區域內部路由器將不能肯定那一臺路由器纔是到達ASBR最優網關。
Totally Stub(徹底末節)區域:因爲Stub區域傳輸類型5的LSA是經過ABR,而咱們知道通往其餘區域也是走ABR,那麼咱們徹底能夠決絕類型3的區域間路由,此時會產生一條類型3的默認路由,這條默認路由引導區域內的路由訪問AS外部和area間。
配置命令:只須要在ABR上加上:area n stub no-summary(刪除類型3的LSA)
NSSA區域:假設一個區域內有ASBR,可是咱們又想在區域內拒絕類型5的LSA,咱們該如何作呢?此時引入類型7的LSA。即在NSSA區域內傳輸的是類型7的LSA(此時路由前綴標誌爲:O N二、1),而且類型7的LSA中有一個P-bit,當P-bit等於1的時候,在NSSA的ABR路由器上會將類型7的LSA轉換爲類型5的LSA,而後在AS內泛洪。注意:NSSA區域的ABR是不會向NSSA區域內的路由器產生默認路由的,不過在AS內只有一個ASBR的路由器時網絡是沒有問題的,當其餘區域還有ASBR時,此時當類型5的LSA傳輸到NSSA區域的ABR時是沒法將類型5的LSA轉換成類型7的。所以就形成了路由不可達的狀況。此時咱們須要在NSSA區域的ABR路由器上手動配置一條默認路由:area n nssa default-information-originate
配置命令全部路由器:area n nssa
Totally NSSA:拒絕類型3-4-5,引入類型7。
配置命令:只須要在NSSA的ABR上配置:area n nssa no-summary
路由條目(router entries)是到達ABR和ASBR路由器的路由。
能夠經過:show ip ospf border-routers來查看。(注意觀察到的路由條目的目的地要麼是ABR、要麼是ASBR)
當一臺OSPF路由器檢查一個數據包的目的地址時,其最優選路的步驟:
1.選擇能夠和目的地址最精確匹配的路由(擁有最長的地址掩碼的路由)。
2.而後根據區域內、區域間、E一、E2的有限順序進行選路。
3.默認條件思科路由器最多支持16條等價的路徑上實現負載均衡。能夠經過maximum-paths來改變。
按需電路上的OSPF
咱們知道OSPF每隔10s發送一次Hello數據包,而且每隔30min刷新一次LSA。這些功能用來維護鄰接關係,以確保鏈路狀態數據庫的精確。不過在按需鏈路上:LSA的可選字段發生了變化,沒有周期性的Hello數據包交換,而且設置了DoNotAge位,所以在全部的LSA中增長了一個新的標識Demand Circuit位(DC-bit),使用命令:ip ospf flood-reduction命令。
OSPF認證
0:不認證
1:明文認證
2.:MD5認證
基於鄰居認證都是在接口上進行的:ip ospf authentication-key ***** 而後在接口上啓用:ip ospf authentication。
基於md5的:ip ospf message-digest-key 1 md5 ***** 應用:ip ospf authentication message-digest。
基於區域明文:ip ospf authentication-key ***** 進程下應用:area n authentication。
基於區域md5:ip ospf message-digest-key 1 md5 **** 應用:area n authentication message-digest。
虛鏈路明文認證:area 1 virtual-link **** authentication-key uestc 應用:area 1 virtual-link **** authentication。
虛鏈路md5認證:area 1 virtual-link **** message-digest-key 1 md5 uestc 應用:area 1 virtual-link **** authentication message-digest。
在OSPF認證中有一個加密序列號:這是一個不會減少的數字,用來防止重現攻擊(replay attacks)。
重放攻擊:是指攻擊者發送一個目的主機已接收過的包,來達到欺騙系統的目的,主要用於身份認證過程,破壞認證的正確性。這樣就不難理解爲何要有一個不斷變化的序列號,而且加密序列號,讓攻擊者沒法準確查找到序列號增加的規律。
OSPF和輔助地址
在OSPF環境中,輔助地址的用法:
1.只有在主網絡或子網也運行OSPF協議的時候,OSPF纔會通告一個輔助的網絡或子網。
2.OSPF將把輔助地址看做是末梢網絡(這些網絡上沒有OSPF鄰居),從而不會再這些網絡上發送Hello數據包。在輔助地址上也就沒法創建鄰接關係。
在TCP/IP路由技術卷一上,DNS服務器所配置的默認網關爲一臺配置了輔助地址的路由器上,而輔助地址與路由器與其餘路由器沒法創建鄰居關係,全部形成DNS回包失敗,咱們的作法是:在這臺路由器上配置一條指向OSPF主網絡的默認路由。
輔助地址:也就是ip address *.*.*.* secondary
做用:在同一端口中能夠設置兩個以上的不一樣網段的IP地址,這樣能夠實現鏈接在同一局域網上的不一樣網段之間的通訊。通常來講一個網段對於用戶來講不夠用,能夠採起這種辦法。同時必須在端口下開啓ip redirect。由於Cisco路由器不容許從同一端口進來的IP包又送回到源端口,ip redirect表示容許在同一端進入路由器的IP包再從源端口出去。
注意配置了輔助地址的OSPF路由器,與另外一臺僅配輔助地址的路由器相連,此時這臺路由器不能稱爲ASBR,由於其並無接收外部路由,咱們在這臺路由器上運行其餘協議,好比rip,而後再將rip重分佈到OSPF中,這樣就可以接收外部路由成爲一臺ASBR路由器了。
總結:在概念上理解,不能只背,他媽的有什麼用。
tunnel接口是一個虛擬接口,提供點對點的傳輸模式,所以每個單獨的線路都必須設置一個Tunnel口。
BGP
BGP分爲三張表ios
鄰居表:記錄BGP對等體信息。web
BGP表:記錄到達目標網絡的全部路徑信息,以及到達目標的屬性。
路由表:到達目標網絡的最佳路由。
創建BGP對等體關係的步驟:
1.IDLE空閒狀態。
其中有個重試鏈接時間(ConnectRetry,初次爲60s,之後每多一次IDLE狀態就會翻倍,以指數增長。)
2.Connect
3.Active(激活狀態):進行TCP三次握手
4.Open Sent
5.Open Confirm3和4主要進行BGP鏈接。
6.ESTABLISHED完成BGP對等體創建過程。
BGP消息類型:
Open:簡歷BGP鏈接
Keepalive:鄰居關係的維持,主要是維持TCP的會話(60s發送一次,180s的死亡時間)
Update:包含路徑、屬性
Notification:BGP通知,即發生錯誤時會發送Notification,一旦發送Notification,BGP鄰居關係就會當即切斷。
Path Attributes
咱們發如今BGP Update消息中的NLRI中,關於路由的信息只包含(前綴和長度),大部分都是路徑屬性。
Well-Known Mandatory
AS_PATH
描述路由全部通過的自制系統,倒序排列:以最近的AS開始,以發起者的AS結尾。BGP用AS-Sequence有序的AS_PATH序列進行選路,以AS_SET無序AS號進行自制系統間防環。
Next_Hop
若是宣告路由器與接受路由器在不一樣一AS內,那麼下一跳就是宣告路由器的接口IP。
若是宣告路由器與接收路由器在同一AS內,且NLRI指明的地址也在同一AS內,那麼下一跳就是宣告路由的鄰居的IP地址。
若是宣告路由器與接收路由器在同一AS內,但NLRI指明的地址不在同一AS內,那麼下一跳外部對等體的IP。
咱們經常經過nei **** next-hop-self下一跳自身改變下一跳,來解決下一跳不可達的問題。
ORIGIN
知名路由更新消息的來源;IGP(從IGP中的Network命令學到0);EGP1;Incomplete3(路由來源的信息不完整,好比經過redistribute重發布進來的)
Well-Known Discretionary
Local_PREF
默認爲100,不會傳遞給其餘AS,但會iBGP關係之間進行傳播,若是一臺運行iBGP的路由器收到到一個目的多條路徑,就會比較Local_PREF屬性,選擇Local_PREF值最高的。這個是影響離開AS的數據流量。
Atomic_Aggregate
用來警告下游路由器出現了路徑信息丟失。發生在聚合路由器上。
Optional Transitive
Aggregator
當設置Atomic_Aggregate屬性後,也能夠附加Aggregator屬性,用來附加聚合路由以前的AS號。
Community
Internet默認
NO_EXPORT該路由不能傳遞到eBGP對等體,若是配置了聯盟,該路由不能再聯盟外公佈。
NO_ADVERTISE接受者不能公佈給任意的BGP對等體。
Local_AS不能傳遞到eBGP對等體,也不能傳遞給聯盟內的其餘聯盟子AS。
Optional Nontransitive
MED
影響進入AS的流量,MED值被認爲是一種度量,越低越優先。
注意:默認只有兩條路徑來自與同一AS時,才進行MED比較(即有多條路徑時當第一個AS號相同採起比較MED值)。不過咱們能夠經過命令:bgp always-compire-med命令去比較多有路徑。
Originator_ID
路由產生者的RID,它是由第一個RR建立,是一種防環機制。
Cluster List
路由反射器的簇ID,由路由反射器產生,每個RR將會有一個簇ID。這個有點相似於AS-PATH屬性,也是將新的Cluster ID加到Cluster List中。用於簇間防環。
Weight
思科特有的,用於本地路由器多出口選路,本地產生的默認爲32768,從對等體學習到的其餘爲0。與本地優先級有點像。
BGP的防環機制
iBGP防環:經過iBGP對等體學到的BGP更新將不能傳輸給任意的iBGP鄰居,即iBGP更新只傳一條。
eBGP放緩:經過AS_PATH中的AS_SET屬性進行防環,即當運行BGP的路由器在接收到來自外部對等體的一條路由中發現本身的AS號,此時就會忽略該路由。
iBGP的全互聯
這個用於解決iBGP防環機制,也就是iBGP的水平分割的一種方法,通常採用邏輯的Full-Mesh。咱們知道BGP是創建在TCP179端口上的,咱們如何保證TCP正確創建呢,這裏只要雙方可以ping通便可,這點咱們能夠運行IGP協議便可。尤爲是在發生路由聚合後,會加入AS-SET以防止路由環路。可是這個問題是下降了路由的穩定性。
路由抑制
路由擺動(Route Flap)是Internet不穩定的主要因素,當一條有效路由被宣告爲無效,而後又被宣告爲有效,此時咱們會給變化的路由一個懲罰值,即路由擺動得越多,其懲罰值累加,而後懲罰值會自動下降,咱們在此設置一個半衰期,若是懲罰值超過抑制門限,那麼就不會對外宣告該路由,當懲罰值下降到重用門限後,纔會解除該路由的抑制,不過抑制時間會有一個上限,叫作最大抑制時間--60分鐘,這個時間通常設置爲半衰期的4倍。咱們能夠經過:bgp dampening來更改。
BGP選路原則
1.Weight
2.Local_PREF
3.本地產生的(下一跳爲0.0.0.0)
4.AS_PATH
5.ORIGIN
6.MED
7.AD(eBGP20優先於iBGP200)
8.iBGP的metric最小
9.以上原則都相等的話,若是開啓了maxmimu-path (2-16),就進行負載均衡。
10.eBGP計時器最大
11.鄰居RID最小
12.具備最短的Cluster_LIST
13.鄰居IP最小
BGP同步
從iBGP對等體學到的eBGP更新不會去用也不會去宣告給eBGP對等體,除非本身在IGP中也學到相同的路由。
這個主要是防止路由黑洞的問題。不過咱們通常都要關閉這個同步規則。
什麼狀況下BGP會把路由信息放入路由表中呢?那就是下一跳可達。這裏面試的時候能夠畫一個拓撲解釋,此時就要用到充分發:將BGP充分發到IGP,不過這個牽涉到BGP路由條目過大,而且會丟失BGP相應的屬性,即便採用充分發也只是充分發直連路由。咱們目前都將同步關掉,而後採用iBGP的邏輯Full-Mesh來解決這個問題。
上面張圖很重要,注意控制層面是以段創建的,其源目IP是不停變化的,而對於數據層面其數據包中的源目IP是不變化的,當到達沒有運行BGP的路由器D時,就沒法找到目標到IP的路由。只能在運行兩個協議的B和E之間進行IGP域BGP的交換(在沒有進行重發布狀況下)。咱們作法是:
1.物理Full-Mesh(全部路由器都運行BGP)
2.邏輯Full-Mesh
3.重發布
管理大型BGP對等體關係
1.對等體組
用一個名字和一系列的路由策略來定義一個對等體組,一樣的屬性會設置在更新消息中傳給幾個對端。
把一些具備相同配置的路由器華爲一個組,這樣對這個組進行操做,就至關於對每一個成員進行操做了。
命令:nei ccnp remots-as 20 ; nei **** peer-group ccnp
2.社團
四個屬性:默認狀況下定義的社團屬性不會傳遞,咱們能夠經過:nei *.*.*.* send-community向鄰居發送。
no_export:不會傳到ebgp對等體,可是若是配置了聯盟,那麼會傳輸給聯盟子AS。
no_advertise:配置了這個屬性的路由不會傳出任意的bgp對等體。
local_as:這個不會傳給ebgp對等體,若是配置了聯盟,也不會傳給聯盟內的子as。
internet:路由的默認屬性,此屬性表示此路由能夠無限制的傳輸。
在描述BGP團體中,使用AA:NN的新格式,而思科默認使用久格式:NN:AA,咱們能夠在全部路由器上使用命令:ip bgp-community new-format來支持新格式,此時使用:set community 來打上社團名稱。
3.路由反射器
先找到要做爲路由反射器的路由器,而後在RR上分別對每一個鄰居作:nei **** route-reflector-client,將鄰居路由器做爲路由反射器的客戶端。而後每一個客戶端與RR創建BGP鄰居便可。
路由反射器的原則:除了非客戶端不可以反射給客戶端外,其餘形式任意兩種均可以互相傳遞。
路由反射器經對等體的數目從n(n-1)/2減小到n-1條,路由反射器和它的客戶合稱一個簇。
注意路由反射器反射的原則:1.從非客戶端學到的iBGP對等體學習到的,只將它反射給客戶。2.從客戶學習到的能夠傳輸給客戶和全部的非客戶。3.從ebgp對等體學到了,能夠反射給全部的客戶和非客戶。
路由反射器內部的放緩靠的是,Originator_ID和Cluster_LIST
Originator_ID:這個是本AS內路由發起者的RID。路由反射器不會將一條路由公佈給路由的發起者,TT不會將一條路由公佈給路由的發起者。不過即便發起者收到一個帶它本身的RID的更新消息,它也不理睬該消息。
而一個AS內的沒一個簇必須用一個惟一的4字節簇ID來標識。若是簇內只有一個路由反射器,那麼簇ID就是路由反射器的RID,若是簇內包含多個路由反射器,必須給每一個RR配置一個簇ID.
4.聯盟
能夠將一個大AS劃分陳成會員自治系統
聯盟內的選路規則:到聯盟的外部eBGP路由優先到自制系統成員的eBGP,而後又優先於ibgp,而Next_Hop、MED、Local_PREF屬性也能夠傳遞。
路由過濾
使用AS_PATH實現AS的過濾。
命令:ip as-path access-list n deny regexp
在進站或出站過濾:nei **** filter-list as-path-filter in|out
使用filter-list調用as-path acl,實現基於AS編號的過濾。
使用route-map實現流量的過濾
route-map name permit|deny sequence
match ip add ***
set ***
而後基於接口調用:nei **** route-map XX out|in
使用前綴列表代替acl來實現更爲精確的匹配:
ip prefix-list ** seq 5 permit|deny 192.168.1.0/24
咱們使用aggregate-address 192.168.1.0 255.255.255.0去發佈聚合路由,而後使用關鍵字:suppress-map MAP 抑制發佈聚合路路由後中再去發佈該條明細路由條目。
這裏具體作法是:使用suppress-map調用route-map,而後在route-map下去match一個acl或者去match一個prefix-list,而後在acl中寫入要被抑制的明細路由。
而在默認狀況下BGP發佈聚合路由的時候也同時也會發布明細路由,此時咱們能夠經過添加關鍵字summary-only僅發佈聚合路由。
還能夠經過attribute-map來改變聚合路由的屬性,好比從ospf重發布進BGP,其屬性爲Incmplete,咱們能夠經過Attribute-map將其屬性更改成igp。命令:aggregate-map **** attribute-map ORIGIN
route-map ORIGIN
match ip address *
set origin igp
咱們能夠經過在aggregate-map後面的as-set關鍵字給聚合路由加上無需的as號,這樣能夠恢復聚合路由的環路檢測功能。
advertise-map抑制聚合路由繼承某條明細路由的屬性。
bgp小知識:
經過:bgp bestpath as-path ignore選路不考慮as-path長度,這樣是與其餘廠商兼容。
經過:nei maximum-prefix來限制從鄰居收到前綴的數量:nei **** maximum-prefix 300 90 warning-only(超過最大300條目的90%時發佈警告信息,當超過300後則donw掉鄰居關係。)
經過:neighbor shutdown中斷對端鏈接,可是不刪掉配置。
timer bgp設置計時器,默認60s的keepalive和180s的保持時間。
BGP後門路由
咱們可讓AS50與AS75之間的某些關鍵業務走RIP這個後門鏈路,好比咱們讓AS50中的172.17.0.0和AS75的172.18.0.0之間的通訊走RIP鏈路,而後讓NAP鏈路充當備份鏈路。這裏問題是AD的限制,會優先選擇eBGP。能夠經過network命令在BGP下宣告各自的學習到對方被設置爲後門路由的BGP路由,因而就將eBGP路由轉化爲iBGP路由,這樣RIP的AD就小於了iBGP,此時位於這兩個網段的通訊就會走後門路由。不過這裏會有一個問題,AS75會eBGP發佈該路由,這樣的話在AS100和AS200的路由想要訪問172.17.0.0網段的時候也會先發布到AS75而後走後門路由,由於在選路的時候會根據第5個ORIGIN屬性選路,從AS50發過來的爲Incomplete,從AS75發過來的爲IGP。咱們如何解決這個問題呢?這裏咱們引入了後門路由,分別在AS50和AS75內發佈從對方學習到的後門路由:network 172.18.0.0 backdoor。network backdoor的做用於network效果同樣,都是將eBGP路由看做iBGP,修改AD爲200,只是backdoor路由不會向eBGP宣告這條後門路由罷了。
BGP的過濾路由,咱們使用neighbor *.*.*.* distribute-list 1 out 調用acl。
咱們再去配置acl:access-list 1 deny 具體路由,而後access-list 1 permit any 容許全部沒deny的路由。
咱們能夠使用neighbor next-hop-self命令而不用考慮向一個iBGP對端公佈一條eBGP路由,該路由的下一跳地址不能改變的原則。
BGP檢測到故障的IBGP鏈接而且將它倒換到另外一條鏈路上時間極可能超過180s,經過timer bgp來改變bgp的keepalive和保持時間。好比咱們將keepalive時間設置爲3s,而後保持時間設置爲9s。就使用下列命令:
timer bgp 3 9
eBGP讀條問題,咱們知道eBGP的TTL值爲1,咱們創建eBGP鄰居關係時是指接口IP,若是咱們想以RID創建eBGP關係時,咱們的作法是修改eBGP經過路由的TTL,即:neighbor *.*.*.* update-source loopback 0
而後修改跳數:neighbor *.*.*.* ebgp-multihop 2
使用聚合路由的方法是:aggregate-address命令:注意aggregate-address名列後面的選項。
有:summary-only:這個選項是聚合路由器只宣告聚合後的路由。默認狀況下bgp聚合路由器會宣告聚合後的路由和明細路由。
還有社團屬性咱們是經過route-map(路由映射來完成的)
好比:
route-map COMMUNITY permit 10
match ip address perfix-list AGGREGATE
set community no-export | local-as | no-advertise
經過acl或者prefix-list去挑選出指定路由。
咱們還能夠抑制聚合路由的一個子網,咱們能夠經過suppress-map選項
好比:
aggresss-address *.*.*.* 255.255.255.0 suppress-map SUPPRESS調用route-map
route-map SUPPRESS permit 10
match ip address 1
acl或者是prefix-list
改變聚合的屬性:attribute-map選項:
例如:
aggregate-address *.*.*.* 255.255.255.0 attribute-map ORIGIN調用route-map
route-map ORIGIN permit 10
match ip address 2
set origin incomplete 將起源屬性改成重發布的incomplete。
咱們知道聚合的AS-PATH只包含發起該聚合路由的AS號。在聚合路由中設置ATOMIC-Aggregate和Aggregator則是用於通告丟失的具體信息。可是若是來自聚合路由AS內的一條明細路由失效,那麼就會去匹配這條聚合路由,而後傳輸先去,而後路由器在查找路由表,發現沒有該條路由,而後纔去丟失。到一個無效目的地的數據包在被丟失以前是,沒有必要通過兩個路由器轉發。咱們除了公佈as-path屬性中的as-Sequence以外,還能夠在aggregate-address命令中加入as-set關鍵字,來解決這個問題,其惟一的做用是:恢復被聚合路由丟失掉的環路檢測功能,AS-PATH的做用是:恢復被聚路由丟失掉的環路檢測功能。
aggregate-address最後一個選項是:advertise-map。advertise-map選項指向一個名爲ALLOW_Route的路由圖,該路由圖標識構成聚合路由基礎的更具體路由。
咱們也可讓BGP選路時忽略AS-PATH長度,命令爲:bgp bestpath as-path ignore來通知Cisco路由器在路由選路的中忽略AS-PATH的長度。
咱們也能夠限制從鄰居接收的最大前綴的數量:
neighbor *.*.*.* maximum-prefix 300 90 warning-only
這個做用是:當從鄰居收到最大前綴數據的90%時就會產生一個日誌消息。當超過最大限制300時就會在超時後down掉鄰居關係。
咱們能夠經過clear ip bgp +路由。而後經過clear ip bgp *(shell正則)清理全部的BGP鏈接。
還能夠不down掉鄰居關係,直接觸發到該鄰居的更新信息:clear ip bgp * soft out(軟清)
當改變的策略影響到入業務量時,咱們能夠使用入站軟從新配置。:nei *.*.*.* soft-reconfiguration inbound命令,而後對業務量收到新策略影響的每個鄰居使用clear ip bgp soft in命令。
經過AS_PATH過濾路由
作法是:ip as-path access-list 命令定義了訪問列表的一個變量,該變量用來定義AS號。
這裏as-path使用的是正則表達式(regular expressions)
以下經常使用到的過濾as-path語句:
只公佈到本身AS內部的路由:ip as-path access-list 1 permit ^$
拒絕任何在AS50包括AS50的更新消息:ip as-path access-list 1 deny _50_
結尾默認拒絕使用。容許全部:ip as-path access-list 1 permit .*
僅接收來來自AS50的路由:ip as-path access-list 1 permit ^50$
而後在bgp進程下去調用route-map:nei *.*.*.* route-map MAP out
而後寫route-map:
route-map MAP permit 10
match as-path 1 調用as-path列表。
本地的優先級:local_pref。默認全部公佈給ibgp對等體的路由都是100。能夠經過ip default local-preference命令來更改缺省值。也能夠經過set local-preference命令來改變獨獨立路由的Local_Pref
用法:
在路由進入方向打上這個屬性:
nei *.*.*.* route-map PREF in
route-map PREF permit 10
match as-path 2
set local-preference 200
ip as-path access-list _50$ 表示起源於AS50的路由
MED值,影響相鄰AS內的路由決定。這個是在路由出接口打上這個屬性。
MED值,做爲一種度量(metri),越低越優先。
一樣在route-map下調用acl或者prefix-list,而後打上相應的屬性:set metric 200
注意:默認狀況下只比較到達同一AS內相同目的地的多條路徑,咱們也能夠經過命令:bgp always-compare-med來比較來自不一樣AS的多條路徑的MED值。
這裏還有另一個命令:set metric-type internal,這個能夠將MED值設置爲與到同一目的地的IGP路由相同的度量,這樣能夠避免次優化路由的問題。
附件as-path:
能夠使用set as-path prepend命令修改它公佈路由的as_path屬性。
例如:
nei *.*.*.* route-map PATH out
route-map PATH permit 10
match ip address 10
set as-path prepend 30 30
注意:咱們通常打prepending多選的as號都是通告路由器所在as的as號,通常不要隨便寫,有可能與之後所用到的衝突,那樣的話衝突AS將不會接受該路由。
Cisco NAT
思科NAT有四種地址:
1.內部本地
2.內部全局
3.外部全局
4.外部本地
查看NAT映射表:show ip nat translations(翻譯超時時間爲86400s,1hour)
可是爲了能從外部訪問,好比:郵件、Web、FTP服務器,咱們必須使用靜態映射了。
將一個大地址多路複用到一個小型地址池的問題,即容許多個地址映射位一個地址,Cisco把這個功能稱之爲端口地址翻譯(PAT),咱們有時候也將其稱之爲端口重載。
NAT的問題:
1.通過NAT轉化後,IP包頭的校驗和要進行從新計算。
2.分段。咱們知道IP數據包超過MTU會進行分片,而端口號等四層信息僅在IP的第一個分片,若是分片後的某個片斷在第一個分片以前到達NAT,那麼NAT只有先暫時緩存這個片斷而後等第一個分片到後才能處理後續分片。
3.加密,NAT可以改變IP地址信息,可是當數據通過加密後NAT就沒法查看到這部分數據了,所以若是要執行NAT那麼IP地址信息和任何基於IP地址信息(如TCP校驗和,由於存在僞首部)得到的信息都不能被加密。例如IPSec穿越NAT設備時,這個必須將NAT放在安全一側,而不能放在加密的路徑上。
4.安全,雖然採用NAT技術隱藏了對外隱藏了內部網絡的細節,可是NAT並不會採起任何措施去防範DOS攻擊。
FTP基礎
FTP服務主要用來傳輸文件,而與HTTP傳輸文件不一樣,FTP不具備多媒體瀏覽的功能。
FTP協議有兩種工做方式:PORT方式(主動式)和PASV方式(被動式)。
PORT(主動):客戶端(大於1024端口)向服務器的FTP控制端口(21)發送鏈接請求,服務器接收鏈接,創建一條命令鏈路。當須要傳送數據時,服務器從數據端口(20)向客戶端的空閒端口(大於1024端口)發送鏈接請求,創建一條數據鏈路來傳送數據。
PASV(被動):客戶端(大於1024的端口)向服務器的FTP端口(21)發送鏈接請求,服務器接收鏈接,創建一條數據鏈路。當須要傳送數據時,客戶端(大於1024端口)向服務器的空閒端口(大於1024端口)發送鏈接請求,創建一條數據鏈路來傳輸數據。
主動與被動優缺點:
主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。由於FTP服務器企圖與客戶端的高位隨機端口創建鏈接,而這個端口頗有可能被客戶端的防火牆阻塞掉;被動FTP對FTP客戶端的管理有利,但對於服務器端的管理不利。由於客戶端要與服務器端創建兩個鏈接,其中一個鏈接一個高位隨機端口,而這個端口極可能被服務器端的防火牆阻塞掉。
IE瀏覽器默認是主動(PORT)模式,爲了防火牆的兼容性(還有一個是爲了DSL調制解調器的兼容),咱們能夠在高級中選擇使用被動FTP模式。
SMTP,簡單郵件管理協議,通常包含域名,而不是IP地址。不過,它請求郵件傳送時,能夠用IP地址而不用域名。所以Cisco NAT檢查SMTP消息中相應的參數,當發現IP地址時就進行翻譯。
SMTP協議用於上傳郵件和在服務器間傳送郵件,與之不一樣,郵局協議(POP)與Internet消息訪問協議(IMAP)僅用於從郵件服務器上下載郵件到客戶端。而且這兩個協議在消息實體中都只用主機名,而不用IP地址,所以這些協議通過NAT時不須要進行特別的檢查。
SNMP,簡單網絡管理協議,採用MIB(消息信息庫)來對各式各樣的網絡設備進行管理。除了標準的MIB外,還有個廠商的設備建立本身專有的MIB。
交換知識點
VLAN
MAC地址表存放的內容:MAC、PORT、端口所處的VLAN。
當交換機收到 目標MAC爲廣播、 未知的單播幀時都會在全部接口廣播該幀。
上面這個緣由也是咱們要劃分廣播的一個主要緣由: 隔離廣播域,限制廣播、組播傳播的範圍;提升了安全性,一旦一臺PC中毒能夠限制在一個VLAN中;便於管理。
咱們在劃分VLAN的時候最好每一個VLAN都劃分到不一樣的子網當中。這個主要是方便跨VLAN訪問。
VLAN的實施
端到端VLAN: 指在不一樣的交換機上配置相同的VLAN,VLAN的劃分不依賴於物理位置。若是兩各用戶位於不一樣交換機上的相同VLAN,此時則須要打標記。這個主要是適合8/2的流量,即大部分流量都在內網,此時爲了提升效率,內網流量能夠不一樣通過核心層的幫忙,直接由底層負責轉發。
本地VLAN:即指本臺交換機上的VLAN,本臺交換機上的VLAN之間的通信不須要打標記,只須要三層交換或者單臂路由。
VLAN一種是基於端口的靜態VLAN、另外一種是基於MAC的動態VLAN(VLAN與MAC綁定)
配置vlan:int vlan 10 name sys
而後將相應的接口加入到VLAN中:switchport access vlan 10 ; switchport mode access
對於動態VLAN,則須要用到VMPS(VLAN Management Policy Server)管理策略服務器。這個是經過VLAN Query Protocol(VQP報文進行傳輸的)
查看MAC地址表或者CAM表:show mac-address aging-time
默認MAC地址表老化時間爲 5min,不過當咱們把網線拔掉後該條目則當即被刪除。
能夠經過命令修改:mac-address-table aging-time 100 (vlan n,也可針對VLAN該。)
VLAN總數爲4096個,默認都在VLAN1,咱們能夠手工分配的2-1001,1002-1005保留用,1006-4095擴展。建立擴展VLAN的要求:1.型號必須支持。2.vtp模式爲transparent。
對於access端口咱們能夠使用命令:switchport mode access將端口設置爲access,同時開啓PortFast特性,而且禁用EtherChannel特性。
Trunk
默認狀況下交換機之間的鏈路僅能傳輸vlan1的信息,所以必須在交換機之間作trunk鏈路。
封裝和模式
封裝分爲兩種:1.802.1Q,2.ISL
咱們知道在二層一臺網幀中是沒有標示VLAN信息的字段的,所以咱們須要在以太網二層幀上作一些動做,ISL是封裝一個新的二層頭部,最多支持1024個VLAN;802.1Q是插入Tag,最多支持4096個VLAN
當採用這兩種形式封裝的話,接口MTU必須大於1500,咱們稱之爲小巨幀。
Trunk模式
DTP幀:交換機的接口週期發送Dynamic Trunk Protocol,主要主動協商爲trunk。
access:忽略DTP幀。
trunk:發送和響應DTP
desirable:主動發送和響應DTP(默認)
auto:不發送但相應DTP。
nonegotiate:不發送DTP幀,也不接收。通常和trunk合用,好比在交換機之間咱們必需要其trunk,咱們能夠不讓接口發送DTP消息以節省鏈路帶寬,通常都是將這兩個命令一塊兒使用。
若是在沒有啓用802.1Q的設備或者access端口收到一個802.1Q幀,那麼標記的數據會被忽略,而數據包則會做爲以太網幀被交給二層。
通常咱們在起trunk的交換機的接收上使用如下命令:
switchport trunk encapsulation dot1q
switchport mode trunk
switchport nonegotatie
switchport trunk allowed vlan 1,5,11,100-1000
switchport trunk native vlan 1
Native VLAN(本徵vlan,802.1Q存在的,不打標籤,默認VLAN1)
一條鏈路兩邊trunk接口的vlan必須一致,不然會有CDP-4-NATIVE-MISMATCH報錯信息。
802.1Q Tunneling(雙重Tag)
好比對於運行商提供的是一個二層網絡,同一臺交換服務與兩個公司,可是這兩個公司所處的VLAN有重疊。
咱們的作法就是在運行商的交換機上將不一樣公司劃分到不一樣的大VLAN中,這樣公司內的數據幀在通過運行商提供的交換機傳輸的時候就被打上了二層標籤。
外層tag與內存tag沒有關係。
命令:首先在接公司的交換機的接口上劃分大vlan:switchport access vlan 30
而後:switchport mode dot1q-tunnel便可。
VTP
Server
Clinet
Transparent
VTP的Server和Clinet同步vlan信息的時候都是根據Revision(修訂號)學習的,不管是Server仍是Client,只要誰的修訂號大,就會學習對方的VLAN信息。注意Revision號指的是變更數,只要增長刪除修改一項,這個修訂號就會增長1。
VTP修剪技術會使用VLAN通告消息來判斷Trunk鏈接什麼時候正在擴散沒必要要的流量。VTP修剪能夠將泛洪的流量限制在剛好的範圍內,能夠提升鏈路可用的帶寬。這個能夠經過vtp pruning來啓用。
p-vlan(私用vlan):隔離同一VLAN中處於同一IP子網內終端設備間的通訊,
EtherChannel
PAgp(端口彙集協議)和LACP(鏈路彙集協議)
PAgP模式:(端口之間發送PAgP數據包進行協商,這點相似於VLAN的DTP)
auto 咱們建議使用on模式,來禁止發送PAgP的數據包,以此來減小鏈路上沒必要要的流量。
on
desirable
non-silent
LACP模式:
Passive
Active
on
EtherChannel負載分擔選項:
使用port-channel load-balance ?來進行選擇。
好比二層交換默認採用src-mac。而三層端口默認採用soc-dst-ip
VLAN間路由
可以提供VLAN間路由選擇的功能:
1.三層交換;2.單臂路由;
單臂路由:
若是一臺交換機支持多個VLAN,可是沒有三層功能,那麼其必須靠一臺外部路由設備來實現這個功能。
某些交換機使用的是三層模塊,有的則是使用技能路由功能。
作法是:經過一條802.1Q Trunk鏈路與臺路由器相連,而且路由器接口被劃分爲多個邏輯子接口,每一個子接口用於一個VLAN。
缺點:路由器存在單點故障;2.Trunk鏈路容易形成擁塞。3.過大的交換延遲(主要存在與路由器)
經過三層交換
在默認狀況下,交換機會爲默認VLAN(VLAN1)建立一個SVI接口,以放行遠程交換機的管理鏈接。作法是:建立一個VLAN接口,爲每一個VLAN的SVI接口分配一個IP地址,而後將其做爲VLAN內主機的默認網關,用來對這個VLAN的流量進行路由。
有點是速度遠遠快於單臂路由,而且不須要額外的路由器
咱們給每一個SVI接口都配置上IP地址,注意全部交換機上的VLAN配置必須相等,及時某臺交換機上沒有相應vlan也要配置SVI接口並配上IP地址,這個爲了實施動態協議,而後其餘vlan內的主機可以訪問。而後運行動態協議:rip、ospf均可以,而後在交換機之間的鏈路上起trunk,這樣不一樣vlan間的數據就會經過trunk鏈路達到另一臺交換機上。
STP(生成樹)
STP提供二層冗餘鏈路,消除了因爲單點故障所引發的網絡問題。
STP的種類:
CST(公共生成樹):全部VLAN公用一個802.1D的生成樹。
RSTP(快速生成樹,802.1w),思科交換機默認模式。
MST(多生成樹,802.1s)
PVST+(每VLAN一個生成樹)
PVRST+(每VLAN一個快速生成樹),思科交換機默認模式的加強版本。
STP計算步驟(越小越優先)
1.選舉根橋: 比較BID(網橋優先級(默認32768)和網橋基MAC組成),這個咱們能夠經過命令手工指定根橋:spanning-tree vlan 1 primary,其實這個是就是將交換機優先級改成8192
2.選舉跟端口:非根橋上到達根橋最近的端口即cost值最小的端口。
目前計算的標準是:10M的是100;100M是19;1000M是4;10000M是2。
若是有多個端口路徑開銷相同:就會比較上級交換機的端口ID(端口優先級(128)和MAC地址)
3.選舉指定端口:根橋上的全部端口都是DP,一條鏈路有且只能有一個DP。
先根據所在網橋的跟端口到達根橋的cost值,越小越優先,而後再根據上級交換機的端口ID(優先級+MAC),上級指的是由該端口出發的上級交換機。
STP端口狀態:
1.Blocking(阻塞):20s 此狀態不會參數數據幀的轉發,不會發送BPDU,但會接收BPDU來判斷根橋的位置。若是在20s內沒有收到BPDU,那麼就會進入偵聽狀態。
2.Listening(偵聽):15s 已經過接收BPDU判斷出要參與數據幀轉發,因而開始發送BPDU,這個狀態是交換機啓動後的默認端口狀態,由於此時他認爲網絡中只有本身一個交換機。若是處於偵聽狀態的交換機發現本端口在新的生成樹中不該該由此端口轉發,會再次回到阻塞狀態。
3.Learning(學習):15s 開始學習MAC地址表。
4.Forwarding(轉發):收發數據幀和BPDU。
5.Disabled(禁用):不會參與生成樹的計算。
交換機上一個原來被阻塞掉的端口因爲在最大老化時間內沒有收到BPDU,從阻塞狀態轉變爲偵聽狀態,而後通過15s後變爲學習,再通過15s進入轉發狀態。
當二層拓撲發生變化,新的配置消息要通過必定時延才能傳播到整個網絡,這個時延被稱爲轉發延遲(Forward Delay),默認爲15s。
RSTP端口角色:
Discarding(丟棄)
Learning(學習)
Forwarding(轉發)
RSTP多了一下端口:
Alternate(替代端口):用來替代去往根橋的端口(跟端口),跟端口宕掉後將從替代端口到跟端口。
Backup(備份端口):用來對指定端口備份。這個是交換機的
注意:!!!
一個交換機開機狀態下端口角色是 從偵聽狀態開始的,即經過15s的偵聽和15s的學習, 總共30s狀態到轉發。前提是拋出開機自檢,從端口啓動過程開始計算。
STP拓撲變化泛洪過程:
1.拓撲發生變化的交換機向跟橋方向發生TC位置位的BPDU(TCN)。
2.上級交換機收到TCN後,返回TCA確認收到的TCN,直到根橋收到。
3.根橋產生新的BPDU向下傳播泛洪。
STP的優化
PortFast
當咱們在端口啓用PortFast時,此時交換機會節約30s時間(15s偵聽和15s學習時間),用在接PC或服務器的接口,由於接PC或者服務器這樣的數據端口,沒有必要參與到生成樹的計算,經過PortFast接口禁用了STP,這樣二層access端口會當即進入轉發狀態。這個主要是爲了防止DHCP超時,主機爲了獲取IP地址。
UplinkFast(倒三角)
主要用在接入和匯聚這件的冗餘鏈路,實現跟端口的備份,當一個交換機的跟端口down掉後,通常會通過30s時間實現跟端口的切換,實施uplinkfast後的端口能夠快速實現這個過程。
BackboneFast(正三角)
主要用在匯聚層設備之間的鏈路,當跟端口down掉後,能夠快速將以前block掉的端口轉化爲跟端口。這個會節約20s的blocking時間。
以上都是傳統STP須要的技術,目前思科交換機默認的是PVRST+,
PVRST+
對於802.1w和802.1s來講,其網橋優先級都加上了12bits長的擴展ID字段,這樣網橋優先級都是以4096爲基準往上增長的。
對於802.1w來講只有三種端口狀態:
1.discarding(丟棄): listening、blocking、disabled
2.learning
3.forwarding
快速生成樹的端口:
替代端口(AP):這個是至關於UplinkFast,對跟端口的替代端口。從別的交換機收到更好的BPDU,當交換機上行鏈路down掉後,這臺交換機從新發送BPDU宣告本身爲根橋,而後被的交換機收到後就會向跟發送查詢,看是否還在,此時收到回覆還在,因而就向這臺交換機發送消息稱跟還在,你從我這走吧。
備份端口(BP):對指定端口的備份。 從同一臺交換機收到更高的BPDU。這個交換機到根橋必須有一條冗餘鏈路的纔能有備份端口。
RSPT提議和承認機制
Proposal and Aggrement
RSTP是分段收斂。當咱們增長C到根那條鏈路時,其收斂過程以下:
1.根橋發出Proposal置位的BPDU;
2. 下級交換機收到後,而後將除根端口意外的全部端口處於sync狀態(若是自己端口是阻塞的那就同步了,好比AP、BP、Edge Port。若是是轉發端口那就直接Block掉。),而後向跟迴應Aggrement消息以後本段鏈路收斂完成。
3.而後下級交換機也發送Proposal置位的BPDU,進行相似的收斂過程。收斂速度很是快,幾秒就搞定。
注意:RSTP中當交換機檢測到拓撲改變時是直接進行收斂的即均可以發BPDU ,而不是像STP同樣,只有根橋發送BPDU。
RSTP定義的鏈路類型:
1.點到點(全雙工)
2.共享(半雙工,接了hub)
生成樹加強
BPDU Guard(BPDU防禦)
若是在啓用了PortFast特性的端口上收到了BPDU的,那麼BPDU Guard就會使其進入「err-disabled」狀態。爲了不橋接環路,BPDU Gurad會禁用此端口。
BPDU Filter(BPDU過濾)
防止啓用PortFast端口上發送BPDU,由於與主機或服務器相連的端口一般不須要參與STP計算。
Root Guard(跟防禦)
跟防禦可以強制讓端口成爲指定端口,進而防止新接入的交換機成爲根交換機。即跟防禦提供了一種強制部署根網橋的方法。啓用根防禦的端口上接收到更優的BPDU時,那麼端口就會進入 root-inconsistent(不一致根)的狀態(處於 監聽狀態),這樣的話原有的網路拓撲會獲得保護,當交換機從該端口再也不收到更優的BPDU時,該端口會最終過渡到轉發狀態。
Loop Guard(環路保護)
當網絡中的的阻塞端口錯誤的過渡到轉發狀態時,這就意味着網絡中產生了環路,此時啓用Loop Gurad的接口就會將該接口進入到 loop-inconsistent(不一致環路) 阻塞狀態,一旦正常後則自動恢復。另外一種反之環路的方式是:單向鏈路檢測( UDLD)失敗。
對於DHCP服務器來講,因爲VLAN會隔離廣播,這樣的話咱們必須爲每一個VLAN建立一個DHCP服務器,其實沒有必要,咱們能夠在交換機上使用:ip helper-address +DHCP服務器的IP地址便可。這就是DCHP中繼。注意:ip helper-address這條命令不過使三層設備傳輸DHCP UDP包,也會傳輸DNS,TFTP等數據包
CISCO交換技術
1.Process Switching(進程交換)
這個會嚴格按照每一步進行走,好比修改二層頭部,CRC校驗,查找路由表等。這是最佔用系統資源的。速度最慢。
2.快速交換(Fast Switching)
第一個包進行進程交換後,路由器會建立交換緩存,修改數據幀後直接送到出站接口。
3.思科快速轉發(CEF)
會實現根據路由表簡歷FIB(轉發信息庫),設備會利用FIB表執行基於硬件的轉發。
Catalyst交換機中實施冗餘的Supervisor引擎
HSA(High System Availability)
採用 徹底冷啓動的方式。
RPR(Route Processor Redundancy,路由處理器冗餘性)
處於備份狀態的引擎會同步部分配置, 當活躍引擎失效時,備用引擎開始重啓全部板卡,加載配置。
RPR:2~4min;RPR+30s~60s
RPR+:這種模式下冗餘引擎中的配置已經與活躍引擎中的配置保持同步, 不用重啓板卡,減小了倒換時間。不過當活躍和備用引擎的鏡像版本不一樣時,只能使用RPR。
SSO(狀態化故障倒換,Stateful Switchover)
當發生引擎倒換時RPR和RPR+對於用戶是不透明的,SSO模式的能夠減小二層流量的中斷時間。在SSO模式下,冗餘的Supervisor引擎啓動已經徹底初始化,而且啓動配置和運行配置和活躍引擎已經同步( 同步的內容比RPR模式更多),在倒換先後除了處於活動鏈路之外其餘鏈路並不會出現斷開。這種模式能夠實現 0~3s便可轉發二層流量。
HSRP(熱備份冗餘協議)
將虛擬IP和虛擬MAC,主機把虛擬IP配置爲本身的默認網關,主機利用ARP來解析默認網關IP對應的MAC時,ARP返回虛擬MAC,主機發往虛擬MAC的數據會由虛擬路由器組中處於活躍的路由器承擔。這些對於主機來講是透明的。
HSRP中的角色:
1.虛擬路由器:就是那對IP和MAC
2.活躍路由器:在HSRP組中,承擔實際數據轉發的路由器。
3.備份路由器:時刻監聽活躍路由器發送的Hello(3s,10s監聽不到就認爲主down掉了)包,一旦活躍路由器down掉,備用路由器承擔轉發角色。
4.其餘路由器:一個HSRP組中活躍路由器和備用路由器只有一個,其餘路由器處於初始狀態,當它們都發生故障時,其餘路由器就會精選活躍和備份路由器。
HSRP狀態:
1.初始(Inital)
2.監聽(Listen)
3.宣告(Speak)
4.備用(Stanby)
5.活躍(Active)
這個能夠配置搶佔模式的(Preempt)
備用和活躍路由器是根據 優先級(0~255,默認0)選舉的,優先級相同規則具備最高的IP地址的將成爲活躍路由器。
注意:HSRP所有配置都在VLAN接口下配置的。
HSRP的接口追蹤和路由追蹤
standby 1 track interface f0/0 10(接口f0/0down掉後,會將該路由器的優先級下降10)
咱們也能夠建立多個HSRP組,對於不一樣的IP子網配置不一樣的活躍路由和備份路由器
管理員能夠同時將某個設備設置爲VLAN生成樹的根橋和HSRP活躍路由器,這樣能夠保證二層轉發路徑直接到達三層的活躍路由器。須要爲每個VLAN配置一個組,一個IP地址。
VRRP(虛擬路由冗餘協議)
IEEE標準,不一樣與HSRP是思科私有標準。
VRRP中有一臺主用(Master)路由器,和一臺或多臺備用(Backup)路由器。
VRRP默認計時器時間小於HSRP,所以切換時間要好於HSRP,其對比圖以下:
VRRP使用虛擬IP或者真實IP均可以,真實IP那麼使用該地址的路由器稱爲主用路由器,虛擬IP則是最高優先級稱爲主用。
VRRP默認優先級爲100,當優先級爲0表示該路由器不具有選舉爲佔用路由器的資格。這點同OSPF的DR與BDR的選舉。
vrrp 1 ip ****
GLBP(網關負載分擔協議)
GLBP是思科私有協議,客戶發往單一默認網關地址的數據幀會由多臺路由器共同承載。
AVG(Active Virtual Gateway):一個GLBP組中的成員會選舉出一個網關,稱爲該組的AVG。其餘組成員做爲備份,ABG會爲GLBP組中的每一個成員分配一個虛擬MAC地址。
AVF(Active Virtual Forwarder):AVG會爲網關分配虛擬MAC,每一個網關負責轉發到本身虛擬MAC地址的數據包。
各交換機最大mac條目
交換機:
2960 8000條
3560 12000條
3750 4k
3840 32000條
4945 32768條
6509 64k
7606 路由器,企業或運行商或數據中心。
路由器:
1921
2811
3825
路由器CISCO開頭或者直接數字
交換機WS-C3560-48T
Linux基礎
網易研究院,杭州
9月9號。2:25
查看superblock:dumpe2fs -h /dev/sda1
磁盤分區:fdisk
磁盤格式化:mkfs -t ext3 /dev/sda1
磁盤檢查:fsck -C -t ext3 /dev/sda1 這個命令呼叫的是e2fsck這個軟件。
檢查磁盤壞軌:badblocks
設置系統標頭:e2label
掛載:mount -a -l 咱們要掛載光盤:mount -t iso9660 /dev/cdrom /media/cdrom
掛載的時候還能夠使用-o指定掛載後的權限。
卸載裝置:umount -f(強制)+裝置或者目錄
Linux下全部的裝置都以檔案來替代,反過來檔案以major(主要裝置代碼)和minor(次要裝置代碼)的
數值來表明裝置。
若是咱們想開機掛載的話須要修改:/etc/fstab。
swap分區的功能是應付物理內存不足的狀況。
free來查看內存的使用量:free | grep -n "Mem:" | awk '{print $4}' 同時也能夠查看交換分區的使用狀況
。
關掉swap文件:swapoff /tmp/swap
對硬盤的sda1的第一個分區進行備份:dd if=/dev/sda1 of=/uestc/mbr bs=512 count=1
superblock大小爲1kb
ls -l第一行的total爲該目錄消耗的總block大小,這個咱們能夠經過ll -s來詳細觀察目錄下每一個文件及目錄
的block節點的使用狀況。
查看目錄消耗的容量:du -sb /etc/ 以字節顯示;du -sm /dev/以兆顯示
linux常見壓縮擴展名即命令:
*.Z compress uncompress 注意壓縮源文件會被刪除,保留用-c
例如:compress -c /etc/passwd > /uestc/passwd.backup.Z
*.gz gzip
目前gzip能夠解壓compress,zip,gzip等軟件壓縮的檔案。
gzip -#用於指定壓縮比,-9最大,-1壓縮最快,默認爲-6,注意壓縮的時候會刪除源文檔,想要保留:
gzip -9 -c /etc/passwd > /etc/uestc/passwd.gz。這個能夠利用-v選項查看壓縮文件的壓縮比。
解壓縮用:gzip -d 。查看壓縮後文件的內容:zcat。
*.bz2 bzip2
這個使用狀況同gzip,查看壓縮文檔的內容用:bzcat
*.tar tar
*.tar.gz tar -zcvf打包壓縮,解包解壓縮:tar -zxvf
*.tar.bz2 tar-jcvf打包壓縮,解包解壓縮:tar -jxvf
打包的時候,將特殊的檔案或目錄移除在打包之列:--exclude="file"
好比:tar -jcvf /root/system.tar.bz2 --exclude=/root/etc* --exclude=/root/system.tar.bz2 /etc
/root
tarfile 僅僅打包。
tarball 打包+壓縮
dump備份,dump 0是徹底備份,dump 1是僅對dump 0數據變化的部分進行備份,一次類推。
dump -S /dev/sda1顯示出dump備份須要多少容量
dump -W 顯示出被dump備份過的文檔。
好比對/boot施行dump 0備份:dump -0u -f /uestc/boot.dump.0 /boot
若是咱們想對備份dump包施行壓縮的話:dump -0u -j -f /uestc/boot.dump.0 /boot
對dump備份恢復:restore
restore -t用於觀察備份文件的內容,相似於tar -t。例如:restore -t -f /uestc/boot.dump.0
相似的還有mkisofs創建光盤鏡像,cdrecord:光盤刻錄工具。
cpio能夠備份任何東西,不過cpio不會主動去找檔案來備份,咱們能夠用find命令去尋找。
備份:find /boot | cpio -ovcB > file(find默認 -print,即打印出找到的內容)
還原:cpio -ivcdu < file
查看:cpio -ivct < file
vim經常使用
aAoOiIrR
跳到指定行:nG或者:n
跳到第一行:gg
跳到最後一行:G
搜索關鍵字:/word
光標上面搜索第一個關鍵字:?word
繼續搜索下一個關鍵字:n 配合/word
繼續搜索上一個關鍵字:N 配合?word
搜索指定行替換全部:/1,ns/word1/word2/gc(c表明替換前須要確認)
向後刪除n個字符:nx
刪除或剪切光標所在行:dd
刪除或剪切光標所在行向下n行:ndd
刪除光標所在行到行末:dG
刪除改行最前面的字符:d0 相似刪除改行最後一個字符:d$
複製光標所在行:yy
複製光標所在行向下:n行
相似的還有yG、Y0、Y$
在光標所在行下一行粘貼:p
在光標所在行上一行粘貼:P
撤銷:u
重複上一個動做[Ctrl]+r或者使用「.」(沒錯是小數點)
:wq、:q、:q!、:w、:w!
將編輯的數據另存爲:w filename
在編輯的數據中,讀入另外一個檔案,並將內容加到光標所在行的後面:r filename
暫時離開vim到指令模式執行命令::!commond
設置行號:set nu
取消行號:set nonu
ab mymail danbocn@gmail.com AB替換
利用映射定義快捷鍵:map T :q! 這樣按下T就是強制退出vim的意思。
當系統宕機後,致使咱們正在編輯的文本沒法按正常流程關閉,此時咱們須要從新編輯的時候系統提醒有
人已經在編輯,咱們能夠經過刪除指定文本的.swp後綴文件,經過ls -al查看。
vim的配置文件在:/etc/vimrc,這個不建議修改,不過你能夠修改處在家目錄下的~/.vimrc
咱們使用cat -A發現win下的行末爲:^M$,而Linux行末爲:$。咱們能夠使用dos2unix和unix2dos互相
轉換。-k保留修訂時間不變。
wget+網址:直接下載網址內的程序。
語系轉換:iconv -f big5 -t utf8 passwd -o passwd.1(-f from, -t to, -o 保留源文件)
Shell,這個專門看一本書
當你使用login接口登入系統時,系統作了一下處理:
1.尋找/etc/passwd裏面有沒有你要輸入的帳號,有的話將對應的UID和GID(在/etc/group中)讀出來,
並讀出家目錄與Shell設定。
2.而後覈對密碼,Linux會進入/etc/shadow裏面對應的UID。
3.一切ok的話,進入Shell接管系統。
當root密碼忘記的時候:經過Live CD開機後掛載根目錄去修改/etc/shadow,將裏面root密碼字段清空。
重啓後root將不用密碼便可登陸。
有效羣組(當前用戶所處的羣組)和初始羣組(這個羣ID位於/etc/passwd中,而有效羣組位
於/etc/group中羣組後面)
觀察當前用戶所屬的有效組:groups
切換用戶羣組:newgrp
將用戶加入羣組中:root管理員:usermod;組管理員:gpasswd
新增長用戶:useradd,相關配置文件,passwd,usermod,userdel
useradd的默認參考文件:useradd -D(呼叫的源文件位於:/etc/default/useradd)
而UID和GID密碼參數在:/etc/login.defs
總結:useradd創建帳號時,會參考如下文件:
/etc/default/useradd
/etc/login.defs
/etc/skel/*(家目錄參考的基準目錄)
passwd +用戶 進行修改密碼
使用標準輸入來修改密碼:echo "abc123456" | passwd --stdin root
查看命令幫助文檔:man 1 passwd 查看配置文件幫助文檔:man 5 passwd
讓某個用戶失效:passwd -l danbo,解鎖某個用戶:passwd -S danbo
更加詳細的密碼設定:chage,好比:查看某個帳號的詳細密碼參數:chage -l root。這個主要是修
改/etc/shadow文件。
修改/etc/passwd文件的:usermod
刪除用戶:userdel
查看用戶相關信息:finger
增長用戶帳戶的額外信息,好比姓名、辦公室、電話等:chfn(change finger)
改變用戶shell:chsh
不管是chfn和chsh都是修改/etc/passwd文件
與用戶組相關的命令:
增長組:groupadd
改變組:groupmod
刪除組:groupdel
建立羣組管理員:gpasswd -A danbo groupname 這個是將danbo設爲羣組的管理員。
gpasswd -M user1 groupname 這個是將user1加入到groupname組中。
getfacl:取得某個檔案/目錄的ACL設定;
setfacl:設定某個檔案/目錄的ACL規範。
切換用戶su -(「-」必定要加,不然不會改變用戶環境變量)
sudo -u danbo touch /uestc/haah
以danbo用戶建立文件。
用戶可否執行sudo主要看/etc/sudoers的設定,使用visudo進行編輯。
sudo命令能夠是非root用戶在以root的身份去執行命令。
查看此時計算機的使用者:w who last lastlog(每一個帳戶最近的登陸時間)
使用者交談:write mesg wall write+somebody(ctrl+d結束)
發送郵件:mail danbo -s 「nice to meet you」 < filename(也可經過重定向導入事先寫好的文本)
接收郵件一樣使用mail,而後進入郵件後輸入?查看更多命令。
pwck:檢查/etc/passwd配置是否正確。
pwconv:
crontabl 計劃任務
linux工做安排種類:at和cron
at:處理僅執行一次就結束安排的指令,好比咱們要指定某個任務在指定時間內運行一次,那麼就會把任
務放到/var/spool/at目錄內,到指定時間就運行一次。(at time)
好比咱們要執行一個腳本:
at 3:00 tomorrow
at > /var/spool/at
at > Ctrl+D
at中的時間使用方法:
at now + 5 minutes任務在5分鐘後運行
at now + 1 hour 任務在1小時後運行
at now + 3 days 任務在3天后運行
at now + 2 weeks 任務在兩週後運行
at midnight 任務在午夜運行
at 10:30pm 任務在晚上10點30分
以前必定要確保atd服務處於啓動狀態:service atd start|status
編輯/var/spool/at目錄內
另外還有一個batch命令,這個是在CPU工做負載小於0.8時進行指令的下達。
crontab
首先確認這個服務啓動狀態:
service crond start|stop|restart|reload|status
也能夠在系統啓動的時候就啓動,編輯:/etc/rc.d/rc.local末尾加上:/sbin/service crond start
必須記住如下幾個:
crontab -u username #指定編輯某個用戶的crontab,只有root才能使用這個命令
crontab -e #編輯crontab的工做內容
crontab -r #移除全部的crontab內容
crontab -l #查閱crontab的內容
基本格式:
* * * * * command
分鐘 小時(24) 天 月 星期 cmd #週日能夠是0或7
輔助字符:
*:表明任意時刻都
,:表明分割時段
-:表明一段時間範圍內
/n:每隔n單位間隔。
下面舉一些實例:
注意後面的額command也能夠包含多個指令(每一個指令用;分割)
例如:天天形成3點20執行用戶目錄下的兩個指令:
20 3 * * * * (/bin/rm -rf /tmp;/bin/uptime)
注意cron服務最低偵測間隔爲分鐘。
當咱們配置完crontab以後,咱們必須重啓crond服務才能使其生效(針對unix,linux會自動執行):
service crond restart 或者 /etc/init.d/crond restart
cat /etc/crontab #這個是系統的crontab,注意與用戶的crontab不相同,這裏須要指定執行者。
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
SHELL=/bin/bash #使用哪一個shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #執行文件搜索路徑
MAILTO=root #執行例行工做發生錯誤將錯誤指令發給誰。咱們也能夠以郵件形式發給執行郵件:
MAILTO= danbo@gmail.com
HOME=/
01 * * * * root run-parts /etc/cron.hourly:
run-parts其實是個腳本,後面接目錄,也就是說,若是你想讓系統每小時主動幫你執行某個指令,將
該指令寫入腳本中,並將該腳本放入到/etc/corn.hourly/目錄下的意思。
crontab優化:注意將不一樣計劃任務執行時間儘可能隔開;並不須要輸出信息的結果導入到/dev/null中;周
和日月不能同時使用;
另外還有一個指令比較有用:anacron,當咱們的機器沒有24*7運行時,好比周末機器會停機一天,可能
在停機期間會有沒有執行的crontab任務,那麼利用anacron在機器開機後進行執行crontab,它會讀取時
間記錄(timestamps)瞭解到系統何時關機,而後分析如今與關機以前anacron之間的差別,就會發
現沒有執行的crontab了,而後就會執行以前沒有執lrontab。
操做系統總結:
程序與進程的區別:
程序只是一組指令的有序組合,是一個靜態的實體。
進程是一個動態的實體,有本身的生命週期。
Linux的進程狀態:
可運行態(Running 0,R):只有該狀態才能在CPU上運行。
可中斷的等待(Interruptible 1,S):處於這個狀態的進程由於等待某個事件的發生而被掛起,經過ps命
令絕大多數進程都處於Interruptible狀態。
不可中斷的等待(Uninterruptible 2,D):與S態相似,只是此時的進程是不可中斷的,包括利用kill -9
也沒法殺死這個進程。
暫停態或者跟蹤態(Stopped,Traced 4):工做在背景(暫停)或者處於排錯(Traced)狀態。
僵死狀態(Zomble 3,Z):程序已經終止但卻沒法從內存中移除,子進程終止,父進程殊不知道。
子程序與父程序
當咱們登入系統後會取得一個Shell,而後咱們利用這個Shell提供的接口去執行另一個指令,另外執行
的指令也有一個PID,那麼後來執行的那個指令的PID就是子程序了,而本來的Shell就是父程序了。
將程序置於背景下執行:cp file1 file2 &,此時bash會給予這個指令的工做號碼(job number)+PID此
時要注意導出的信息,咱們最好加上> /dev/null 2>&1
咱們也能夠將目前的工做目錄丟到後臺去執行:按下ctrl+z。注意:使用ctrl+z丟到背景都是暫停狀態
觀察背景工做狀態:jobs -r(列出處於運行態的工做)-s(列出處於暫停的工做)-l(列出全部)
將後臺工做拿到前臺:fg %n
咱們知道ctrl+z將目前工做丟到後臺中並暫停,那麼若是讓其工做呢?使用:bg %n
關掉後臺工做:kill
後臺指的是:避免在終端下按下ctrl+c中斷執行過程。
而前面講到的at是將工做放到後臺執行,這個與終端無關,也能夠使用nohop,這個可讓你在脫機或注
銷狀態下仍能夠運行。
nohup cmd (&)加上&帶包在後臺執行,若是你想讓在後臺的工做在你註銷後還可以繼續執行,就使用
nohup+&組合。
程序
觀察系統全部的程序:ps(靜態);top(動態);pstree(程序樹之間的關係)
ps -l:只查看本身bash的程序;
ps aux:查看全部系統運做的程序。
當使用ps -l觀察到一下:
F:程序的flag:4表明此程序的權限爲root;1表明此程序僅進行復制(fork),而沒有實際執行(exec)
。
PRI/NI:表示執行優先級,數字越小越優先。
PID和PPID:進程號和父進程號。
top -d 3 >/uestc/top.log 也能夠將top輸出的信息導出到top.log文檔中
查看本身bash的PID:echo $$,而後經過top觀察此PID:top -d 3 -p 13000
tty是本機登陸。
pts/0默認是從ssh網絡登陸
使用pstree時,咱們觀察到全部程序都依附於init這個程序下,使用pstree -p觀察到init的PID是1,由於
init是Linux內核啓動的第一個程序,而重啓init也就意味着重啓系統了(reboot)。
終止某進程:killall -9 httpd,其中9表示sigkill:表明強制中斷一個程序的進行。
而kill後面必需要跟PID或者job n服務區如:kill -9 %1)才行,跟服務名稱就須要用到killall了。
pgrep +服務區例如:pgrep ssh這樣就能夠找到相應服務區的PID
執行優先級:
PRI(new)=PRI(old)
nice可調整的範圍:-20~19,而通常用戶調節的範圍爲0~19(防止通常用戶搶佔資源)
用法:
nice -n +nice值 cmd:以新的nice值執行命令cmd(例如:nice -n -9 ps)
renice n PID:調整一個已經存在的程序的優先級。
free:觀察內存使用狀況,包括物理內存和虛擬內存(Swap)
cache與buffer的區別:
cache:緩存區,是高速緩存,位於CPU與主內存之間的容量較小可是速度很快的存儲器,Cache主要保
存CPU剛用過的數據,減小CPU等待時間。
buffer:緩衝區,用於存儲速度不一樣步的設備或優先級不一樣的設備之間的數據傳輸,減小進程間通訊的等
待時間。
查看系統內核相關信息:uname -a
查看系統啓動時間與工做負載(即top的第一行):uptime
查看網絡:netstat -tunlp(tcp,udp,以端口號顯示而不是服務名,處於偵聽,PID)
分析核心產生的信息:dmesg |more,好比查看網卡的信息:dmesg | grep -i eth
偵測系統資源變化:vmstat
內存中的全部數據都是寫入到/proc這個目錄當中,而且是以PID進行分目錄存儲的
fuser -k /dev/pts/0:強制清除掉某個用戶,能夠經過w來查看
或者使用:fuser -k /mnt/cdrom 或者使用umount
fuser還能夠找到那個程序在利用該檔案,好比當咱們卸載的時候發現device is busy,咱們能夠經過fuser
查看那個程序在利用該檔案,例如:找到使用/proc的程序:fuser -mvu /proc
咱們知道fuser是知道裝置或目錄找到使用其的程序,而知道程序如何知道其使用了哪些文件或裝置呢,這
個就須要:lsof,例如:lsof -u root
查看SELinux狀態:getenforce
關閉SELinux:臨時:setenforce 0;永久:修改/etc/selinux/config,將SELINUX=enforcing改成
SELINUX=disabled,重啓便可。
開啓SELinux:setenforce 1
守護進程deamon與服務service
系統爲了某功能必需要提供一些服務service;可是service的提供總須要程序來支持吧,我成稱這個程序
爲daemon。
daemon能夠分爲兩類:
1.stand alone:能夠自行單獨啓動服務,個別窗口負責單一的服務。
2.super daemon:同一窗口負責各類業務(xinetd)
跟service相關的目錄和文件:
/etc/rc.d/init.d包含全部service的控制腳本。
/etc/rc.d/rc*.d包含全部service自啓動選項配置。
/etc/sysconfg/*各服務的初始化配置文件。
/etc/*各服務各自配置文件。
/var/lib/*各服務數據庫。
例如:
重啓某服務:service crond restart或者/etc/init.d/crond restart這個是/etc/rc.d/init.d/的軟連接。
觀察某服務:netstat
Linux啓動過程:
1. 打開電源,加載BIOS開機自檢。
2. 透過BIOS找到啓動盤,讀取MBR的bootloader。(Linux主流的爲grub,包括兩個stage,stage1爲執
行bootloader的主程序;stage2:主程序加載位於/boot底下的配置文件。menu.lst提供選單)
3. 透過Bootloader取得內核並加載。
4. 內核啓動init進程。
5. init 程序開始執行系統初始化 (/etc/rc.d/rc.sysinit)
6. 依據 init 的設定加載 (/etc/rc.d/rc[0-6].d/*)
7. 加載本機設定 (/etc/rc.d/rc.local,用戶自定義開機啓動程序,只要將腳本放到/etc/rc.d/rc.local/目
錄內開機就會執行。)
管理系統服務開機啓動:chkconfig
chkconfig --list +服務名
chkconfig --level(0123456) 服務名 on|off
好比關閉httpd自啓動:chkconfig --234 httpd off
而後觀察狀態看是否關閉:/etc/init.d/httpd status或者service httpd status
圖像話管理工具:ntsysv
init加載主要流程以下:
1.init處理系統初始化流程/etc/rc.d/rc.sysinit,主要目的是在開始加載系統各項服務前,作好整個系統環
境,主要就是利用rc.sysinit這個腳本。
2.系統根據/etc/inittab設定選擇啓動級別,啓動位於相應目錄內的啓動服務/etc/rc.d/rc*.d/與啓動配置
文件/etc/sysconfig。
3.而後啓動用戶自定義開機啓動程序/etc/rc.d/rc.local。
第3步透過bootloader加載系統核心和核心模塊,核心位於:/boot/vmlinuz,而核心是壓縮的,解壓縮需
要RAM Disk/boot/initrd,做用:在沒有掛載/以前,系統須要先掛載磁盤驅動,因而就把initrd加載到內
存中,虛擬出「/」,而後完成vmlinuz核心模塊的加載。
核心模塊:/lib/modules/$(uname -r)/kernel,經過lsmod查看加載了哪些模塊。
利用modinfo能夠查看模塊詳細信息。
安裝模塊:insmod,移除模塊:rmmod
修改模塊的額外參數設定:/etc/modprobe.conf
當核心加載完成後那麼就會在內存中記錄:/proc/kernel
grub
安裝在mbr的grub主程序,最重要的任務就是從磁盤加載核心文件,以便讓核心可以順利驅動整個硬件。
grub識別硬盤的如:(hd0,0),第一個0表示搜索第一個硬盤,第二個0表示搜索硬盤的第一個分區。
忘記root密碼:
1.重啓
2.進入grub(在選單界面按e,而後在要kernel那一行按e,在行尾輸入single,回車後進入單用戶模式)
3.此時系統會以root的權限給你一個shell,而後直接passwd修改密碼便可,以後init 3進入字符模式。
在Red Hat系列Linux中都提供了系統設定工具:setup。咱們能夠利用這個綜合管理系統。
提供密碼驗證的服務器有NIS、LDAP
網卡配置:1.透過setup。2.編輯/etc/sysconfig/network-script/ifcfg-eth0
編輯DNS服務器:vim /etc/resolv.conf
重啓網卡配置:/etc/init.d/network restart
防火牆配置:1.透過setup。2.編輯/etc/sysconfig/iptables
硬件信息的收集:
/proc/cpuinfo;/proc/partitions;/proc/interrupts
vmstat:分析系統(CPU、RAM、IO)目前的狀態,分析IO也能夠用iostat
軟件安裝
Linux系統中可執行的文件都是二進制文件(binary program),而Shell Scripts其實也是利用shell這個程
序(例如bash)來執行的呢。
可執行問阿金的編寫過程:
1.寫程序,也就是源代碼,其實就是純文本文件。
2.編譯,就是將源代碼編譯成系統能看懂的二進制代碼咯,而此時須要專門的編譯程序(例如gcc,利用
已存在的庫函數編譯C語言寫出的源代碼)來處理,通過編譯與連結以後,就是可執行的二進制程序了。
事實上在編譯的過程當中還產生了目標文件(Object file),而後在引用外部子程序或者加入函數庫,將程
序代碼與函數庫連結(Link)以後才能執行。
make過程:
當執行make時,make首先會在當前目錄搜索Makefile這個文本文件,Makefile記錄而來源代碼該如何編
譯的詳細信息,而Makefile則是利用configure偵測程序去檢測用戶具體的系統環境(好比系統版本,內核
,是否安裝了相應的編譯器等)創建的。
咱們在安裝源碼包要看說明文檔:README或者INSTALL
源碼包的安裝過程:
1../configure
2.make clean(能夠沒有,做用:去除當前目錄中不是本次編譯過的額目標檔案。)
3.make
4.make install
建議安裝在:/usr/local目錄下,而源碼包建議存儲在:/usr/local/src
不過都安裝在/usr/local/目錄下的話之後很差刪除,建議單獨在/usr/local/目錄下創建一個以程序名命名
的文件夾,這樣之後刪除直接刪除相應文件夾便可。不過這樣環境變量就沒有相應的記錄了,咱們在執行
時就必需要附加絕對路徑,所以咱們能夠將相應目錄加入到PATH裏面。
軟件包校驗:
md5sum/sh1sum
用法:md5sum +安裝包,而後與官網提供給的md5值比較。
Linux兩大主流:RPM和DPKG
rpm使用指令rpm,在線安裝yum。
dpkg使用指令dpkg,在先安裝apt-get
rpm安裝命令:
rpm -i 安裝;-v(verbose)顯示安裝詳細信息;-h(hash)以哈希顯示安全過程。
rpm -ivh +安裝包
rpm經常使用選項:
--nodeps:忽略安裝包的依賴性強制安裝。
--test:測試安裝,是否有依賴問題。
--prefix:自定義目錄,而非默認目錄/bin,/etc等
--force:暴力安裝,無論以前是否已經安裝過了。重複安裝(--replacepkgs),覆蓋安裝好比要安裝
的軟件包比已安裝的舊(--replacefiles)
rpm -Uvh 安裝包:升級安裝,若是沒有安裝則執行安裝過程。
rpm -Fuh 安裝包:僅執行升級安裝,若是沒有安裝,則不安裝。
rpm -e 安裝包:卸載rpm包。
rpm -qa:查詢已安裝的軟件。
rpm -qf:查詢已安裝的文件屬於哪一個安裝包。
rpm -qi:查詢已安裝軟件包的信息,好比做用,版本什麼的,未安裝加上-p
rpm -ql:查詢已安裝軟件包安裝了哪些文件,未安裝加上-p
rpm -V:校驗軟件包,若是正確沒提示,能夠根據返回值來確認哪些改變了,5:md5;S:大小改變
從rpm包中提取所須要的文件:
首先將rpm包轉化爲cpio:rpm2cipo
而後經過管道|提出文件: rpm2cipo bind.x86_64 | cpio -idv +指定文件到當前目錄
還能夠經過數字簽名的方式來驗證。
yum:自動解決rpm包的依賴關係
yum -y install 安裝
yum -y update 升級
yum list 查詢安裝包
yum info 軟件包信息
yum remove 卸載
修改yum源,通常直接複製163yum源到/etc/yum.repos.d/CentOS-Base.repo
Linux備份
備份工具:tar、cpio、dd、dump
推薦備份的目錄:
/boot
/etc
/home
/root
/usr/local
/var
dd備份:dd讀取的是扇區,而且讀取速度慢。
dd if=/dev/sda1 of=/dev/sda2
cpio備份:find / -print | cpio -covB >/dev/sda2
還原:cpio -iduv < /dev/sda2
dump完整備份:dump -0u -f /backupdata/home.dump /home
第一次增量備份:dump -1u -f /backupdata/home.dump.1 /home
tar完整備份:tar --exclude /proc --exclude /mnt --exclude /tmp -jcvf
/backupdata/system.tar.bz2 /
cp -a也能夠進行備份。
增量備份(差別備份):tar
tar -N '2015-09-04' -jcvf /backupdata/home.tar.bz2 /home只有比20150904更新的文檔才備份
也能夠透過rsync進行鏡像備份:rsync -av 來源目錄 目標目錄。
第一次備份完畢後,在此進行備份時就是增量備份。
Shell腳本學習
/etc/profile:初始化系統全局Shell變量。
/etc/bashrc:定義Shell函數和別名的系統全局定義。
~/.bash_profile:用戶我的環境。
~/.bashrc:用戶我的的別名及變量設置文件
source或者. 將自定義變量導出到環境變量。
fork系統調用:
Linux系統經過fork系統調用建立進程。fork系統調用建立調用進程的副本即爲子進程。子進程與父進程共
享一個CPU,而且子進程繼承父進程的環境變量。
wait系統調用:
子進程執行階段,父進程處於等待狀態,此時wait一直保持待機狀態,當1個子進程終止。執行wait終止
子進程,返回子進程的PID。若在子進程終止前父進程掛了,那麼子進程就成了孤兒進程,因此wait進程
不只讓父進程處於等待狀態,也能夠終止進程。
exit系統調用:
執行exit終止子進程,而且返回sigchild信號,0爲成功,非0失敗。使用echo $?查看。
全部Shell均可以使用的變量稱爲全局變量或環境變量,使用env或者printenv查看。
局部變量只能用於當前Shell,利用set查看系統全部變量(全局和局部)
刪除變量 unset VAR
顯示變量:echo $VAR或者echo ${VAR}
局部變量轉化爲全局變量:exprot VAR="fuck"或者declare -x VAR="fuck"
注意:當export在shell腳本內使用時,一旦shell腳本執行結束,變量也會消失。
注意一下參數變量:
$*
$@
$?
$#
$!:最後運行後臺進程的PID,而連續兩個!!則是運行history最後執行的命令,等於!-1。
或者是!+關鍵字第一個字母,這個是運行最近的第一個字母是前面輸入的那條命令。
$_:最後運行命令的最後一個參數
$0:shell腳本的全名,在腳本中echo $0等於basename $0
$$:當前Shell的PID。例如ps aux | grep bash 顯示的PID等於此時echo $$的PID
讀入變量read VAR1 VAR2,或者是read -p "Plead input an integer: " a
shift將參數左移。
替換命令``,例如:now=`date`;echo $now
整數的計算:expr 10 + 110 注意,運算符號兩邊必須有空格,兩邊能夠爲數字,也能夠是變量。
Shell條件語句
if 命令
then **
elif
fi
case i in
模式1)
語句
;;
模式2)
語句
;;
esac
循環語句
for i in "@*"
do
echo $i
done
文件測試:test -f /etc/passwd ;或者[ -f /etc/passwd ],返回0爲真,返回1爲假。注意exit返回結果
0爲真,非零爲假。
-f:文件存在
-d:目錄存在
-s:文件存在且爲非空
-e:文件存在即爲真
-r:可讀
-w:可寫
-x:可執行
-L:文件爲軟連接
函數
function() {
echo "***"
echo "***"
}
調用函數直接在要調用的位置協商函數名便可。
增長目錄到PATH中:PATH=$PATH:***
經過kill -l能夠查看全部的信號變量,最經常使用的就是-9SIGKILL
定義別名:alias mv='mv -i',刪除用:unalias命令
若是咱們想讓別名永久生效能夠將其寫入到~/.bashrc文件當中,以後導出source ~/.bashrc
[]檢索字符範圍,例如:file[1-3]
{},當中使用,能夠檢索多個,例如:file{ile?,oo}
..上級目錄
-上一個目錄
declare命令
-a:聲明變量爲數組
-i:聲明整數變量
-r:聲明只讀變量
-x:聲明環境變量,declare -x等於export
type用於顯示命令的類型:別名、內建等等
file用於識別文件的類型:b、c、d等等
變量擴展修飾:
${var:-word}:若變量var爲空,則返回word。
${var:=word}:若變量var爲空,則將變量設置爲word並返回word
${var:?word}:若變量var爲空,則將顯示var:word
${var:+word}:若變量var存在,則返回word,不然返回null,經常使用語測試變量是否存在。
${var#pattern}:從前匹配最短刪除。
${var##pattern}:從前匹配最長刪除。
${var%pattern}:從後匹配最短刪除。
${var%%pattern}:從後匹配最長刪除。
${var:offset}:提取含有offset關鍵字的字符串。
${var:offset:length}:從offset開始以後提取長度爲length的字符,例如:var="12345";echo
${var:2:2};34
${var/substring/newstring}:使用newstring代替var中的第一個substring。
${var//substring/newstring}:使用newstring代替var中的全部substring。
${#var}:返回變量var的長度。
${var}:返回變量的內容,推薦這樣寫。$var這樣也能夠。
$一、$二、...$(n),返回第n個位置的參數。$1-$9返回第1-9個參數。$0:當前shell腳本的名稱。
$():括號內爲命令組合。
``:``內命令執行完畢後返回。
'':單引號內命令原樣輸出。
數值計算:
$[]或者$(())
定義數組:
declare -a numbers=(11 22 33 44 55)
echo ${numbers[2]}
22
echo ${#numbers[@]}
sort
grep
awk
sed
uniq
grep詳解
將匹配的行打印出來
經常使用選項
-c(count):值輸出匹配行的數目
-i(ignore-case):不區分大小寫
-n:輸出匹配行和行號
-v:反選匹配文本的行
-An:after:除了列出該行外,後續的n行也列出來。
-Bn:before:除了列出改行外,前面n行業列出來。
使用擴展正則表達式:grep -E或者egrep
好比:去掉空行和註釋行:
egrep -v '^$|^#' /etc/passwd
cut詳解
-d:指定分割符。
-f:依據-d指定的分隔符分割的數段,利用-f去除第幾段,當截取多個段的時候,中間用,號隔開。
-c:以字符單位去除固定字符區間。注意在linux中tab鍵默認是8個空格。
截取多段,1,3,4。
截取4-15段,cut -d ":" -f4-15,對於-c截取字符一樣適用。
sort基礎
-f(ignore-case):忽略大小寫
-b(ignore-leading-blanks):忽略開頭的空格
-n(numeric-sort):以純數字進行排序(默認以文本排序,數字的話以第一個數字爲準。)
-r(reverse):反向排序。
-u(uniq):相同的數據中,僅出現一行。
-t(field-separator):指定分隔符,默認是以tab鍵來分割。
-k(key):以哪一個field進行排序。
uniq基礎
-i:忽略大小寫
-c:進行計數
wc基礎
-w(word):字數
-m(character):字符數
-c(bytes):字節數
-l(lines):行數
wc默認輸出行數、字數、字符數
tee基礎
雙向重導向
-a(append):以累加方式加入到數據file當中。
例如:last | tee -a file.log | more
tr基礎
-d:刪除匹配的字符
-s(squeeze-repeats):刪掉重複的字符。
例如:小寫轉大寫:tr '[a-z]' '[A-Z]' 注意只能用管道字符,這個後面不能直接跟文件。
刪除字符:cat /etc/passwd | tr ':' -d
咱們知道在dos下會在每行行尾加上"^M"這個斷行符
col基礎
-x:將tab鍵轉換成對等的空格鍵盤。
sed基礎
選項:
-n(silent):使用安靜模式,僅輸出sed處理的行。
-f(file):將sed動做寫在後面的文本內。
-r(regexp-extended):支持擴展正則表達式。
-i:直接修改讀取的文本,而不是輸出。
範圍:
n1,n2
動做:
a(apped):新增,a後面接字符串,這些字符串會出如今目前行的下一行。
c(replace):取代,c後面接字符串,這些字符串能夠取代n1,n2之間的行。
d(delect):刪除
i(incert):插入,i後面接字符串,這些字符串會出如今目前行的上一行。
p(print):打印,一般與-n一塊兒使用。
s(replace):取代,例如:1,20s/old/new/g(g取代全部,p取代一次)
nl /etc/passwd | sed '2,5d'刪除2-5行。
nl /etc/passwd | sed '2a fuck'在第2行後面增長內容爲fuck的一行。
nl /etc/passwd | sed '2i fuck'在第2行前面增長內容爲fuck的一行。
nl /etc/passwd | sed '2,5c No-2-5 lines'用後面內容取代2-5行。
nl /etc/passwd | sed -n -p '10-15p'打印20-15行。不加-n的話,2-5行會重複輸出。
利用sed取出IP地址:
ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/ Bcast.*//g'
awk基礎
以行爲單位處理,傾向於一行中分紅若干個字段處理,默認字段分割符爲「tab」或「空格」。
好比取last登入的用戶名和IP:
last -n 5 | awk '{print $1 "\t" $3}'
awk處理流程:
1.讀入第一行,並將第一行的資料填入$0、$一、$2....等中。
2.依據條件的限制,判斷是否進行後面的動做。
awk以字段爲最小的處理單位。
awk內建變量:
NF:每一行($0)擁有的字段總數。
NR:目前awk所處理的是第幾行數據。
FS:目前的分隔符,默認是空格。
注意:awk在print打印非變量數據時,要加上雙引號。
好比:
[ root@localhost]# last -n 3 | awk '{print $1 "\t lines:"NR "\t columes:" NF}'
root lines:1 columes:10
root lines:2 columes:10
root lines:3 columes:10
awk的邏輯運算字符舉例:
cat /etc/passwd | sort -n -t ":" -k3 | awk '{FS=":"} $3 > 50 {print $1 "\t" $3}'
不過咱們發現第一行並無通過awk處理就輸出了。咱們能夠使用BEGIN這個關鍵詞:
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 > 50{print $1 "\t" $3}'
當大括號內使用printf時就必須按照C個數輸出了%10s、%10d。而且結尾使用\n進行分行。
另一個例子:
cat a.log | awk 'NR >=2 {printf "%10s %10s %10s %10s\n",$1,$2,$3,$4,totoal}'
diff檔案對比:以行爲單位對比
-b:忽略一行中多個空白的差別。
-i:忽略大小寫。
-B:忽略空白行的差別。
LVS三種模式簡介
IP虛擬服務器軟件IPVS
IPVS軟件中的三種IP負載均衡技術。
1.Virtual Server via NAT
經過網絡地址轉換,調度器重寫請求報文的目的地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的相應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
2.Virtual Server via IP Tunneling
採用NAT技術時,因爲請求和響應報文都必須通過調度器地址重寫,當客戶請求愈來愈多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報文經過IP隧道轉發至真實服務器,而真實服務器將相應直接返回給客戶,因此調度器只處理請求報文。因爲通常網絡服務應答比請求報文大得多,採用VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。
3.Virtual Server via Direct Routing(VS/DR)
VS/DR經過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。這種方法沒有IP隧道的開銷,可是要求調度器與真實服務器處在同一物理網段上。
LVS算法
1.輪叫(Round Robin)
調度器經過「輪叫」調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。
2.加權輪叫(Weighted Round Robin)
調度器經過「加權輪叫」調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更過的訪問流量。調度器能夠自動問詢真實服務器的負載請求,並動態調整其權值。
3.最少連接(Least Connections)
調度器經過「最少鏈接」調度算法動態地將網絡請求調度到已創建鏈接數最少的服務器上。若是集羣系統的真實服務器具備類似的系統性能,採用最小鏈接算法能夠較好地均衡負載。系統默認。
4.加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用「加權最少連接」調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動詢問負載狀況,並動態地調整其權值。
5.基於局部性的最少鏈接(Locality-Based Least Connections)
「基於局部性的最少連接」調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載,則用「最少連接」方式。
6.
7.目標地址散列(Destination Hashing)
根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
8.源地址散列(Source Hashing)
根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表中找出對應的服務器,若該服務器是可用的且爲超載,將請求發送到該服務器,不然返回空。
LVS集羣體系結構
負載調度器(Load Balancer),它是整個集羣對外的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務器是來自一個IP地址(虛擬IP)上的。
服務器池(Server Pool),是一組真正執行客戶請求的服務器,執行的服務器有WEB、MAIL、FTP、DNS
共享存儲(Shared Storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
負載均衡有兩方面的含義:首先,大量的併發訪問或數據流量分擔到多臺節點設備上分別處理,減小用戶等待響應的時間;其次,單個重負載的運算分擔到多臺節點設備上作並行處理,每一個節點設備處理結束後,將結果彙總,返回給用戶,系統處理能力獲得大幅度提升。
常見的硬件負載均衡廠商:F5的BIGIP、Radware的AppDirector。國內的有深信服的AD
DNS基礎精簡版
DNS中記錄類型有哪些:(網易互聯網二面問了這一題)
1.A記錄:就是主機名對應的IP地址的記錄。
2.NS記錄:指定本域的ns地址。
3.MX記錄:Mail eXchanger,郵件交換器,用於記錄郵件服務器對應的域名地址,而且這個記錄是有優先級的(0-99,而且數字越小越優先)
4.CNAME記錄:別名記錄,記錄類型爲:x cname y
5.PTR記錄:指針記錄,將IP地址轉化爲域名
6.SOA記錄:Start of Authority(起始受權記錄),用於受權這個區域的主DNS服務器和管理郵件地址等。
區域(Zone)和域(Domain)
域是一個邏輯概念,區域是一個物理概念。
好比baidu.com咱們能夠理解爲一個域(Domain);而其對應的NS服務器:ns.baidu.com上有兩個區域,正向區域和反向區域,而且正向區域和反向區域對應着不一樣的數據文件,區域是人爲定義一個域的子域,而子域是靠某個數據文件進行管理的。所以區域和域並無誰包含誰的關係。
子域受權(Delegation):好比將baidu.com這個域劃分紅tech.baidu.com和mark.baidu.com這兩個子域,而且每一個子域均可以受權給其相應的組織去管理,甚至也能夠將子域進一步劃分子域,而父域保留了子域數據來源的指針。
主輔DNS,輔助DNS的RR(資源記錄)僅能從主DNS服務區同步,他們之間靠TCP進行區域傳送,區域傳送分爲:徹底區域傳送(all zone transfer,axfr)和增量傳送(incremental zone tranfer)。
DNS的主配置文件:/etc/named.conf
首先是Options{
}
這個用來定義一些影響DNS全局的環境,好比區域數據庫存放的目錄或者端口號等,注意每行以";"結尾。
zone "." IN{
type hint; #注意type總共有三種:master(主NS)、slave(輔NS)、hint(根NS)
file "name.ca;" #用於指定在/var/named/目錄下的文件名。
};
zone "baidu.com" IN{ #定義一個域名爲baidu.com的正向區域
type master;
file "baidu.com.zone"
allow-update { none; }; #這個用在輔助DNS上,用於指定Master的地址。
};
zone "0.0.140.in-addr.arpa" IN{ #定義一個IP爲127.0.0.*的反向區域,注意要把區域網段的地址反寫
type master;
file "named.local";
}
對於DNS來講」根「,也就是位於文件/var/named/named.ca裏面默認已經配置好了,若是沒有配置好,咱們直接使用命令導入便可:dig -t NS . >> /var/named/named.ca
對於全部子域的數據文件必須以SOA開頭:
$TTL 600 #用於全局定義本數據文件記記錄的超時時間。
$ORIGIN baidu.com. #用於全局定義域名,下面只須要使用@就能夠引用這個域名了。
@ IN SOA ns.baidu.com. admin.baidu.com. {
2015091301 #定義序列號
24h #定義主從NS之間數據庫更新的週期,refresh
1h #重試時間,主從之間更新失敗,多久重試,retry
1w #超時時間,中從服務器連續更新失敗,多久超時,並刪除相應記錄,expiry
1h #否認緩存。本地數據庫沒有,告訴對方多長時間不要再次請求了,negative caching
}
baidu.com. IN NS ns.baidu.com. #NS記錄,定義域所在的ns服務器地址。
ns.baidu.com. IN A 180.76.76.76 #A記錄,NS後面必須跟着一個A記錄,定義ns的地址。
baidu.com. IN MX 10 mail.baidu.com. #MX記錄,用於知名郵件服務器的地址,而且有優先級的
88 IN PTR baidu.com. #反向記錄。
注意A記錄能夠有多個,DNS在相應查詢的時候會進行負載均衡。
DNS查找過程:首先是主機到Local DNS的查找,這段是遞歸查找
Client -> 緩存 -> /etc/hosts -> /etc/resolv.conf -> DNS Server
而後是Local DNS到域名所在NS之間的迭代查找
1.若是是Local DNS所負責的區域的話,那麼首先查找數據文件,其次纔是緩存(這樣作是爲了體現權威性)
2.若是數據庫文件和緩存都找不到的話,那麼就去查找根。此時是根據named.ca(也就是dig -t NS . 返回的結果,其實這個步驟在安裝bind的時候系統默認就已經執行完畢了)中的A記錄查詢第一個FQDN返回的IP。這樣查找到com.這個記錄對應的IP,而後返回爲Local DNS這個IP地址。
3.Local DNS向返回的這個地址查詢baidu.com.這個域名,進行一樣的查詢知道返回www.baidu.com.這個域名對應的IP,而後返回給主機。
區域類型:
除了hint、master、slave還有forward。
這個叫作轉發服務器,即當DNS服務器收到一個請求後,本地數據庫和緩存都找不到,那麼默認狀況下會向根查找,不過這樣效率有點低了,好比像ns.tech.baidu.com查找mark.baidu.com那麼其徹底能夠在主配置文件中定義一個傳送區域:
zone "baidu.com." IN {
type forward;
forwarder { 180.76.76.76 };
};
轉發類型有兩種:
first:即先進行轉發,若是轉發目標NS查不到的話再向根查找。
only:僅進行轉發,若是轉發目標NS查不到的話就返回空。
容許遞歸就覺得着容許緩存,而容許緩存就會面臨緩存毒化的威脅。
緩存度化:修改DNS的A記錄,指向一個釣魚網站。
默認狀況下安裝bind的時候也會安裝caching-nameserver這個包,就至關於與配置了一臺緩存服務器。
bind的管理工具:rndc(Remote Name Daemon Controller)
bind stop|status|state|reload(從新載入全部配置文件和區域數據文件)|freeze(凍結某個區域,不讓其更新)|reconfig(從新載入主配置文件)|retransfer zone(讓某個區域數據庫從新傳輸)
這是一個很強大的DNS遠程控制工具。其配置腳本爲:/etc/rndc.conf,rndc監聽的端口是953。
這個工具在安裝bind時已經安裝了,不過默認咱們不能直接使用這個命令,咱們必須通過一下處理才行:
1.使用rndc-confgen生成rndc的主配置文件。
rndc=confgen | tee /etc/rndc.conf
此時發現仍是不行,出現:rndc: connect failed: 127.0.0.1#953: connection refused,出現953端口拒絕鏈接,這個是SELinux搞的鬼,咱們在此乾脆關閉SELinux得了,不過生產環境不能夠。
2.關閉SELinux:setenforce 0;永久關閉/etc/selinux/config中將SELINUX=enforcing改成disabled
而後咱們能夠觀察其主配置文件:cat /etc/rndc.conf | egrep -v '^$|^#'
key "rndc-key" {
algorithm hmac-md5;
secret "GpZvEHkq/gnzsPg/GpWkkA==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
3.而後將/etc/rndc.conf配置文件中指定密鑰複製到/etc/named.conf文件中便可。