計算機網絡本來就是比較枯燥的,文章內容較多,建議讀者耐心看完這篇文章,希望大家看完后都能有所收獲。先把這篇文章的大致結構放上來。
預備知識
謝希仁的那本《計算機網絡》是很多大學選擇的計網教材,在第一章是一個概論,大致講了計算機網絡的發展,也可以說是每個人都必須了解的小常識。在這里,我就做一個總結概括,把它作為學習計網預備知識。
互聯網簡史
第一階段:20世紀50年代,數據通信技術與網絡理論基礎研究
第二階段:20世紀60年代,ARPANET與分組交換技術
第三階段:20世紀70年代中期,網絡體系結構與網絡協議的標準化
第四階段:20世紀90年代,互聯網、高速網絡、無線網絡、移動互聯網與網絡安全技術發展
互聯網的發展
計算機網絡的發展主要經歷了下面的七個階段。
批處理:為了讓更多的人使用計算機,出現了批處理系統。所謂的批處理,是指事先把用戶數程序數據裝入卡帶或者磁帶,并由計算機按照一定順序讀取。
分時系統:批處理系統之后,又出現分時系統。它是指多個終端同時與計算機連接,允許多個用戶同時使用計算機。
計算機通信技術:在分時系統中,我們看到了終端和計算機的連接,但這并不意味著計算機與計算機之間也已互聯連接。隨著計算機的數量普及,計算機之間的數據交互的便捷性越來越受到重視,最開始兩個主機之間交互數據過程相當繁瑣,因此計算機通信技術(計算機與計算機之間由通信線路連接)應運而生。人們可以很輕松的即時讀取另一臺計算機中的數據,從而極大地縮短了傳輸數據的時間。
計算機網絡的產生:20世紀70年代,人們開始實驗基于分組交換技術的計算機網絡,并著手研究不同廠商的計算機之間相互通信的技術。到了80年代,一種能夠互聯多種計算機的網絡應運而生。網絡通信技術進入了發展的高速公路。
互聯網的普及:進入20世紀90年代,隨著計算機的價格降低、性能增強、各類應用紛紛冒頭,計算機普及程度越來越高。面對這一趨勢,各家廠商不僅要保證生產產品的自身互聯性,還著力于讓自己的網絡技術不斷與互聯網技術(TCP/IP)兼容。
互聯網時代:隨著互聯網的普及,現在,人們越來越離不開互聯網了。生活、學習工作也都得依靠網絡信息,萬物互聯的時代早就已經到來了。
網絡安全時代:互聯網給世界帶來了顛覆性的改變,給人們日常生活帶來了極大的便利,互聯網呈現給現代人一個高度便捷的信息網絡環境,在國家面前,猶如水電煤氣一樣,成為了國家必不可少的重要資源,隨著萬物互聯,網絡安全必定是國家安全最重要的一環。在互聯網普及的初期,人們更關注單純的連接性,注重不受任何限制的建立連接。但現在,人們不再滿足與“單純的連接”而是更為追求“安全的連接”。
網絡的性能指標
比特:比特(bit)是計算機中數據量的單位,也是信息論中使用的信息量的單位。英文單詞bit來源于binarydigit,意思是一個“二進制數字”。網絡技術中的速率指的是連接在計算機網絡上的主機在數字信道上傳送數據的速率,它也稱為數據率(data rate)或比特率(bit rate)。
帶寬:在計算機網絡中,帶寬用來表示網絡的通信線路傳送數據的能力,因此網絡帶寬表示單位時間內從網絡中的某一點到另一點所能通過的“最高數據率”。這種意義的帶寬的單位是比特/秒。
吞吐量:吞吐量(throughput)表示在單位時間內通過某個網絡(或信道、接口)的數據量,他表示當前網絡傳輸數據的能力。
時延:
1、發送時延:指主機或路由器發送數據幀所需要的時間,也就是從發送數據幀的第一個比特算起,到該幀的最后一個比特發送完畢所需要的時間。
2、傳播時延:指電磁波在信道中傳播一定距離需要花費的時間。
時延帶寬積:時延帶寬積表示鏈路可容納的比特數,因此,鏈路的時延帶寬積又稱為以比特為單位的鏈路長度。
往返時間RTT:往返時間RTT,表示從發送方發送數據開始,到發送方收到來自接收方的確認(接收方收到數據后便立即發送確認),總共經歷的時間。往返時間一般就會包括分組在網絡中的各種時延。
利用率:利用率可以分為信道利用率和網絡利用率兩種。信道利用率指出某信道有百分之幾的時間是被利用的(有數據通過)。完全空閑的信道的利用率是零。網絡的利用率則是全網絡的信道利用率的加權平均值。信道利用率并非越高越好,這是因為,根據排隊論的理論,當某信道的利用率增大時,該信道引起的時延也會迅速增加。信道或網絡的利用率過高會產生非常大的時延。
不能不知道的小常識
計算機網絡的分類
按照地理覆蓋范圍來分類的話,計算機網絡可以被分為一下三個部分:
局域網(Local Area NetWork,LAN),常見的辦公室、宿舍或網吧中的網絡就是局域網幾米到10km以內。其特點是:連接范圍窄,用戶少,配置容易,連接速率高。
城域網(Metropolitan Area NetWork,MAN),用于將一個城市、一個地區的企業、機關或學校的局域網連接起來,實現區域內的資源共享
廣域網:廣域網(Wide Area Network,WAN),也稱為遠程網,不同城市間的LAN或者MAN網絡互連,因為距離遠,信息衰減比較嚴重,所以這種網絡一般要租用專線,通過特殊協議進行連接,構成網狀結構,廣域網因為所連接的用戶多,所以每個用戶的連接速率一般較低。
計算機網絡的拓撲結構
總線結構:
優點:費用較低,易于擴展,線路的利用率高;
缺點:可靠性不高,維護困難,傳輸效率低。
環形結構:
優點:令牌控制,沒有線路競爭,實時性強,傳輸控制容易;
缺點:維護困難,可靠性不高
星型結構
優點:可靠性高,方便管理,易于擴展,傳輸效率高.
缺點:線路利用率低,中心節點需要很高的可靠性和冗余度。
計算機有哪些結構
有三種不同的計算機網絡分層模型:
OSI七層模型
五層結構模型
TCP/IP分層結構模型
TCP/IP協議是當前互聯網所遵循的協議,它并不是單純地由TCP或者IP組成,而是由各層的協議一起組成的,構成我們通常說說的TCP/IP協議棧。但是為了更好的理解,后面文章也是按照五層協議來寫的。
物理層
這邊先給一個建議,大家在學習計算機網絡的時候不應該把每個網絡協議單獨拿出來學習,應該明白它的產生原因以及在整個計算機網絡的作用。
它的作用是:屏蔽不同的傳輸媒體和通信手段的差異。我們都知道,自然界的信號無非就是兩種,一種是數字信號,另一種就是模擬信號。那么是什么模擬信號?什么又是數字信號呢?
說白了,所謂的模擬信號就是連續變化的物理量,模擬信號其特點是幅度連續(連續的含義是在某一取值范圍內可以取無限多個數值)。模擬信號,其信號波形在時間上也是連續的,因此它又是連續信號。我們對連續信號進行抽樣,就會得到抽樣信號,但抽象信號就是離散的(說著說著就說到了信號系統,看來補考對我的影響還是有的)。但數字信號是不同于模擬信號的,他在時間域上是離散的,它有兩種不同狀態的物理量,分別用“0”,“1”來表示。這就好像電燈開關一樣,也有兩種不同的狀態。
當然,數字信號與模擬信號是可以相互轉換的,模擬信號通常使用PCM(脈沖編碼調制)方法量化并轉換為數字信號,PCM方法是使不同范圍的模擬信號對應不同的二進制值。通常,數字信號通過載波相移得到模擬信號。
物理層的傳輸媒介
我們大家都知道,數據在物理層傳輸的媒介是不一樣的,工作在物理層的是集線器。不過,大致可以為一下兩類:
引導型傳輸媒介:引導型傳輸媒體中又有不同的類別,比如同軸電纜、光纜、雙絞線,其中雙絞線根據是否屏蔽又可以繼續細分。
非引導型傳輸媒介:非引導型傳輸媒介指的是無線電波在空間中的傳播,利用不同的頻段可以傳輸不同的信號。
信道
說起信道,前面的基礎篇提到過信道的利用率,但至于信道更詳細的介紹,就沒有提到,現在就來仔細看看。按照傳輸媒介可以分為三類:
有線信道:有線信道以導線為傳輸媒質,信號沿導線進行傳輸,信號的能量集中在導線附近,因此傳輸效率高,但是部署不夠靈活。這一類信道使用的傳輸媒質包括用電線傳輸電信號的架空明線、電話線、雙絞線、對稱電纜和同軸電纜等等,還有傳輸經過調制的光脈沖信號的光導纖維。
無線信道:無線信道主要有以輻射無線電波為傳輸方式的無線電信道和在水下傳播聲波的水聲信道等。無線電信號由發射機的天線輻射到整個自由空間上進行傳播。不同頻段的無線電波有不同的傳播方式。
存儲信道:在某種意義上,磁帶、光盤、磁盤等數據存儲媒質也可以被看作是一種通信信道。將數據寫入存儲媒質的過程即等效于發射機將信號傳輸到信道的過程,將數據從存儲媒質讀出的過程即等效于接收機從信道接收信號的過程。
信道是傳輸信息的信道,信道容量描述了信道無差錯地傳輸信息的最大能力,可以用來衡量信道的好壞。
關于信道,還有一個重要的參數,那就是信噪比,信噪比越大,信道的容量也越大,這里的話給出著名的香農公式:
其中,C為信道容量,B為帶寬,S/N為信噪比。
信道復用
我們知道,當沒有數據進行傳輸的時候,信道是十分空閑的。但是在網絡數據請求量大的時候,比如說最近的618,信息的傳播速度就會受阻。那什么是信道的復用,復用就是重復使用的意思。信道的復用可以分為以下幾個方面:
時分復用:所謂的時分復用,就是把做整個信道分為不同的時間。當采用時分復用時,所有用戶在不同的時間占用同樣的頻帶寬度(分時不分頻)。時分復用可能會造成線路資源的浪費
頻分復用:頻分復用就是把信號分成不同的頻率,當采用頻分復用技術時,所有用戶在同樣的時間占用不同的帶寬資源。當采用頻分復用技術時,所有用戶在同樣的時間占用不同的帶寬資源。
統計時分復用:所謂的統計時分復用系統,我們也可以稱為異步的時分復用系統。它有一個類似緩沖的機制,當數據到達一定量的時候,才會轉發,這大大提高了信道的利用率。
數據鏈路層
以太網幀
數據鏈路層接收來自網絡層的IP數據報,通過一定的封裝,讓IP數據報能在數據鏈路層上傳輸。像這樣,裝好了的IP數據報,我們稱之為以太網幀,也叫MAC幀。MAC幀由以下幾個重要的部分組成:
目的MAC地址:MAC幀的目的地址占據6個字節,它標志了目標主機的地址。
源MAC地址:和目的地址一樣,源地址也占據6個字節,它標志的源主機的地址。
類型:類型占據2個字節,它記錄上層使用的協議0X0800表示IP協議。
數據部分:數據部分自然是來自上層的IP數據報。
FCS:FCS占據4個字節,它是用來進行差錯檢測的,如果一個MAC幀發生了錯誤,則不能發送到目的主機上。
差錯檢測
為什么要進行差錯檢測?
現實的通信鏈路都不會是理想的。這就是說,比特在傳輸的過程中可能會產生差錯:1可能會變成0,0可能會變成1,這就叫做比特差錯。在一段是時間內,傳輸錯誤的比特占所傳輸比特總數的比率成為誤碼率BER(Bit Error Rate)。誤碼率與信噪比有很大的關系,在實際通信中不可能使誤碼率下降到零。因此,為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用各種差錯檢測措施。
MAC幀在傳播的過程中會產生差錯,差錯的產生是不可避免的。前面在以太網幀部分我們提到過差錯檢測序列FCS,根據FCS我們就可以知道這個MAC幀在傳輸的過程中是否出現了錯誤或者丟失。
后面講到傳輸層的時候我們也會提到差錯檢測,那么這兩者到底有啥區別了?總結起來,可以用一句話概括:
數據鏈路層的差錯檢測的目的是做到"無比特差錯"。
傳輸層的差錯檢測的目的是做到"無傳輸差錯"。即彌補幀丟失、幀重復、幀失序。
差錯檢測的方法主要有兩種:奇偶校驗法(PCC)和循環冗余校驗CRC,PCC非常簡單,不是這篇文章的重點,下面主要講一下CRC循環冗余校驗。
循環冗余校驗是一種根據傳輸或保存的數據而產生固定位數校驗碼的方法,主要用來檢測或校驗數據傳輸或者保存后可能出現的錯誤。生成的數字在傳輸或者儲存之前計算出來并且附加到數據后面,然后接收端進行檢驗確定數據是否發生變化。
通過CRC,我們可以計算出FCS冗余校驗碼,FCS位于MAC幀的尾部。通過FCS,我們就可以知道這個MAC幀是否發送了錯誤。
適配器
說到適配器,其實完全可聯想一下生活中的適配器。比如我們給手機充電的時候需要有電源適配器,電源適配器無非就是轉換的作用,或者作為一個載體,實現能量的轉移。實際上,電腦里的適配器也是一樣。結合下面這張圖來理解:
我們都知道,數據在外部媒介中的傳輸方式是串行傳輸,然而計算機處理內部指令的時候,用的是并行的方式。怎樣把串行傳輸的數據轉換成并行傳輸呢?這就需要適配器了。適配器就像是起到了橋梁的作用,通過它,就可以輕松實現數據傳輸方式的轉換。
CAM表
我們都知道交換機,交換機是一種多端口的網橋,在數據鏈路層使用MAC地址轉發數據。在交換機類不實際存儲以一張表,叫做CAM表。這張表記錄了主機的MAC地址以及對應的接口,看看下面的這張圖:
有三臺主機A,B,C和交換機連接在一起,最開始,CAM里沒有存儲任何信息。
突然有一天,主機A(源MAC)想要給主機B(目的MAC)發送消息。這個時候,交換機就會檢查自己的CAM表里是否存儲了主機A的信息,交換機一看沒有A的信息,就把A的信息寫進自己的CAM表里。現在,交換機的CAM表變成了這樣:
這個時候,交換機的CAM表里已經存儲了主機A的信息,但是主機A卻想要給主機B發送信息。這可怎么辦呢?首先,交換機會檢查自己的CAM表里是否存在B的信息,如果存在,就直接把信息轉發給B。如果不存在,那又怎么辦呢?猶豫了一下,交換機又有了一個想法,它把主機A發給主機B的消息以廣播的形式發給了所有連在它身上的主機。主機C也收到了這條消息,但是主機C檢查了一下目的地址,不是發給自己的,就果斷丟棄了這條消息。主機B收到了這條消息后,同樣也檢查了收件人(目的地址),發現是給自己的消息,于是就收下了這條消息。之后,交換機就更新了自己的CAM表,上面增加了一條信息:
就這樣,CAM表里存儲了主機A,和主機B的信息。下一次,主機A想要給主機B發送信息的時候,交換機就不需要廣播了。
CSMA/CD協議
到目前為止CSMA/CD的使用已經相當少了,它的使用在下面兩個地方:
使用的是有線網絡
應用在10M/100M的半雙工有線網絡中
使用CSMA/CD協議的的網絡有以下三個特點:
該網絡是總線結構,所有的計算機接在同一總線上,同一時間內,只允許一臺計算機發送(或接收)消息,也就是采用半雙工通信。
載波監聽:在發送前、發送中都要不停地對信道進行監聽,只有在信道是空閑的時候才能發送消息。
碰撞檢測:主機會在發送消息前,發信息的過程中不斷對進行信道檢測,如果有兩臺主機同時發送消息,則消息傳輸立即停止。隨機等待一段時間再進行發送消息,這就是退避算法。
補充一下退避算法的特點:
非堅持的CSMA:線路忙,則等待一段時間,再監聽;不忙時,立即發送;減少沖突,信道利用率降低
1堅持的CSMA:線路忙,繼續偵聽;不忙時,立即發送;信道利用率提高,沖突增大。
P堅持的CSMA:線路忙,繼續偵聽;不忙時,根據p概率進行發送,另外的1-p概率為繼續偵聽(p是一個指定概率值)。
網絡層
IP協議
IP的概述
IP協議對應的是IP地址,那么什么是IP地址呢?
維基百科上是這樣解釋的:
IP地址(英語:IP Address, 全稱:Internet Protocol Address),又譯為網際協議地址、互聯網協議地址。當設備連接網絡,設備將被分配一個IP地址,用作標識。通過IP地址,設備間可以互相通訊,如果沒有IP地址,我們將無法知道哪個設備是發送方,無法知道哪個是接收方。[2] IP地址有兩個主要功能:標識設備或網絡 和 尋址(英語:location addressing)。
上面的一堆文字其實無非解釋了兩個點,總結如下:
IP地址是用來標記主機的地址,沒有IP地址就無法識別主機。(標志主機)
因為唯一標記主機,所以可以用來在網絡中查找主機。(尋址)
現在想一下前面我們說到的MAC地址,MAC地址是一臺主機的身份象征。一臺主機從出廠以后,MAC地址就唯一確定了,無法更改(當然也可以通過軟件修改,但是必須得確保同一局域網下不能有兩臺MAC地址相同的主機)。
那么,為什么有了MAC地址,還需要IP地址?或者說是有了IP地址,還需要MAC地址?
這其實也算是一個經典的問題了,網上也有不少答案,我總結如下:
歷史原因:以太網誕生于因特網之前,在IP地址之前MAC地址就已經在使用了。兩者結合使用,是為了不影響已存在的協議
分層實現:對網路協議進行分層以后,數據鏈路層的實現不需要考慮數據之間的轉發,網絡層的實現不需要考數據鏈路層的影響。
分工合作:IP地址是會隨著主機接入網絡的不同而發生改變的,而MAC一般不會改變。這樣的話,我們可以使用IP地址進行尋址,當數據報和目的主機處于同一網絡時,就使用MAC地址進行數據交付。
IP數據報
IP數據的樣子是這樣的:
有幾個重要的東西必須得進行說明一下:
版本號:占用4位二進制數,表示該IP數據報使用的IP協議版本。目前Internet中使用的主要是TCP/IP協議族中版本號為4的IP協議。
頭長度:占用4位二進制位,此域指出整個報頭的長度(包括選項),該長度是以32位二進制數為一個計數單位的,接收端通過此域可以計算出報頭在何處結束及從何處開始讀數據。普通IP數據報(沒有任何選項)該字段的值是5(即20個字節的長度)。
服務類型:服務類型(TOS、type of service):占用8位二進制位,用于規定本數據報的處理方式。
生存時間(TTL,Time To Live):占用8位二進制位,它指定了數據報可以在網絡中傳輸的最長時間。實際應用中把生存時間字段設置成了數據報可以經過的最大路由器數。TTL的初始值由源主機設置(通常為32、64、128或256),一旦經過一個處理它的路由器,它的值就減1。當該字段為0時,數據報就丟棄,并發送ICMP報文通知源主機,因此可以防止進入一個循環回路時,數據報無休止地傳輸下去。
上層協議標識:占用8位二進制位,IP協議可以承載各種上層協議,目標端根據協議標識就可以把收到的IP數據報送到TCP或UDP等處理此報文的上層協議了。
子網掩碼與IP地址
前面說到IP地址的組成的時候,說到過網絡號。常見的IP地址無非就是由網絡地址和主機地址組成。那么什么是網絡號?網絡號就是計算機當前所在網絡的名字,在這個網絡下,又由許多的主機構成。那又該怎么計算網絡號了?這時候,子網掩碼派上了用場。
通常,計算機的IP地址和子網掩碼是成對出現的,通過子網掩碼和IP地址進行對照就可以知道主機號和網絡號。為了方便表示,子網掩碼前面通常是連續的1,后面部分是連續的0,不能出現0和1交替的情況。
請看下面的例子。
現在已經知道了主機A的IP地址和子網掩碼,把它們轉化成二進制的形式。通過二進制對應子網掩碼的1的部分對應IP地址的網絡號,子網掩碼為0的部分對應主機號。下面的這張圖畫的很清楚:
ICMP協議
我們知道,IP協議是不可靠的傳輸協議,網絡中進行可靠傳輸的是TCP協議,這個后面在講傳輸層的時候會說到。那么,如果在消息沒有送達的情況下,網絡層是怎么解決的了?這個時候,就需要用到ICMP協議。什么是ICMP協議了?ICMP是網絡控制報文協議(Internet Control Message Protocol, ICMP)。
它的作用:更加有效地轉發IP數據報作為IP數據報的數據部分,可以分為ICMP差錯報文,和ICMP查詢報文。差錯報文是用來簡單的報告錯誤的, 至于對于錯誤怎么處理是高層協議的職責。同時, 差錯報文總是發送給最初的數據源(這是因為在ICMP數據報中唯一可以使用的就是源IP和目的IP),查詢報文總是成對出現。
ARP協議
前面說到IP地址用來尋址,當目的地址和數據報處于同一網絡時,MAC地址用來交付數據報。現在有一個問題,主機A要給主機B發送消息,消息經過一系列地轉發,終于找到了主機B的IP地址。但是,我們都知道,數據在鏈路層的傳輸是需要MAC地址的,僅僅知道B的IP地址是無法進行通信的。請看下面這張圖:
這個時候,ARP協議就派上用場了。ARP全稱是地址解析協議(Address Resolution Protocol),其基本功能為透過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行,它是IPv4中網絡層必不可少的協議。
如同交換機工作在數據鏈路層一樣,路由器是工作在網絡層的。交換機有CAM表,路由器也有路由表。
現在路由器要給主機B發送一條消息,必須得知道主機B的MAC地址才能進行通信。這個時候路由器會發送一個ARP請求,該請求是以廣播的形式發送的,每一臺連接到該路由器的主機都收到得到這條消息。但是只有主機B檢查到自己的IP地址符合要求。于是主機B發送給路由器一條ARP響應,把自己的MAC的地址告訴了路由器。就像下面圖示的那樣。
每次路由器發送一個ARP請求的時候,就會增加一條數據,這一條數據記錄了IP地址對應的MAC地址,這樣路由器下次再給該主機發送消息的時候就不用廣播了。當然如同交換機的CAM表中的數據有生存了時間一樣,路由表中的數據也有生存時間。試想一下,如果數據一直存在,那么路由器豈不是需要花大量的存儲空間來緩存已經失效的數據。
內部網關協議
互聯網的路由選擇協議主要有兩種,分別是RIP和OSPF。下面具體介紹這兩種協議。
先介紹RIP協議:
路由信息協議(RIP) 是內部網關協議IGP中最先得到廣泛使用的協議。RIP是一種分布式的基于距離矢量的路由選擇協議,是因特網的標準協議,其最大優點就是實現簡單,開銷較小。
基本算法:矢量距離算法(簡稱V-D算法)的思想是:網關周期性地向外廣播路徑刷新報文,主要內容是由若干(V,D)序偶組成的序偶表;(V,D)序偶中的V代表“向量”,標識網關可到達的信宿(網關或主機),D代表距離,指出該網關去往信宿V的距離;距離D按驛站的個數計。其他網關收到某網關的(V,D)報文后,據此按照最短路徑原則對各自的路由表進行刷新。
它只適用于小型的網絡(15跳就達到極限),如果網絡過于龐大,當網絡出現故障時,要經過比較長的時間才能將此信息傳送到所有的路由器。
接下來說說什么是OSPF:
基本定義:OSPF(Open Shortest Path First開放式最短路徑優先)是一個內部網關協議(Interior Gateway Protocol,簡稱IGP),用于在單一自治系統(autonomous system,AS)內決策路由。
基本算法:迪克斯加算法。主要是通過向鄰居發送HELLO包來建立鄰居關系,選取DR等。
NAT協議
NAT技術其非常簡單,那么NAT它的作用是什么呢?
NAT(Network Address Translation,網絡地址轉換)是1994年提出的。當在專用網內部的一些主機本來已經分配到了本地IP地址(即僅在本專用網內使用的專用地址),但現在又想和因特網上的主機通信(并不需要加密)時,可使用NAT方法。
這種方法需要在專用網連接到因特網的路由器上安裝NAT軟件。裝有NAT軟件的路由器叫做NAT路由器,它至少有一個有效的外部全球IP地址。這樣,所有使用本地地址的主機在和外界通信時,都要在NAT路由器上將其本地地址轉換成全球IP地址,才能和因特網連接。另外,這種通過使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助于減緩可用的IP地址空間的枯竭。
簡單來說,NAT技術就是實現局域網與互聯網通信的一項協議。NAT又可以分為三種不同的類型:
靜態NAT(Static NAT):靜態NAT設置起來最為簡單和最容易實現的一種,內部網絡中的每個主機都被永久映射成外部網絡中的某個合法的地址。當一個內部主機必須被作為一個固定的外部地址訪問時,通過靜態NAT實現。
動態地址NAT(Pooled NAT):動態NAT則是在外部網絡中定 義了一系列的合法地址(地址池),采用動態分配的方法映射到內部網絡。動態NAT轉換的工作過程是這樣的,當有一個內部主機需要訪問外網時,從公用IP地址池中取出一個可用的地址分配給該主機使用。當通信完成后,所獲取的公用IP地址也被釋放回地址池中。外部公用IP在被分配給一個內部主機通信使用時,該地址不能不能再次被分配給其他內部主機使用。
網絡地址端口轉換NAPT(Port-Level NAT):NAPT是把內部地址映射到外部網絡的一個IP地址的不同端口上。NAPT(Network Address Port Translation),即網絡端口地址轉換,可將多個內部地址映射為一個合法公網地址,但以不同的協議端口號與不同的內部地址相對應,也就是<內部地址+內部端口>與<外部地址+外部端口>之間的轉換。
IPV6協議
我們前面說的IP地址其實是IPV4,那么,為什么已經有IPIV4了,還要來一個IPV4呢?原來是這樣的,早在上個世紀,人們就預料到IPV4地址枯竭的一天,為了解決這個問題,開始了IPV6的研發。
IPv6 (IP version 6)是為了根本解決IPv4地址耗盡的問題而被標準化的網際協議。IPv4的地址長度為4個8位字節,即32比特。而IPv6的地址長度則是原來的4倍,即128比特,一般寫成8個16位字節。可以看到,IPV6的地址是取之不盡,用之不竭的,那么現在為什么不把IPV4全部換成IPV6呢?
從IPV4切換到IPV6極其耗時,需要將網絡中所有主機和路由器的IP地址進行重新設置。當互聯網廣泛普及后,替換所有IP地址會是更為艱巨的任務。
在現存的網絡中,既有IPV4又有IPV6,那么它們之間是怎么通信的呢?有兩種技術:雙協議棧、隧道技術,下面分別進行介紹:
雙協議棧:改變IP地址的首部,在首部進行轉換的過程中,IPV6的首部的部分信息會丟失,而且這種轉換的損失不可避免。
隧道技術:何謂隧道技術了?其實完全可以通過字面的意思理解。下面還是以畫圖的方式幫助大家理解。隧道技術說白了就是數據在傳輸的時候進行了另一種的封裝與解封,如圖數據由IPV6網絡進入到IPV4的網絡,需要把IPV6的數據包封裝在IPV4的數據包里。
傳輸層
停止等待協議
什么是停止等待協議了?看完下面一張圖你可能就懂了
停止等待協議可以由以下三個部分組成:
無差錯情況:就像上面那個圖一樣,為了保證無差錯的情況,主機A還要繼續向主機B發送消息,就必須得到主機B的回復。
出現差錯:如果出現差錯,比如主機A一直沒有收到主機B的回復,那么就會有一種機制,使得主機A把這條消息再一次發送給主機B。這中間涉及到一個重傳時間的選擇,這里得話,這個重傳時間應該不小于RTT(主機A給主機B發送消息,主機B再給主機A發送消息的時間和)。
確認丟失和確認遲到:確認遲到和確認丟失,看看下面的這張圖你可能就明白了
數據在傳輸過程中可能會出現丟失和遲到的情況,對于丟失的數據進行重傳,對于遲到的數據不做處理。既然說到了停止等待協議,那我就不得不補充一下ARQ協議。是什么ARQ協議了?
ARQ協議就是發送方不必收到對上一條消息的確認,一次可以發出多個分組,這樣就提高了信道的利用,可以在某一時間內傳送足夠的數據量。
UDP
UDP協議相對與TCP協議來說是相當簡單的,傳輸層的重點自然也是TCP協議。下面先簡單解釋一下UDP協議。
UDP具有以下特點:
面向無連接的協議,進行不可靠的傳輸
面向數據報
沒有擁塞控制
UDP數據報首部開銷小
支持一對一,一對多,多對多,多對一的數據傳輸
TCP
TCP概述
TCP是傳輸層的另一個協議,它具有以下特點:
TCP協議是面向連接的傳輸層協議
提供可靠交付
使用全雙工通信
面向字節流
TCP數據報
請看下面的這張圖片(圖片來源于網絡)。
這里的話對數據報的某些字段作一下解釋:
源端口:發送主機的端口號
目的端口:接收主機的端口號
序號:在一個TCP連接中傳送的字節流中的每一個字節都按順序編號。字節流的起始序號必須在連接建立時設置。TCP數據報首部中的序號字段值則指的是本報文段所發送的數據的第一個字節的序號。
確認號:即期望收到對方下一個報文段的第一個數據字節的序號。若確認號為N,則表明:到序號N-1為止的所有數據都已正確收到。
數據偏移:它指出TCP報文段的數據起始處距離TCP報文段的起始處有多遠。
窗口:窗口字段明確指出了現在允許對方發送的數據量。窗口值經常在動態變化著窗口指的是發送本報文段的一方的接收窗口(而不是自己的發送窗口)。
校驗和:檢驗和字段檢驗的范圍包括首部和數據這兩部分在計算檢驗和時,要在TCP報文段的前面加上12字節的偽首部(同UDP)
確認ACK:僅當ACK=1時確認號字段才有效。當ACK=0時,確認號無效。TCP規定,在連接建立后所有傳送的報文段都必須把ACK置1。
推送PUSH:當兩個應用進程進行交互式的通信時,有時在一端的應用進程希望在鍵入一個命令后立即就能夠收到對方的響應,而不再等到整個緩存都填滿了后再向上交付。這時,發送方TCP把PSH置1,并立即創建一個報文段發送出去。接收方TCP收到PSH=1的報文段,就盡快地(即“推送”向前)交付接收應用進程。
復位RST:當RST=1時,表明TCP連接中出現嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。
SNY:在連接建立時用來同步序號當SYN=1而ACK=0時,表明這是一個連接請求報文段。
FIN:用來釋放一個連接。
滑動窗口
TCP進行數據發送,為了提高數據傳輸的效率,采用了一種叫做滑動窗口的機制來進行數據發送。
下面是發送端滑動窗口的示意圖,滑動窗口的大小是綠色部分和紅色部分的序列長度。它工作的機制是這樣的,一旦發送端收到一個確認,滑動窗口就會向右移動。
流量控制
關于流量控制,用一句簡短的話就可以概括。
接收端會給發送端一個負反饋,通過這個負反饋可以控制發送端的滑動窗口的大小。
下面可以看一下知乎上是怎么說的,我找了一條講的最形象,可以結合著理解一下。
擁塞控制
慢啟動:慢啟動值得就是一條TCP鏈接剛建立時不要一下發送大量數據導致網絡擁塞激增,而是由小到大根據反饋逐漸增大擁塞窗口。
擁塞避免:擁塞避免就是讓滑動窗口緩慢增大,而不是像慢開始那樣成倍增長。
快重傳:發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計時器到期。
快恢復:快恢復具有下面兩個特點
當發送方連續收到三個重復確認時,就執行 “乘法減小” 算法,把慢開始門限減半。這是為了預防網絡發生擁塞。注意,接下去不執行慢開始算法。
執行快恢復算法時,改變滑動窗口的值,然后開始執行擁塞避免算法,使得擁塞窗口緩慢性增大。
三次握手
三次握手與四次揮手可以說是面試常考的知識點了,不過在介紹三次握手之前,我覺得有必要了解一下理想傳輸條件的共性:
傳輸信道不產生差錯
不管發送方以多快的速度發送數據,接收方總是能夠及時接收數據。
理想的情況終究是理想的,上述兩種情況在實際環境是不可能發生的。那么,我們就來說說怎樣使得我們的實際情況更加接近理想,這就是我們接下來要講的三次握手。
首先,三次握手和后面要講的四次揮手都是針對TCP來說的,UDP是面向無連接的協議,不可能存在的三次握手與四次揮手。三次握手與四次揮手是為了更好進行可靠的傳輸,下面先看下面三次握手的流程圖。
既然是為了進行可靠的傳輸,無非是要保證客戶端與服務器之間的數據發送和接收的正常進行。
第一次握手:Client 什么都不能確認;Server 確認了Client發送正常。
第二次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:自己接收正常,Client發送正常。
第三次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:自己發送、接收正常,對方發送接收正常。
為什么需要進行第三次握手了?一句話,主要防止已經失效的連接請求報文突然又傳送到了服務器,從而產生錯誤。
通過上面的三個步驟,Client和Server能夠進行可靠的傳輸,缺一不可。
四次揮手
既然理解了三次握手,想必四次揮手也沒有啥難度,先把流程圖附上。
如同三次揮手一樣,四次揮手也是為了可靠的傳輸。四次揮手就是Client和Server斷開連接的過程,那么你可能會覺得,建立連接的過程需要三次到還可以理解,為啥連斷開連接都需要四次。難道一次或者兩次就不可以了嗎?
是這樣的,既然三次握手的需要發送方和接收方確認,那么四次揮手也要得到發送方和接收方的確認。
第一次揮手:Client向Server發送斷開的連接的請求。
第二次揮手:Server向Client發送斷開連接的確認。Client收到以后,這個時候TCP進入了半連接的狀態,從Client向Server發送數據的通道被關閉了。
第三次揮手:Server向Client發送一個斷開連接的請求。
第四次揮手:Client向Server發送斷開連接的確認。Server收到以后,這個時候TCP連接就完全斷開了。
也可以這樣考慮,上面提到的問題。假如在第二次揮手的時候,Server在給Client發送ACK的同時,也發送了FIN的請求。那么如果,Server還在接收從Client傳輸過來的數據,則會因為Client的下一個ACK而關閉接收數據的通道,數據就會接收失敗就像下面的這個圖那樣。
TCP與UDP的應用場景
至于TCP與UDP的關系,看完下面的這張圖你可能就懂了(圖片來源于網絡):
TCP是可靠的傳輸,UDP是不可靠的傳輸,那為什么我們還需要使用不可靠的UDP進行數據傳輸呢?
我們知道,UDP 在傳送數據之前不需要先建立連接,遠地主機在收到 UDP 報文后,不需要給出任何確認。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用于即時通信),比如:QQ 語音、 QQ 視頻 、直播等等。
TCP 提供面向連接的服務。在傳送數據之前必須先建立連接,數據傳送結束后要釋放連接。TCP 不提供廣播或多播服務。由于 TCP 要提供可靠的,面向連接的運輸服務(TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完后,還會斷開連接用來節約系統資源),這一難以避免增加了許多開銷,如確認,流量控制,計時器以及連接管理等。這不僅使協議數據單元的首部增大很多,還要占用許多處理機資源。TCP 一般用于文件傳輸、發送和接收郵件、遠程登錄等場景。
應用層
HTTP協議
關于HTTP的定義,可以看一下維基百科上是怎么說的:
在網頁瀏覽器的地址欄上顯示HTTP網絡協議的插圖HTTP是一個客戶端(用戶)和服務端(網站)之間請求和應答的標準,通常使用TCP協議。通過使用網頁瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個HTTP請求到服務器上指定端口(默認端口為80)。我們稱這個客戶端為用戶代理程序(user agent)。應答的服務器上存儲著一些資源,比如HTML文件和圖像。我們稱這個應答服務器為源服務器(origin server)。
http協議現在已經廣泛用于萬維網,關于http,后面單獨那個文章出來講,不過現在得先說一下https。
其實http和https是一種協議,只不過https經過了SSL(Secure Socket Layer,安全套接字層)或TLS(Transport Layer Security,傳輸層安全)的封裝。單從這兩個協議就可以知道,https安全的,而http是不安全的。
FTP協議
FTP(File Transfer Protocol)文件傳輸協議,在TCP/IP協議族中屬于應用層協議運行于TCP協議之上是一種可靠的傳輸協議,主要功能用于實現用戶間文件分發共享,以及網絡管理者在進行設備版本升級、日志下載和配置保存等業務操作時,均會使用到FTP功能。
DNS協議
前面說到IP地址是用來定位主機的,但是我們在生活中是很難記住這些沒有規律的IP地址,我們只知道網站的域名。那現在要怎么辦了?
于是DNS協議出現了。
DNS是域名解析協議,假如我們知道了域名,但是不知道服務器的IP地址,就需要用到DNS協議。
DHCP協議
什么是DHCP協議了?還是看看維基上的定義
動態主機設置協議(DHCP)是一種使網絡管理員能夠集中管理和自動分配IP網絡地址的通信協議。在IP網絡中,每個連接Internet的設備都需要分配唯一的IP地址。DHCP使網絡管理員能從中心結點監控和分配IP地址。當某臺計算機移到網絡中的其它位置時,能自動收到新的IP地址。
維基上已經解釋的非常清楚了,DHCP的作用就是動態地給主機分配IP地址,大大減少了網絡管理員的工作負擔。
審核編輯:湯梓紅
-
通信技術
+關注
關注
20文章
1118瀏覽量
92199 -
互聯網
+關注
關注
54文章
11105瀏覽量
103009 -
計算機
+關注
關注
19文章
7418瀏覽量
87712 -
網絡
+關注
關注
14文章
7514瀏覽量
88625
原文標題:應用層
文章出處:【微信號:通信弱電交流學習,微信公眾號:通信弱電交流學習】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論