這兩天把計算機網絡複習了一遍,總結一下,方便之後查看;html
提及計算機網絡,離不開IOS七層模型和TCP/IP四層模型,這裏我會以IOS七層模型,逐層解釋面試
1、物理層(這一層偏硬件,沒有什麼講的)算法
2、數據鏈路層數據庫
首先介紹這一層主要三個功能:封裝成幀、透明傳輸和差錯監測;編程
封裝成幀:是在數據首尾加上幀首部(SOH)和幀尾部(EOT),而後交給物理層傳輸,這裏會涉及到一個最大傳輸單元MTU(Maximum Transmission Unit)的概念,數據鏈路層的數據幀不是無限大的,以太網MTU通常爲1500字節;windows
透明傳輸:其實就是解決若是在幀數據中也出現了幀首部(SOH)和幀尾部(EOT)標記時,怕引發偏差,破壞數據完整性,加上相似轉義字符,實際處理是,若是提早出現EOT字符,則在前面加上一個ESC字符,若是數據中自己出現了ESC,則多加上一個ESC,相似在windows系統下編程時,字符中用兩個「\\」來處理「\」的問題;緩存
差錯監測:最簡單的監測方法就是採用奇偶校驗碼,就是簡單的將一個數據的全部0,1比特位求和,看最後是奇數仍是偶數,這種監測比較粗糙,好比若是出現了偶數次差錯,最後的檢驗碼仍然是正確的,針對這個問題,就引入了精確度更加高的循環冗餘校驗碼CRC,首先要選定一個用於校驗的多項式G(x),而後用多項式的係數採用模「2」除法,簡單點理解。就是一次計算多項式最高項次數個比特位,顯然,最高項次數越高,檢測結果越準確,可是計算成本也高,具體計算細節在這就很少介紹了;服務器
數據鏈路層主要是管理相鄰節點間的數據通訊,利用以太網協議解決數據當前一跳的問題網絡
簡單來講,就是在幀數據報首部加上目標MAC地址和源MAC地址,每個路由器內部都有一個MAC地址表,能夠查詢到MAC地址對應的硬件接口,這樣就能夠完成將幀數據今後節點傳送到下一節點的動做;測試
3、網絡層
網絡層主要解決數據在網絡中具體傳輸路徑的問題,首先看IP協議的位置和具體組成:
咱們來依次解釋各關鍵部分表明的意思:
4位版本:指的是IP協議的版本,通訊雙方必須版本一致,當前主流版本是4,即IPv4,也有IPv4;
4位首部長度:能夠表示的最大數值是15,表示的是IP協議首部長度,單位是「4字節」,也就能夠計算出IP協議首部最長也只能是60字節;
16位總長度:最大數值是65535,表示的是IP數據報的總長度(IP首部+IP數據);
16位標識:用來惟一地標識主機發送的每一份數據報。一般每發一份報文,它的值會加1;
3位標識:標誌一份數據報是否要求分段。
13位位偏移:若是一份數據報要求分段的話,此字段指明該段偏移距原始數據報開始的位置。
8位生存時間(TTL:Time to Live):用來設置數據報最多能夠通過的路由器數。由發送數據的源主機設置,一般爲3二、6四、128等。每通過一個路由器,其值減1,直到0時該數據報被丟棄。
8位協議:佔8比特。指明IP層所封裝的上層協議類型,如ICMP
、IGMP
、TCP
、UDP
等。
源IP地址、目標IP地址:各佔32比特。用來標明發送IP數據報文的源主機地址和接收IP報文的目標主機地址。
可選項:佔32比特。用來定義一些任選項:如記錄路徑、時間戳等。這些選項不多被使用,同時並非全部主機和路由器都支持這些選項。可選項字段的長度必須是32比特的整數倍,若是不足,必須填充0以達到此長度要求。
總的來講,IP協議主要包含了我從哪裏來(源IP),要到哪裏去(目標IP),我能存活多久,我是什麼等這些問題,這裏的IP地址和以太網的MAC地址不一樣,在以太網協議中,在每一跳中,MAC地址都是變化的,指向當前節點和下一節點,可是IP協議的地址不發生變化,一直是發送方和接收方的IP地址;
那麼我知道了目標的IP地址,可是我不知道他的MAC地址,如何解決IP地址和MAC地址相互映射的問題呢?接下來就要談到ARP協議(地址解析協議)和RARP協議(反向地址轉換協議)協議了;
這裏就要介紹ARP緩存表了,ARP緩存表記錄了IP地址和MAC地址的映射關係,當某一節點接受到消息以後,就會從IP協議中獲得目標的IP地址,此時查詢ARP緩存表,若是其中有對應的MAC地址,就直接獲得了MAC地址,若是沒有找到,則會廣播發出包含ARP協議的信息,直到信息傳達到目標的IP地址,此時接收方就會對該節點單一回傳一個包含本身MAC地址的信息,而後再在ARP緩存表中記錄上此條映射關係,簡單點說,就是兄弟(接收方),我想給你寄快遞,可是我不知道你的地址,我只知道你叫什麼,能夠把你的地址告訴我麼,而後把這條信息廣播出去,等到你兄弟接受到這條信息以後,他會偷偷告訴你一我的,他的地址;
而RARP協議主要是設置一臺新的機器時,只有新機器的MAC地址,而沒有IP地址時,向路由器發送一個包含RARP協議的信息,而後路由器返回他的IP地址給你,就是你的IP地址了。好比咱們的電腦在家,在辦公室,在公共場所連入WIFI時,都會使用到這個協議,簡單點說,就是兄弟(路由器),我買新房子了,可是我知道我這小區叫什麼名字,你告訴我一下唄,而後兄弟告訴你,這個小區叫什麼;
從上面咱們能夠知道IP協議並不提供可靠傳輸,發送方傳送出去的東西,並不知道接收方究竟是否接收到了,若是沒接收到,那麼沒接收到的緣由是什麼,好比關機等等,此時就要用到ICMP協議了,
一個新搭建好的網絡,每每須要先進行一個簡單的測試,來驗證網絡是否暢通;可是IP協議並不提供可靠傳輸。若是丟包了,IP協議並不能通知傳輸層是否丟包以及丟包的緣由。 因此咱們就須要一種協議來完成這樣的功能–ICMP協議。
ICMP協議的功能主要有:
簡單點說,就是兄弟,我想給你寄快遞,你那邊能夠收到麼?要是不能收到,是什麼緣由呢?是你不在家,仍是怎麼?
對於ICMP協議最常的應用就是Ping命令和Traceroute命令(Windows 系統下是Tracert);
最後,咱們來解決最關鍵的問題,知道了目標IP地址,目標MAC地址,網絡狀況良好,萬事具有了,那咱們的信息在網絡層到底按照什麼路線來傳遞呢,接下來咱們介紹路由表和相應的路由算法;
路由表主要記錄目的IP地址和下一跳的IP地址的映射關係,在網絡層中,每個點表明一個網絡、路由器或者計算機,每一條邊表示一條網絡路徑,路由算法實際就是圖論算法,可是因爲網絡環境複雜,因此比圖論算法要複雜一些,
首先引入自治系統(AS:autonomous system)的概念,一個自治系統就是處於一個管理機構控制之下的路由器和網絡羣組,在自治系統內部的網關協議稱爲內部網關協議(RIP、OSPF),在自治系統外部的網關協議稱爲外部網關協議(BGP);
RIP協議採用的距離矢量(DV)算法,此算法的核心公式就是Dij = min(Dix+Dxj) = Dix + min{Dxj};這個公式的含義就是從節點i到達節點j,路徑節點x時,此時的距離等於從節點i到達節點x的距離加上從x到達j的全部路徑中的最短距離;
不過RIP協議是將網絡的跳數做爲DV算法的距離,RIP協議認爲跳數大於15時的路由爲不可達路由,DV算法實現簡單,開銷也很小,具體算法細節就不在這裏展開了,不過這個算法的缺點也是顯而易見的,跳數最多爲15,限制網絡的規模,「壞消息」(如某處節點損壞),須要跳數大於15時,纔將此節點設置爲不可達,更新收斂時間過長;
OSPF協議採用的算法是Dijkstra算法,它是一個著名的圖算法,其實核心就是廣度優先搜索(BFS)算法和貪心算法的結合,簡單點說就是劃分連個集合S一、S2,初始時以發送方單一節點爲集合S1,其餘全部節點爲集合S2,爲發送點爲中心的可見點(僅一跳可達的節點)中,距離最近的點,加入到集合S1中,而後再以集合S1中的節點的全部可見點中,重複此操做,直到S2爲空集時中止;
OSPF協議使用的是鏈路狀態協議(LS),鏈路狀態協議就是基於Dijkstra算法,若是說距離矢量路由協議提供的是路標,那麼鏈路狀態路由協議提供的就是地圖,每個路由器都包含整個網絡拓撲信息,而地圖的搭建就是經過OSPF協議完成的,
OSPF的包類型:
RIP協議和OSFP協議的對比
外部網關協議就是在每一個自治系統內部,選出兩個BGP發言人,簡單點說,就是選兩個話事人,信息能不能傳輸進個人自治系統,按照什麼規則傳入,都是由這兩個話事人說了算;
最後總結一下,在網絡層中一共提到三個表:
某條數據到達某一節點,該節點先從IP協議頭部獲得目的IP地址,查詢路由表獲得下一跳的IP地址,而後查詢ARP緩存表獲得下一跳的MAC地址,而後封裝成幀,查詢MAC地址表獲得對應的硬件接口,這三個表的配合使用,就能完成一條數據從發送方傳送的接收方的完整操做。
4、傳輸層
傳輸層是管理端到端的通訊鏈接,這裏的端是端口的意思,不是指物理端口,而是指每個進程的端口號,因此傳輸層解決的是進程與進程之間通訊鏈接的問題,經常使用的端口號:FTP(21),HTTP(80),HTTPS(443),DNS(53)等等。
傳輸層的兩大協議分別是UDP(User Datagram Protocol)協議和TCP(Transmission Control Protocol)協議;
UDP協議是一個很是簡單的協議,它是一種無鏈接協議,不能保證可靠的交付數據,「想發就發」,沒法保證數據是否在網絡中丟失,它是一種面向報文傳輸的,首部開銷很小。
TCP協議是計算機網絡中很是複雜的一個協議,他是一個面向鏈接的協議,提供可靠的傳輸服務,TCP協議是面向字節流的協議。
關於TCP頭部各部分的解釋細節,網上有不少,我就簡單的說一下,源端口,目的端口號沒啥說的,序號,指的是此條數據是相對於字節流的首字節序號,確認號是相對於發送方的,TCP是雙向鏈接的協議,發送方和接收方是相對的,確認號就是告訴對方,在這個確認號以前的信息我已經收到了,我指望收到確認號以後的信息,數據偏移是指數據偏離首部的位置,其實也就是代表了TCP首部的實際長度,保留字段是預留出來的字段,方便之後開發新功能,TCP標記,URG=1表示緊急數據,優先傳送,ACK=1表示確認號生效,RST=1表示從新創建鏈接,SYN=1表示鏈接請求報文,FIN=1表示釋放鏈接,窗口大小表示容許對方發送的數據量,檢驗和是檢驗TCP頭部是否傳輸錯誤,緊急指針是配合URG標記使用的,指定緊急數據在報文中的位置;選項最多40字節,支持將來拓展。
這裏介紹兩個概念:中止等待協議和連續ARQ協議
中止等待協議簡單來講就是發送方傳送一條數據,而後停下來等待,等接收方接收到消息以後,回傳確認信息,發送方接收到確認消息以後,再接着傳送下一條信息,如此反覆,顯然這個對信道的利用率很低,而連續ARQ協議則不一樣,它會設置一個滑動窗口,在窗口大小內的數據都能傳輸,採用累積確認的方式,這樣極大提升的對信道的利用效率,TCP協議採用的就是連續ARQ協議,滑動窗口以字節爲單位;
接下來介紹TCP協議的幾個重要功能:
最後是TCP鏈接的創建,也就是常常說的「三次握手,四次釋放」;
參考: