TCP/IP詳解學習筆記(一)--各層主要協議的概覽

1.概覽(自下而上的分層)

1.1 鏈路層(網絡接口卡、網關):與線路(網線、集線器等)一起處理物理接口細節。

1.2 網絡層(IP層):處理數據包的在網絡中的活動,比如數據包的路由:

  • IP(網際協議):爲每一個網卡分配一個邏輯地址(IPv4或者IPv6版本)。
  • ICMP(網際控制消息協議):用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息,並不包含用戶數據。
  • IGMP(Internet組管理協議):把UDP數據包多播到多個主機;
  • ARP(地址解析協議):ip=>mac,
  • RARP(反向地址解析協議):mac=>ip;

1.3 傳輸層:爲兩臺主機提供端到端的通信,主要有兩個協議:

  • TCP協議:提供高可靠的數據通信,主要進行數據分組、確認收到的分組、設置超時時鐘等
  • UDP協議:只把數據報的分組從一個主機發送到另一個主機,不能保證數據能夠達到目的地。

1.4 應用層:處理特定的程序細節,常見應用層協議:

  • Telnet(遠程登錄協議)
  • FTP(文件傳輸協議)
  • SMTP(簡單郵件傳輸協議)
  • SNMP(簡單網絡管理協議)
  • HTTP(超文本傳輸協議)
  • DNS(域名解析協議)

2 自下而上的學習

2.1鏈路層

2.1.1 以太網和IEEE802數據幀格式

RFC894和IEEE802幀格式

一些說明:

  1. 目的地址和源地址:爲48bit的mac地址(16進製表示爲:50-bd-5f-73-75-6a);

  2. 數據部分:爲IP數據報;

  3. IEEE802相對於RFC894多了8個字節的控制數據,總長度是一致的; 鏈路層數據幀的基本格式

  4. HEAD=目的MAC地址+源MAC地址+類型/長度;

  5. Data=需要傳送的數據報(IP數據報)

2.1.2 MTU(最大傳輸單元)

如2.1.1的RFC894及IEEE802所示數據報部分有最大字節數限制(RFC1500\IEEE1492)這個限制就是MTU。如果一個IP數據報大於MTU就會被分片傳輸。

2.1.3 鏈路層的通信過程

請參看前面的的博客 MAC表、ARP緩存表、路由表以及端口映射NAT MAC表那一段對基於MAC進行通信的機制描述;

2.1.4 以太網傳輸控制協議(CSMA/CD協議)

協議的基本流程:

  1. 每個節點再發送數據前偵聽傳輸鏈路是否有信號,如果沒有信號,則發送數據.---先偵聽後發送
  2. 在發送數據時,檢測是否被打斷[據傳輸有延時電磁波速度爲最大光速,在其他介質中會更低,兩個節點前後分別發送信數據後又分別檢測到對方的數據,則認爲被打斷].---邊偵聽便發送
  3. 兩者都會停止並隨即等待一點時間後再次嘗試數據.---隨機等待後重發

一個比較形象的現實場景(就是一圈人說話):

  1. 你先檢測空氣是不是安靜().如果不是,就等待安靜後在發言,如果是則自己說話.---先偵聽後發送
  2. 在你說話的時候,別人不知道你要說話,和你前後發言造成衝突,然後你們兩個則停止發言---邊偵聽便發送
  3. 然後你們兩個各自隨機等待一段時間後再次嘗試說話---衝突,隨即等待後重發

2.2網絡層(IP層)

理論上來說:基於鏈路層這一層協議(主要是MAC地址),我們就可以完成任意主機之間的通訊(只要在物理上互聯),但是這樣存在一個問題。當主機的數量逐漸增長時,每個主機和交換機需要學習的MAC表也會迅速增長,以太網發送數據根據CSMA/CD協議發送數據節點增多後衝突機率會增大,造成這樣的情況:[交換機性能不足(MAC表巨大難以存儲查找),線路上幾乎衝突噪聲,造成網絡癱瘓根本無法通行]。請參考你們上自習課時(老師又不在)的情況,而只有一個人說話才能保證數據正確無誤的傳輸。那麼怎麼解決這個問題呢?物理上相鄰的區域被劃分到一個房間,每個區域內設置一箇中心節點,由中心節點負責跨區域信息的轉達,非中心節點不允許跨區域和其他人說話,這樣一來,區域內可以正常交流,區域之間的噪聲會大幅減少;以太網也進行了類似這樣的劃分,如何盡心劃分的呢?IP協議。IP協議在邏輯上爲每個節點添加了一個唯一的身份標識。

2.2.1 IP及網絡劃分:

2.2.1.1 IP的格式:
1)目前廣泛使用的IP版本爲IPv4,IPv4協議規定網絡地址由32個二進制位組成。習慣上,我們用分成四段的十進制數表示IP地址,從0.0.0.0一直到255.255.255.255。同時網絡上每個主機由唯一的IP與之對應。
2.2.1.2 網絡劃分:
如何標識一個網絡區域呢?IP和子網掩碼;
a. 子網掩碼分爲兩部分組成(網絡號+主機號,也是32bit,從左到右全1的部分表示網絡化,全0的部分表示主機號),
b. 兩個IP分別與子網掩碼求與後:如果結果相同的則主機在同一個網絡區間。
2.2.1.3 IP與MAC
IP層是基於鏈路層建立起來的,那麼MAC和IP是怎麼聯繫起來呢?
ARP協議:IP=>MAC,主機通過APR協議學習並存儲同一網段內需要通信的主機的IP與MAC的對應關係[arp緩存表]
RARP協議:MAC=>IP;

進行網絡劃分後:增加了ARP緩存表、路由表、減小了交換機的MAC表,同時增加一種設備路由器(中心節點),路由器對於子網內的IP數據報流轉不進行調製,根據路由表進行IP數據報的進行網段間的轉發。

2.2.2 IP數據路由基本過程[IP層如何處理數數據的]:

2.2.2.1 對於主機:

如果目的IP和自己在同一個子網內:

1)直接去APR緩存內查詢目標IP對應的MAC然後發送給交換機發送;
2)如果在ARP緩存內沒有目標IP及MAC,則通過交換機發送APR請求廣播,等待響應後學習MAC,進入1)流程;
3)如果ARP請求廣播無響應,則返回目標IP無法找到給上層調用者;

如果不在同一個子網內:

會交給路由器進行IP數據報的路由(轉發);
2.2.2.2 對於路由器:

a.自己生成的數據報處理規則和主機一致;

b.其他主機發給自己的IP數據報則首先檢查數據報的IP是否是自己的IP或者廣播IP(根據自己內存中的路由表),如果是則自己進行相應的處理(響應或者廣播),否則進行轉發.

IP數據報的路由過程:

1)路由器接收到數據包,提取目標IP地址及自己的子網掩碼計算目標網絡地址;
2)根據目標網絡地址查找路由表,如果找到目標網絡地址就按照相應的出口發送到下一個路由器;
3)如果沒有找到,就看一下有沒有默認路由,如果有就按照默認路由的出口發送給下一個路由器;
4)如果沒有找到默認路由就給源IP發送一個出錯ICMP數據包表明沒法傳遞該數據包;

具體機制請參看:MAC表、ARP緩存表、路由表以及端口映射NAT的路由表部分;

2.2.3 IP數據報首部

IP數據報首部格式

字段解釋:

0-3位:IP協議的版本號目前是4;
4-7位:IP數據報首部有多少個4字節數,因爲只有4位所以IP數據報首部最大長度爲(8+4+2+1)*4=60;
8-15位:服務類型(Type of Service),基本沒什麼用,默認值爲5;3(優先權)+4(最小延時?,最大吞吐?,最高可靠?,最小費用?,0false1true)+1(未使用強制0)
15-31位:IP數據報總字節數,包括首部;
32-47位:16bit標識符,用於標識發送IP數據包的先後順序;IP數據報被分片傳輸後到達目的地的順序一般是錯亂的,利用這個標識位來判斷數據報的先後順序進行拼裝;
48-51位:標誌位,
52-63位:片偏移,
64-71位:生存時間(time to live),數據報經過的最大路由器次數,每經過一次路由器數值-1,爲0時。IP數據報被丟棄。(默認值爲64?原因是什麼不知道,有知道請告知)
72-79位:表明上層協議是什麼協議?TCP?UDP?ICMP?IGMP?
80-95位:首部檢驗和,用於數據傳輸的正確性校驗;
96-127位:32bit源IP地址
128-159位:32bit目的IP地址
追加選項,一般不使用,指定一些傳輸策略等等,但要求長度必須是32bit的整數倍;

2.2.4 5類Ip地址(ABCDE):

五類IP:根據低位1的數量來分類

"五類IP"

五類IP範圍:

五類IP範圍

備註:這幾個分類並沒有什麼用,

一些特殊的的IP地址:

1. 0.0.0.0:嚴格來說,這已經不算是一個IP了,指代本機的全部網絡接口,在做網絡監聽時會用到;
2. 255.255.255.255:全網廣播IP地址,限制廣播IP,發往這個IP的數據會發往全Internet網絡的所有主機
3. 127.0.0.1:本機地址,主要用於測試。在Windows系統中,這個地址有一個別名“Localhost”。尋址這樣一個地址,是不能把它發到網絡接口的。除此之外,所有發往127.0.0.0\8網段內任意IP的數據報都會轉發到127.0.0.1。
4. 224.0.0.1:組播地址,224.0.0.0\8網段全是這樣的地址;224.0.0.1特指所有主機,224.0.0.2特指所有路由器;
5. 私網IP:此範圍內的IP用作私網,其數據報文不會被路由器路由; 
  -10.0.0.0/8:10.0.0.0-10.255.255.255(相當於10.0.0.0網段 =》A類網絡2^24-2=16777214個)
  -172.16.0.0/12:172.16.0.0-172.31.255.255(相當於172.16.0.0網段2^20-2介於A類和B類網路之間)
  -192.168.0.0/16:192.168.0.0-192.168.255.255(相當於192.168.0.0網絡 B類網絡2^16-2=65534個)

2.3傳輸層(TCP/UDP協議)

2.3.1TCP\UDP數據包打包過程(Encapsulation):

TCP報文格式

UDP報文格式與此類似,不過UDP首部字段長度爲8個字節

端口(Port):在多進程環境中,每個進程都有可能發送IP數據包,爲了區分各個進程添加了長度16bit的整數來區分。

分爲TCP和UDP端口兩大類

2.3.2TCP\UDP 數據包解包(Demultiplexing)

網絡數據包解包

基本就是按照定義的格式分割取出對自己有用的協議首部,最後拼裝;

2.3.3端口號(Port)

請參考4數據包打包時的備註;1-1023之間的端口號爲系統使用; 常用端口說明

2.4應用層

2.4.1 DNS協議

2.4.1.1 域名的層級劃分:
2.4.1.2 DNS解析過程:
2.4.1.3 hosts文件:

2.4.2 HTTP協議

2.4.3 VPN協議:

3.總結

基本上算是有個大概的學習路徑,也建立起基本的網絡框架了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章