TCP/IP詳解 卷1:協議(英文版)TCP/IP詳解 卷1:協議html
理解字節序算法
IP數據報首部校驗和算法服務器
TOS, type-of-service 服務類型
SNMP,simple network management protocol 簡單網絡管理協議
NNTP,network news transfer protocol 網絡新聞傳輸協議
NFS, network file system 網絡文件系統
TTL,time-to-live 生命週期
big endian,大端字節序
little endian, 小端字節序網絡
IP協議提供不可靠、無鏈接的數據報傳送服務
(1)不可靠,
IP協議沒法保證IP數據報能成功發送到目標服務器,IP僅提供最好的傳輸服務,若是發生某種錯誤,例如某個路由器暫時用完了緩衝區,IP協議有一個簡單的錯誤處理算法:丟棄該數據報,發送ICMP消息報給信源端。保證數據傳輸可靠性的任務交給上層協議來實現(例如:TCP)
(2)無鏈接,
IP並不維護任何關於後續數據報的狀態信息,每一個數據報的處理是相互獨立的,即有可能IP數據包接收順序不一樣於發送順序spa
普通的IP首部長度爲20字節,如圖,最高位在左邊,記爲0bit,最低位在右邊,記爲31bit,
四個字節的32bit值按照下面的次序傳輸:0~7, 8~15, 16~23, 24~31
這種傳輸次序稱爲大端字節序,因爲TCP/IP首部中全部的二進制整數在網絡中傳輸都要求是大端字節序,因此又稱爲網絡字節序,以其餘形式存儲的二進制整數,在傳輸數據以前,須要將首部轉換爲網絡字節序。3d
計算機硬件有兩種存儲數據的方式,大端字節序和小端字節序,例如:數值0x2211
中高位字節是0x22
,低位字節是0x11
, 大端字節序:高位字節在前,低位字節在後,這是人類讀寫數值的方法,小端字節序:低位字節在前,高位字節在後,即0x1122
形式存儲。code
目前的協議版本號爲4,所以IP稱爲IPv4,
首部長度表示首部佔32bit字的數目,包括任何選項,60 =(2**4 - 1)*32/8
,即首部最長爲60個字節,普通的IP數據報(沒有任何選項)字段的值是5,即20個字節。htm
TOS有8位,由三個部分組成,
(1)3位優先字段,已經被忽略
(2)4位子字段,依次爲最小化時延、最大吞吐量、最高可靠性、最小費用,
這4位最多隻能配置1個,若是都是0,表示爲通常服務blog
由圖可見,
交互式登陸應用程序,例如Telnet, Rlogin, 要求最小的傳輸時延,由於它們和用戶交互,用於傳輸少許數據
文件傳輸程序,例如FTP,須要傳輸大量數據,要求最大吞吐量,
網絡管理SNMP程序和路由選擇協議,須要保證最高可靠性,
用戶網絡新聞傳輸NNTP應用, 可使用最小費用模式 接口
(3)1位沒有實際使用,固定爲0
總長度字段, IP數據報的長度,單位是字節(8位),利用首部長度字段和總長度字段,能夠知道IP數據報中數據內容的起始位置和長度,因爲總長度字段爲16bit,則IP數據報理論長度最大值爲65535字節,儘管能夠傳送一個長度爲65535字節的IP數據報,可是大多數的鏈路層都會對其進行分片,並且,主機也要求不能接收超過576字節的數據報
因爲TCP把用戶數據分紅若干片,所以通常來講,這個限制不會影響TCP,大多的UDP應用(RIP,TFTP,BOOTP,DNS,SNMP),都限制用戶數據報長度爲512字節,小於576字節,
事實上,大多數的實現(特別是支持網絡文件系統NFS的實現)容許超過8192字節的數據報。
總長度字段是IP首部中必要的內容,由於一些數據鏈路(例如以太網)須要填充一些數據以達到最小長度,儘管以太網的最小幀長度爲46字節,可是IP數據報的長度可能小於這個值。
標識字段,惟一標識主機發出的每一份數據報,一般是每發出一個數據報後,遞增1
生存時間字段,設置IP數據報能夠通過的最多路由器數量,指定了數據報的生存時間,初始值由源主機設置(一般是32或者64),一旦通過一個處理它的路由器,則它的值減去1,當數值爲0時,數據報被丟棄,發送ICMP報文通知源主機
協議字段,標識哪一個協議向IP傳送數據
首部檢驗和字段,根據首部計算的檢驗和碼,不對首部後面的數據進行計算,由於ICMP, IGMP, UDP, TCP都有它們各自的頭部校驗值,用於校驗準確性
若是接收時候,發現檢驗和錯誤,則IP丟棄收到的數據報,可是不生成差錯報文,由上層發現丟失的數據報而且進行重傳
ICMP/IGMP/UDP/TCP採用相同的檢驗和算法,
每一份IP數據報都包含有IP源地址和目的地址
從概念上,IP路由很是簡單,
若是目標主機直接和源主機相連(例如,點到點鏈路)或者源主機和目標主機在共享網絡中(例如,以太網或者令牌環網),IP數據報將直接發送到目標主機
不然,源主機發送IP數據報到默認的路由器,讓路由器將IP數據報發送到目標主機,大多數的主機都採用這種簡單機制
整體規劃中,IP層將收到來自本地上層(TCP,UDP, ICMP, IGMP層)的數據報用於發送,或者從一個網絡接口接收數據報,在IP層,內存中維護了路由表,每一次接收到數據報都會搜索路由表
當從網絡接口中接收到數據報,
(1)IP首先檢查目標IP地址是不是接收主機的IP地址或者接收主機的廣播地址,若是是,執行(2),若是不是,執行(3)
(2)經過IP數據報頭部協議類型,將數據傳送到指定的協議模塊
(3)判斷IP層是否被配置成路由器,若是已經配置,則轉發數據報,不然,直接丟棄該數據報
路由表中每條記錄都包含:
(1)目標IP地址,該IP地址,經過flag字段標識,能夠爲一個完整的主機地址,或者一個網絡地址
主機地址有非0的主機號,網絡地址中的主機號爲0,表示網絡中全部的主機(例如,以太網或者令牌環網)
(2)下一跳路由器的IP地址,或者有直接鏈接的網絡IP地址,
若是下一跳路由器IP是一個直連網絡,經過它能夠轉發數據,
若是下一跳路由器不是最終目標主機,將接收發送的數據報,而且轉發到最終目標主機
(3)flags字段,其中的一個flags字段標識目標IP地址是一個主機地址或者是一個網絡地址,還有一個flags字段表示是不是真正的下一站路由器或者是一個直連的網絡接口
(4)爲數據報的傳輸指定一個網絡接口
IP路由選擇是逐跳的進行,從這個路由表信息能夠看出,IP並不知道到達任何目的地的完整路徑(除了那些目標主機與源主機直接相連的場景),全部的IP路由選擇只爲數據報傳輸提供下一跳路由器的IP地址,它假定下一跳路由器比發送數據報的主機更加接近目標主機,並且下一跳路由器和該主機直接相連,
IP路由選擇主要完成下列功能:
(1)搜索路由表,匹配目標IP地址(網絡號和主機號都要匹配),若是有記錄,把報文發送給該表目指定的下一站路由器或者直接鏈接的網絡接口(取決於標誌字段的值)
(2)若是沒有匹配目標IP地址的記錄,則搜索路由表,尋找能與目的網絡號相匹配的表目,若是有記錄,則把報文發送給該表目指定的下一站路由器或者直接鏈接的網絡接口(取決於標誌字段的值)。全部包含在目標網絡中的主機均可以經過下一跳路由器獲取,這種搜索網絡的匹配方法必須考慮可能的子網掩碼
(3)若是沒有找到匹配目標網絡號的記錄,搜索默認記錄
若是上面三步都沒有執行,則數據報沒法傳送,則一般向生成該數據報的應用程序返回主機不可達
或者網絡不可達
錯誤信息
從上圖中,
(1)全部主機和路由器使用一個默認路由,實際上,大多主機和一些路由器使用默認路由跳轉到除了本地網絡的其餘目標網絡
(2)目標IP地址在數據包中不會變化
(3)可使用不一樣的鏈路層頭部
全部主機須要支持子網尋址,主機ID被分紅子網ID和主機ID
使用子網尋址能夠減小路由次數
經過子網掩碼,能夠判斷主機地址A與主機地址B:
(1)是不是同子網
(2)是否同一個網絡,但不一樣子網
(3)是否不是同一個網絡
能夠將表格分爲三部分:
(1)前兩個表示特殊源地址
(2)第三個表示迴環地址
(3)最後四個表示廣播地址
ifconfig: interface config 接口配置
ifconfig -a 查看全部接口信息
ifconfig eno1 查看接口名稱爲eno1的接口信息
netstat -in