大家好,我是小杰,。 老規(guī)矩,,先上鎮(zhèn)寶圖——TCP/IP模型
本文并沒有涉及IP地址分類和子網(wǎng)掩碼內(nèi)容。 往期精彩: TCP/IP協(xié)議一家老小詳細介紹介紹
TCP/IP協(xié)議家中的老二——數(shù)據(jù)鏈路層
IP協(xié)議格式IP是TCP/IP協(xié)議中的核心協(xié)議,。它包含兩大特性:不可靠,、無連接,。 - 不可靠指的是它本身不會保證數(shù)據(jù)一定完整送達,需要依靠上層協(xié)議解決,。
- 無連接指的是每個IP數(shù)據(jù)報之間沒有關系,,相互獨立。
至于為什么會這樣設計,,我的理解是分層的思想就是為了讓每層各司其職,,自己負責自己的事情,否則會把某一層弄得很臃腫失去了分層的意義,,我們在設計功能的時候也應該具有這種思想,。
需要注意的是,這種傳輸次序被稱為大端存儲,,又叫網(wǎng)絡字節(jié)序,,因此我們在代碼中的數(shù)據(jù)必須轉(zhuǎn)換成網(wǎng)絡字節(jié)序。
接下來簡述一些各個字段的含義: 4位版本號,,用來表示如0100(IPv4),,0110(IPv6) 4位首部長度:因為一共4位,所以最大表示十進制數(shù)是15,,但是主要注意的是這里的計算單位是32bit,因此最大表示15 * 32bit(4字節(jié)) = 60字節(jié),,首部一定是4字節(jié)的倍數(shù),,不夠會進行填充 上面這個就是RFC 791文檔中對該TOS服務類型字段的定義,0~2位表示優(yōu)先權(quán),,3位表示時延,,4位表示吞吐量,5位表示 可靠性,,后兩位保留恒為0 16位總長度表示的是IP包的總長度,,以字節(jié)為單位。因此IP包最大為65535字節(jié)大小,。 當IP數(shù)據(jù)包因為過大而被分片時,,被分片的IP數(shù)據(jù)報會擁有相同的值 - 第二位,即分段,,是否允許分片(不允許則超過數(shù)據(jù)鏈路層支持的最大長度則丟棄)
- 第三位,,用來表示是不是最后一個分段,當后續(xù)還有報文則會先放到緩沖區(qū),,等待進行重組
片偏移:當IP大包分成多個時,,依據(jù)該偏移量進行重組包,以8字節(jié)位單位計算偏移量 TTL生存時間:設置數(shù)據(jù)報最多的路由數(shù),,即數(shù)據(jù)報的生存時間由源主機設置,,經(jīng)過一個路由器值就減1,,當字段值為0時數(shù)據(jù)報被丟棄,并發(fā)送ICMP報文通知源主機,。 協(xié)議如TCP協(xié)議和UDP協(xié)議等,。 首部檢驗和字段是根據(jù)IP首部計算的檢驗和碼,發(fā)現(xiàn)錯誤就會直接丟棄,。
抓包這個是我從電腦上抓的包,,已經(jīng)把各個字段列出來了,理論與實踐結(jié)合起來了
IP路由過程現(xiàn)在來說所一個IP數(shù)據(jù)包從A發(fā)送到B需要哪些過程: - 當一個IP數(shù)據(jù)包被打包好之后,,上面會記錄有目的地址的IP,,于是把它遞給數(shù)據(jù)鏈路層,由數(shù)據(jù)鏈路層封裝成幀,,開始發(fā)送,。
- 首先查看目的地址是否處于同一個網(wǎng)絡,如果在同一個網(wǎng)絡則直接發(fā)送,,如果不在同一個網(wǎng)絡,,則傳輸給主機所在的默認網(wǎng)關(路由器),由默認網(wǎng)關幫忙轉(zhuǎn)發(fā),。這個過程會查看主機的路由表進行匹配選擇,。
- 路由器根據(jù)路由器的路由表進行匹配,而且會把數(shù)據(jù)包TTL減一,,找到則從表中相應的端口發(fā)出,,找不到則丟棄并向源地址發(fā)送ICMP包,通告源主機,。
IP路由表和轉(zhuǎn)發(fā)表(MAC表)- MAC地址表是二層設備中存儲“MAC地址”和“轉(zhuǎn)發(fā)端口”映射關系的表,并不直接存儲IP地址,。
- 對于三層設備的三層端口來說,,通常是基于報文目的IP地址,對照自身的路由表來選擇轉(zhuǎn)發(fā)路徑,,只有二層設備基于“MAC地址”進行數(shù)據(jù)幀的轉(zhuǎn)發(fā),。
- MAC地址是燒錄在網(wǎng)卡或者接口上的物理地址,具有二層意義和全球唯一性,,一般不能被改變,。IP地址是網(wǎng)絡中的主機或者三層接口在網(wǎng)絡中的邏輯地址,在同一個網(wǎng)絡內(nèi)具有唯一性,。
二層以下數(shù)據(jù)幀的交換一般通過交換機或其他二層設備,,需要用到主機間的MAC地址,但是通常主機網(wǎng)卡配置的是IP地址,此時就需要借助“ARP協(xié)議”將目標主機的IP地址轉(zhuǎn)換為對應主機的MAC地址才能進行通信,,完整過程就是主機依靠IP-MAC的對應關系封裝數(shù)據(jù)幀,,二層設備在收到含有目標MAC地址的數(shù)據(jù)幀后,查看自己的“MAC地址表”,,便知道這個MAC地址該從自己的哪個端口發(fā)送出去,。 綜上來說,雖然數(shù)據(jù)包發(fā)送時包含了完整的TCP/IP四層信息,,但是IP地址只在網(wǎng)絡間尋址才起作用,,在同一個網(wǎng)絡內(nèi),IP地址在發(fā)送端被轉(zhuǎn)化為MAC地址進行尋址,,而這種轉(zhuǎn)化和交換的對應關系,,依賴于ARP協(xié)議和MAC地址表。
|