IP报文字段
ip報文字段
- 4位版本號
- 4位首部長度
- 8位服務類型
- 16位總長度
- 16位標識, 3位標志, 13位片偏移
- 8位生存時間TTL
- 8位協議號
- 16位首部檢驗和
- 32位源IP地址和32位目的IP地址
- 后面就是一個完整的TCP數據報或者UDP數據報
4位版本號
代表是ipv4, 還是ipv6協議4位首部長度
代表ip的報文頭部長度, 變長的
8位服務類型
就是代表這個ip更注重于什么要求
16位總長度
ip報文的總長度, 最大為2的16次方為64K, 和UDP一樣最大長度為64K 但是他們兩個有個區別是, UDP不支持自動的拆包和組包 想要實現需要用戶自己在應用層實現. 但是ip協議, 支持自動的拆包和組包 下面要介紹的三個字段則是用來輔助拆包和組包的16位標識, 3位標志, 13位片偏移
這三個字段是用來實現拆包和組包的, 當TCP報文長度超出范圍時, 就會進行拆包和組包
下面就來說明一下, 比如我現在有a, b, c, d 四個ip包, 他們是由同一個TCP報文拆解下來的.
16位標識 : 代表這幾個包是屬于同一個數據報的嗎, 如果16位標識都相同, 那么就代表屬于同一個報文中的.
13位位偏移 : 按照偏移量的大小, 來確認先后的順序. a的偏移量小于b的偏移量, b小于c, c小于d . 那么先后的順序就是 a, b, c, d 防止"后發先至"
3位標志 : 這個的作用只有一個確認是否到達結尾, 就相當于鏈表的NULL
比如a:0 > b:0 > c :0 > d : 1
d為1, 代表此處的組裝就可以結束了, 因為他是最后一個需要組裝的了
8位生存時間TTL
表示一個數據報在網絡上能傳輸多久(代表可用經過幾個路由器轉發)
初始值一般是64(可配置)
每次進過一個路由器轉發, 他的值就會減1如果減到了0, 這個包就認為不可達, 將會被丟棄
8位協議號
8位協議號, 代表你傳輸層應用的是什么協議
如果是6那么就是TCP, 如果是17那么就是UDP
16位首部檢驗和
16位首部檢驗和的作用是用來檢測ip報文頭部的完整性
32位源IP地址和32位目的IP地址
ip地址其實是一個32位的整形二進制數字, 平常我們寫的192.168.0.1, 這種叫做點分十進制, 是為了我們人理解起來方便, 就將每8位二進制, 化成十進制
后面就是一個完整的TCP數據報或者UDP數據報
值得一提的是TCP的總長度在TCP報文的頭部并沒有提及, 需要配合著IP報文才能算出.
TCP的報文數據長度 = (IP數據報總長度 - IP首部長度) - TCP的報頭長度
總結
- 上一篇: 简谈TCP的八个特性
- 下一篇: 从浏览器输入URL到最终看到页面, 这其