TCP/IP協議的結構參見下圖。有應用層,運輸層,網絡層,鏈路層。linux
可是若是更細化的話,其實還有幾層沒在這上面體現出來。網絡
1 表示層:數據格式化,代碼轉換,加密。 沒有協議加密
2 會話層:解除或者創建與其餘結點的聯繫。沒有協議視頻
3 物理層:以二進制形式在物理鏈路上傳輸數據。協議有ISO2100,IEEE802blog
在上圖中加上這三層協議。就構成了OSI七層協議網絡模型。從上到下分別是應用層,表示層,會話層,傳輸層,網絡層。數據鏈路層,物理層。ip
爲何一個數據傳輸要分紅這麼多層呢。統一爲一個模塊不行麼。其實不論是多層仍是單層,都是能夠實現數據傳輸的。可是在OSI7層模型中,每一層都有本身獨特的任務。若是若是隻有一層的話。在後期維護的時候,就會出現混亂。沒有一個明確的責任主體路由
這就比如是一個工廠。工廠有生產線,採購部,質量部,運輸部,財務部,市場部。對一個產品從無到有的過程當中,會經歷以上部門的處理。若是有任意一個節點出了問題,只須要處理問題節點便可,其餘節點照常運行。OSI7層模型也是同樣的道理。各個層能夠看作是生產流水線上各個部門。各司其職,各自負各自的責任。這也體現了分工協做的思想。部署
那麼7層模型中各自的做用是什麼呢:get
應用層:文件傳輸,電子郵件,文件服務,聊天軟件,視頻播放等各類軟件應用。經常使用的協議有FTP,TFTP,SNMP,SMTP,DNS,Telent. 做用在於產生數據報文cmd
傳輸層:協議有TCP,UDP,是對數據報文在鏈路上傳輸進行控制的. 做用在於告訴數據報文如何去目的地
網絡層:協議有IP,ICMP,RIP,OSPF,BGP等。是對數據報文進行地址尋址的協議。做用在於告訴數據報文去哪
數據鏈路層:協議有ARP,RARP,PPP等,做用在於告訴數據報文如何在路上行走。
咱們來看下報文的結構,從應用層到鏈路層,每一層對本身的數據進行一個打包,交給下一層進行處理。最終造成一個以太網幀。
到了目的地後,對端也是從鏈路層解析到應用層,而後解析出來的數據交給各層進行處理,以下圖。
這種封裝,解封裝的過程就比如是發送一個公司給另一個公司發送包裹。源公司的各個部門將本身的數據封裝好,最終造成一個總的包裹,目的公司收到包裹後,按照包裹的封裝各層解析,而後交給各個對應的部門
那麼下面咱們就首先來介紹下IP層協議。
將IP層協議首先介紹IP地址的概念。IP地址在網絡上的做用就比如咱們在快遞物品時填寫的地址。每一個設備要想在網絡上進行應用交互或者是和其餘設備通訊,都須要一個IP地址。那麼咱們的IP地址在哪能查呢。
Windows系統下在cmd界面輸入ipconfig。獲得下面的結果。其中IPV4地址就是本機的IP地址。
Linux系統下輸入ifconfig
在查詢出來的信息中,有幾個概念須要介紹下。1 子網掩碼。2 默認網關。
IPV4地址爲32bit,分爲兩個部分,網絡號和主機號。爲何要這樣區分呢。前面講到IP協議的做用就在於尋址,這個尋址就是尋找不一樣網絡的地址。網絡地址就是由IP地址的網絡號肯定的,不一樣的網絡號表明不一樣的網絡地址。若是屬於同一網絡,那麼主機號就是區分同一網絡下的設備。就比如有一棟樓,這棟樓的業主要寄包裹。那麼地址以下:
XX市XX區XX街道XX小區XX棟Y-Y號。前面紅色標註的地址每一個業主都同樣。不同的是具體門牌號。紅色標註的地址就比如IP網絡中的網絡地址,Y-Y號就比如主機地址。
IP地址的格式以下,分爲A-E類地址。A-E類地址經過最左邊的比特來肯定。A類爲0,B類爲10,C類爲110,D類爲1110,E類爲11110.。 後面的部分就區分爲網絡號和主機號
前面介紹了IP地址的做用,那麼網絡掩碼是幹嗎的呢。網絡掩碼就是用來區分IP地址的網絡號以及主機號分別是多少。計算的方法就是IP地址和網絡掩碼進行與運算,獲得的就是網絡地址。
好比192.169.1.1的二進制位11000000 10101001 00000001 00000001
掩碼255.255.255.0的二進制位 11111111 11111111 11111111 00000000
獲得的網絡地址就是192.169.1.0。那麼主機號就是最後的1個字節(8個bit)。那麼在這個網絡下主機IP地址的範圍就是192.169.1.1->192.169.1.254。其中192.169.1.0是網絡號,主機地址不會採用。192.169.1.255是該網絡的廣播地址。所以主機號的bit爲全0 或者全1都不會採用. 所以可分配的主機個數爲2的n次方(n爲主機號的bit個數)-2. 參考上面的這個例子,主機號長度爲8. 那麼可分配的主機個數爲2^8-2=256-2=254。
前面A-E類IP地址的網絡號和主機號都是固定的,對於具體的網絡部署來講並非很方便,咱們能夠本身定義網絡號和主機號。也就是自定義網絡號和主機號的長度。這叫作變長子網掩碼。好比剛纔的192.169.1.1的網絡號是192.169.1.0. 咱們也能夠寫成192.169.1.1/24. 這個24代表的是網絡長度。這樣寫的話就比較直觀了。那麼邊長子網掩碼就是改寫這個長度,好比192.169.1.1/20 那麼網絡號就只佔20位。結果以下.因爲網絡號只佔了20位,所以主機IP地址長度從8擴展爲12. 那麼可分配的主機號就爲2^12-2=4094。
所以若是想一個網絡容納更多主機,那麼能夠縮短網絡號長度。若是想規劃更多的子網,那麼能夠增長網絡號長度
下面再看下網關的含義:顧名思義,網關就是網絡關口的意思。通俗點說就是告訴網絡下一個地址是在哪。好比前面查出來的網關爲192.168.0.1,IP地址爲192.168.0.5。 也就是說首先將數據包發給192.168.0.1. 這個192.168.0.1在真實的環境中就是個人無線路由器。鏈接到到這個無線路由器下的設備都將數據包發送給路由器。而後經過路由器向外轉發。
那麼網關是不是必需要配置的呢,其實也不是,只要是L3設備能夠經過配置路由和下一跳,這裏下一跳就是起到網關的做用。數據發到網關設備後,網關設備會根據本身的路由表找到轉發路徑將數據轉發到目的地址。咱們能夠用tracert(linux下用traceroute)的命令來看下,好比輸入tracert www.sina.com.cn 就會獲得下面的通過的地址。第一個地址就是192.168.1.1網關地址。下面顯示總共通過了8次轉發。
Windows:
Linux:
下面咱們來看下IP協議的組成,IPV4中普通的IP首部長20個字節。其中有32位的源IP地址和32位的目的IP地址。
TTL:生存時間。表明了數據包能夠通過的最多路由器數。好比TTL爲10,意思是若是通過10次路由器轉發,仍然未找到目的地址,則報文丟棄
8位協議指示的是傳輸層承載的協議
16位總長度:指IP數據包的最大長度。16bit那麼最長可達65535字節。可是經過鏈路的MTU不會有這麼大。所以若是數據包長度超過了MTU,數據包會被分片。若是發生了分片,則須要用到16位標識以及13位片偏移來找到分片的報文。
咱們用wiresharK來抓取一個具體的數據包看下IP報文:其中Time to live:128也就是TTL 128.
Protocol: UDP,說明這個是一個UDP報文。 Source和Destination分別是源和目的IP地址