TCP/IP 協議族

TCP/IP 協議族

Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議, 由于各種各樣的電腦運行著各自不同的操作系統為大家服務,這些電腦在表達同一種信息的時候所使用的方法是千差萬別。所以需要一種協議來相互之間通信。TCP IP協議族就是不同種操作系統之間通信的協議。


1. 協議分層

1.? 數據鏈路層:SLIP、PPP

2.? 網絡層:IP、ARP、RARP、ICMP

3.? 傳輸層:TCP、UDP

4.? 應用層:FTP、TELNET、SMTP、HTTP、TFTP

2.IP協議 網絡層

IP協議是TCP/IP協議族中最為核心的協議,所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。

IP協議提供不可靠、無連接的數據報傳送服務。

IP數據報? ??


?? 版本:???? 指IP協議所使用的的版本。目前廣泛使用的IP協議版本號為4???

首部長度:? IP首部長度,可表示的最大十進制數值是15。注意:該字段表示首部占32bit(4個字節)的數目。因為最大只能表示15個,所以首部長度最大為60字節???

服務類型: 優先級標志位(3bit)和服務類型標志位(4bit分別表示最小時延D,最大吞吐量T,最高可靠性R,最小費用C)以及1bit未用位(置0)? 優先權(0-7)數越大,優先級越高。

總長度:??? 指IP的首部和數據部分的長度,單位為字節。總長度為16位,因此最大長度為2^16- 1 = 65536字節。知道首部長度以及總長度可以得到數據部分的起始位置以及數據長度。???

標識:? 一個唯一的標識數字,用來標識一個數據報或者被分片數據報的次序???

標志:?? 用來標識一個數據包是否是一組分片數據包的一部分。 最低位MF(More Fragment)。當MF=1表示后面“還有分片”的數據包,MF=0表示這已經是最后一個分片數據了,中間位DF(Dont Fragment)不能分片,只有當DF=0時,才允許分片???

片偏移: 一個數據包其中的分片,用于重新組裝數據用???

生存時間(TTL): 用來定義數據包的生存周期(初始值由源主機設置通常為32/64),經過一個路由器-1。???

協議: 用來識別上層協議數據包所屬類型???

首部檢驗和: 一個錯誤的檢測機制,確保IP頭部沒有被修改??

源地址: 發送端的IP地址?? 目的地址:數據包目的的IP地址???

可選字段:保留作額外的IP選項???

數據部分:需要IP傳遞的實體數據

數據報的層層封裝? ?

通信過程中,每層協議都要加上一個數據首部(header),稱為封裝(Encapsulation)

封裝是從上往下,解析是從下往上,依次解析。

報文封裝整體結構

(一)IP協議的功能:

(1)尋址和路由;(根據對方的IP地址,尋找最佳路徑傳輸信息);

(2)傳遞服務:① 不可靠(IP協議只是盡自己最大努力去傳輸數據包),可靠性由上層協議提供(TCP協議);② 無連接;(事先不建立會話);

(3)數據包的分片和重組 。

1.IP地址? ??

(1)IPv4

????在主機或路由器中存放的IP地址(IPv4)都是32位的二進制代碼。它包含了網絡號(net-id)和主機號(host-id)兩個獨立的信息段。網絡號用了標識主機或路由器所連接到的網絡,主機號用來標識該主機或路由器。

--IP地址分類

????A<128??一個A類IP地址由1字節的網絡地址和3字節主機地址組成,網絡地址的最高位必須是“0”,地址范圍從1.0.0.0到126.0.0.0。可用的A類網絡有126個,每個網絡能容納1億多個主機。??數字0則表示該地址是本地宿主機,不能傳送。

????B<192一個B類IP地址由2個字節的網絡地址和2個字節的主機地址組成,網絡地址的最高位必須是“10”,地址范圍從128.0.0.0到191.255.255.255。可用的B類網絡有16382個,每個網絡能容納6萬多個主機

????C<224一個C類IP地址由3字節的網絡地址和1字節的主機地址組成,網絡地址的最高位必須是“110”。范圍從192.0.0.0到223.255.255.255。C類網絡可達209萬余個,每個網絡能容納254個主機

????D<240D類IP地址第一個字節以“lll0”開始,它是一個專門保留的地址。它并不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。多點廣播地址用來一次尋址一組計算機,它標識共享同一協議的一組計算機。

????E<255以“llll0”開始,為將來使用保留。全零(“0.0.0.0”)地址對應于當前主機。全“1”的IP地址(“255.255.255.255”)是當前子網的廣播地址

--公網IP地址

????公有地址分配和管理由Inter NIC(Internet Network Information Center 因特網信息中心)負責。各級ISP使用的公網地址都需要向Inter NIC提出申請,有Inter NIC統一發放,這樣就能確保地址塊不沖突。

--私網IP地址

????創建IP尋址方案的人也創建了私網IP地址。這些地址可以被用于私有網絡,在Internet沒有這些IP地址,Internet上的路由器也沒有到私有網絡的路由表。

????A類:10.0.0.0 255.0.0.0,保留了1個A類網絡。

????B類:172.16.0.0 255.255.0.0~172.31.0.0 255.255.0.0,保留了16個B類網絡。

????C類:192.168.0.0 255.255.255.0~192.168.255.0 255.255.255.0,保留了256個C類網絡。

(2)IPv6

IPv6地址長度是128位,由8塊(或8個字段)組成,每一塊都包含四個16進制數,每塊由冒號分隔。

有以下特點:

????1、一個塊中前導的0不必書寫。

????2、全0的塊可以省略,并用符號::代替。

????3、IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。

????表示方式為:IPv6塊值為ffff,其后面緊跟“點分四組”的格式。如:

????::ffff:10.0.0.1

????可以代表IPv4:10.0.0.1

????4、IPv6的低32位通常采用點分四組(就是上面那樣)的表示法。

2.子網掩碼

? (1)子網掩碼的概述及作用

? ? 子網掩碼是一個應用于TCP/IP網絡的32位二進制值,每節8位,必須結合IP地址對應使用。

? ? 子網掩碼32位都與IP地址32位對應,如果某位是網絡地址,則子網掩碼為1,否則為0。

? ? 子網掩碼可以通過與IP地址“與”計算,分離出IP地址中的網絡地址和主機地址,用于判斷該IP地址是在局域網上,還是在廣域網上。

? ? 子網掩碼一般用于將網絡進一步劃分為若干子網,以避免主機過多而擁堵或過少而IP浪費。能有效的隔離廣播域,使得每個廣播域的范圍不至于太大

????(2)子網掩碼和IP地址的計算?

? ? ?1、 網絡地址? ? ??網絡號是用于三層尋址的地址,它代表了整個網絡本身;另一個是廣播地址,它代表了網絡全部的主機。網絡號是網段中的第一個地址,廣播地址是網段中的最后一個地址,這兩個地址是不能配置在計算機主機上的。

????2、 廣播地址? ?它代表了網絡全部的主機

? ? 3、 地址范圍? ?

????4、 本網有幾臺主機??


3.IP尋址?

IP數據包的傳輸過程。

最特殊的情況是目的主機和主機直連,那么主機根本不用尋找路由,直接把數據傳遞過去就可以了。稍微一般一點的情況是,主機通過若干個路由器(router)和目的主機連接。那么路由器就要通過ip包的信息來為ip包尋找到一個合適的目標來進行傳遞,比如合適的主機,或者合適的路由。路由器或者主機將會用如下的方式來處理某一個IP數據包。如果IP數據包的TTL(生命周期)以到,則該IP數據包就被拋棄。


????1. 搜索路由表,優先搜索匹配主機,如果能找到和IP地址完全一致的目標主機,則將該包發向目標主機

????2. 搜索路由表,如果匹配主機失敗,則匹配同子網的路由器,這需要“子網掩碼”的協助。如果找到路由器,則將該包發向路由器。

????3. 搜索路由表,如果匹配同子網路由器失敗,則匹配同網號路由器,如果找到路由器,則將該包發向路由器。

????4. 搜索路由表,如果以上都失敗了,就搜索默認路由,如果默認路由存在,則發包

????5. 如果都失敗了,就丟掉這個包。


這也證明了,ip包是不可靠的。因為它不保證送達。

網絡通信的過程?


現在我們假設有2個主機,主機A和主機B通信,首先主機A通過本機的hosts表或者wins系統或dns系統先將主機B的計算機名轉換為IP地址,然后用自己的IP地址與子網掩碼計算出自己所在的網段,比較目的主機B的ip地址與自己的子網掩碼,發現與自己是出于相同的網段,于是在自己的ARP緩存中查找是否有主機B 的mac地址,如果能找到就直接做數據鏈路層封裝并且通過網卡將封裝好的以太網幀發送有物理線路上去:如果arp緩存中沒有主機B的的mac地址,主機A將啟動arp協議通過在本地網絡上的arp廣播來查詢主機B的mac地址,獲得主機B的mac地址后寫入arp緩存表,進行數據鏈路層的封裝,發送數據。

如果發現A和B不在一個網段中時候,A先找到A的網關C(可以看做路由器),然后網關C會把數據交給另外一個網段的網關D,如果D發現B在這個網段下,就把數據發送給B;如果發現不在,網關D會繼續搜索路由表,找到可以到達B的線路。

路由器在其中的作用


所以路由器最主要的作用是維護路由表,尋找最佳路由然后轉發報文

路由表的建立與維護

路由表中路由有三類:(1)鏈路層協議發現的路由(即是直連路由)(2)靜態路由(3)動態路由協議發現的路由。?

?靜態路由入口由網絡管理員手工配置的靜態路由組成,動態路由入口由路由協議如RIP、OSPF、BGP等交換的路由表信息組成。執行路由操作所需要的信息被包含在路由器的路由表中,它們由一個或多個路由選擇協議進程生成。路由表的內容被限制為只含有到所有目的地的最佳路由。如果存在多條等佳路徑,那么所有這些路徑都將被列入路由表。

動態協議更新路由表

RIP

RIP采用距離向量算法。路由器收集所有可到達目的地的不同路徑,并且保存有關到達每個目的地的最少站點數的路徑信息,除到達目的地的最佳路徑外,任何其它信息均予以丟棄。同時路由器也把所收集的路由信息用RIP協議通知相鄰的其它路由器。這樣,正確的路由信息逐漸擴散到了全網。

0SPF

RIP不能適應大規模異構網絡的互連。0SPF是一種基于鏈路狀態的路由協議,需要每個路由器向其同一管理域的所有其它路由器發送鏈路狀態廣播信息。在OSPF的鏈路狀態廣播中包括所有接口信息、所有的量度和其它一些變量。利用0SPF的路由器首先必須收集有關的鏈路狀態信息,并根據一定的算法計算出到每個節點的最短路徑。而基于距離向量的路由協議僅向其鄰接路由器發送有關路由更新信息。

與RIP不同,OSPF將一個自治域再劃分為區,相應地即有兩種類型的路由選擇方式:當源和目的地在同一區時,采用區內路由選擇;當源和目的地在不同區時,則采用區間路由選擇。這就大大減少了網絡開銷,并增加了網絡的穩定性。當一個區內的路由器出了故障時并不影響自治域內其它區路由器的正常工作,這也給網絡的管理、維護帶來方便。

LAN口不能和WAN口網段相同

如果網段相同,則主機不能判斷,訪問的是內網還是外網地址,有混亂。并且沒有意義

為什么有了IP地址,還要使用MAC地址:

① IP地址一般情況下容易修改和變動,具有隨意性,不能在網絡上固定標識一臺設備;

② MAC地址一般情況出廠時由廠家燒錄到網卡中,不容易修改,在局域范圍內容易唯一定位一臺設備。

③ 從拓撲結構和分層上分析,IP地址屬于網絡層,主要功能在廣域網范圍內路由尋址,選擇最佳路由,而MAC地址在網絡接口層要形成適合于網絡媒體上傳輸的數據幀。


2. ARP? 網絡層協議

地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。 當不知道目標主機的mac地址時使用。??

ARP協議工作過程:

1.? ? 原理:(ARP協議只使用于局域網中)

1>? 在局域網中,網絡中實際傳輸的是“幀”,幀里面是有目標主機的MAC地址的。

2>? 在以太網中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得呢?它就是通過地址解析協議獲得的。所謂“地址解析”就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。

3>? ARP協議的基本功能就是通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。

4>? 點對點的連接是不需要ARP協議的

2.? ? 工作過程:

1>? 當主機A向本局域網上的某個主機B發送IP數據報時,就先在自己的ARP緩沖表中查看有無主機B的IP地址。

2>? 如果有,就可以查出其對應的硬件地址,再將此硬件地址寫入MAC幀,然后通過以太網將數據包發送到目的主機中。

3>? 如果查不到主機B的IP地址的表項。可能是主機B才入網,也可能是主機A剛剛加電。其高速緩沖表還是空的。在這中情況下,主機A就自動運行ARP。

(1)ARP進程在本局域網上廣播一個ARP請求分組。ARP請求分組的主要內容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址為192.168.0.4的主機的硬件地址。

(2)在本局域網上的所有主機上運行的ARP進行都收到此ARP請求分組。

(3)主機B在ARP請求分組中見到自己的IP地址,就向主機A發送ARP響應分組,并寫入自己的硬件地址。其余的所有主機都不理睬這個ARP請求分組。ARP響應分組的主要內容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,請注意:雖然ARP請求分組是廣播發送的,但ARP響應分組是普通的單播,即從一個源地址發送到一個目的地址。

(4)主機A收到主機B的ARP響應分組后,就在其ARP高速緩沖表中寫入主機B的IP地址到硬件地址的映射。


反向地址轉換協議(RARP:Reverse Address Resolution Protocol) 反向地址轉換協議(RARP)允許局域網的物理機器從網關服務器的 ARP 表或者緩存上請求其 IP 地址。


3. ICMP??

ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據,但是對于用戶數據的傳遞起著重要的作用 。ICMP協議主要用來檢測網絡通信故障和實現鏈路追蹤


1.ICMP詢問報文有四種回送請求和回答,時間戳請求和回答,掩碼地址請求和回答,以及路由器詢問和通過。

1>ICMP回送請求報文是由主機或路由器向一個特定的目的主機發出的詢問。收到此報文的機器必須給源主機發送ICMP回送應答報文。這種詢問報文用來測試目的站是否可達以及了解其有關狀態。

2>ICMP時間戳請求允許系統向另一個系統查詢當前的時間。該ICMP報文的好處是它提供了毫秒級的分辨率,而利用其他方法從別的主機獲取的時間只能提供秒級的分辨率。請求端填寫發起時間,然后發送報文。應答系統收到請求報文時填寫接收時間戳,在發送應答時填寫發送時間戳。大多數的實現是把后面兩個字段都設成相同的值。

3>主機使用ICMP地址掩碼請求報文可向子網掩碼服務器得到某個接口的地址掩碼。系統廣播它的ICMP請求報文。ICMP報文中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回,這樣,發送端就可以把應答與請求進行匹配。

4>主機使用ICMP路由器詢問和通過報文可了解連接在本網絡上的路由器是否正常工作。主機將路由器詢問報文進行廣播(或多播)。收到詢問報文的一個或幾個路由器就使用路由器通過報文廣播其路由選擇信息

ping? ? ?

因特網包探索器,用于測試網絡連接量的程序。Ping發送一個ICMP;回聲請求消息給目的地并報告是否收到所希望的ICMPecho (ICMP回聲應答)。它是用來檢查網絡是否通暢或者網絡連接速度的命令。作為一個生活在網絡上的管理員或者黑客來說,ping命令是第一個必須掌握的DOS命令,它所利用的原理是這樣的:利用網絡上機器IP地址的唯一性,給目標IP地址發送一個數據包,再要求對方返回一個同樣大小的數據包來確定兩臺網絡機器是否連接相通,時延是多少。

1.ping 整體過程

主機A 192.168.0.2? ping? B? 1.1.1.5

主機A打開命令提示符(具體方法:開始——運行——cmd),命令提示符(>)后輸入ping 1.1.1.5? 當“ping”這個指令被計算機執行的時候,TCP/IP協議棧會調用該協議棧互聯網層的“ICMP”協議封裝“ping 1.1.1.5”這個請求。

ICMP協議封裝如下:

1->Host A(主機A)若要將這個ICMP協議封裝的請求發送給目標主機B(Host B)就必須要使用IP協議來“運輸”該請求。此時需要IP協議進行封裝,將ICMP這個數據包寫上發送者(主機A)的IP地址和接收者(主機B)的IP地址,然后就可以根據這個目標地址傳遞數據包。

IP協議在封裝如下:


2->下一步進行數據鏈路層的封裝。

2-->判斷目標主機B在本地網絡還是在遠程網絡。根據IP地址和子網掩碼可以計算出了目標主機B在遠程網絡。

3->主機A首先會查詢自己的路由表,看在自己的路由表中能否找到去往目標網絡(網絡B)的路由條目。若沒有則發送到默認網關或缺省網關,由這個默認/缺省網關再將該數據包轉發到目標網絡。現在主機A知道了默認網關是自己的下一跳地址,主機A開始執行封裝。封裝信息如下:

4->在以上所封裝的尋址信息當中,主機A唯一不知道的就是“下一跳設備的MAC地址”,這里的“下一跳設備MAC地址”是指主機A的默認網關的F0/0接口的MAC地址。首先主機A查看自己的ARP緩存表,每臺主機/電腦都有這個ARP緩存表,該緩存表記錄著與自己發生過通信的所有的直接相鄰設備或主機的硬件地址(MAC地址),ARP緩存表經過一段時間會自動刪除,比如Windows 的動態 ARP 緩存條目不超過 10 分鐘就會被刪除。如果主機A與路由器之前曾發生過通信,主機A自然能在ARP緩存表中找到路由器F0/0的硬件MAC地址,可是如果這是主機A與路由器的第一次通信,則主機A會向網絡A上發送發送ARP廣播請求數據包,該ARP請求包包含的關鍵信息如下:

????? 5->以上ARP請求包中封裝的三項信息都是已知的,只有“目的MAC地址”這一信息是未知的(全“0”填充)。當該ARP請求包發送到網絡A上時,網絡A上的設備接收該ARP包并查看該ARP包內的具體封裝信息。因為該ARP包中封裝的目的IP地址是192.168.0.1,所以只有具有192.168.0.1這個IP的接口或設備才應答該ARP查詢請求,應答者會將自己的硬件MAC地址封裝到這個ARP應答數據包中。這個ARP應答數據包(本例中由路由器F0/0接口發出ARP應答)封裝的關鍵信息如下:


6->主機A通過ARP協議解析出路由器F0/0接口的MAC地址從而完成了數據鏈路層的封裝。最后主機A完成MAC地址解析后將該幀發送到網絡A上,該幀的具體封裝如下:

7->因為該幀的目的MAC地址是某個的MAC地址,所以只有路由器的該接口接收并處理該數據幀。路由器將該幀解封裝并查看網絡層的封裝信息,路由器看到該數據包網絡層封裝的目的地址是1.1.1.5。路由器為了將這個數據包轉發到1.1.1.5,進行新一輪的網段查詢,發現路由器F0/1接口與主機B網段相同,取得b的mac地址,封裝以太網幀轉發。

8->這樣主機B就收到了該數據幀,主機B對該幀進行解封裝看到了網絡層封裝的目的IP地址,知道這個數據包的目的地是自己后,主機B繼續對其拆封裝并查看ICMP報頭內的信息得出結論:這是一個請求自己進行反饋的數據包,需要自己將這條“數據包已到達主機B”的信息回饋給主機A。因此主機B為了將回饋信息順利送達主機A需要經過如封裝:

主機B在發送應答數據包時封裝的目的MAC地址是路由器F0/1接口的MAC地址,這也是主機B通過路由判斷和與運算得出的結論,對于主機B來說路由器F0/1接口是它的下一跳。所以相當于原路返回。

從主機A到路由器再到主機B執行的封裝過程中可以看出網絡層封裝的信息是始終不變的:源IP是192.168.0.5 目的IP是1.1.1.5。始終變化的是一跳一跳的硬件MAC地址。


traceroute? 路由追蹤? ??

traceroute (Windows 系統下是tracert) 命令利用ICMP 協議定位您的計算機和目標計算機之間的所有路由器。TTL 值可以反映數據包經過的路由器或網關的數量,通過操縱獨立ICMP 呼叫報文的TTL 值和觀察該報文被拋棄的返回信息,traceroute命令能夠遍歷到數據包傳輸路徑上的所有路由器,Traceroute是用來偵測主機到目的主機之間所經路由情況的重要工具。

原理

Traceroute的原理是知道目的主機的IP后,首先給目的主機發送一個TTL=1的UDP數據包,而經過的第一個路由器收到這個數據包以后,就自動把TTL減1,而TTL變為0以后,路由器就把這個包給拋棄了,并同時產生?一個主機不可達的ICMP數據報給主機。主機收到這個數據報以后再發一個TTL=2的UDP數據報給目的主機,然后刺激第二個路由器給主機發ICMP數據報。如此往復直到到達目的主機。這樣,traceroute就拿到了所有的路由器ip。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 地址解析協議ARP 物理這一級,主機和路由器是用物理地址來區別的。物理地址是一個本地地址,管轄范圍是本地網絡,所以...
    顧慎為閱讀 1,110評論 0 1
  • 網絡層簡介 1. 概念 為解決經由多條鏈路的交付問題,從而設計了網絡層。其主要負責主機到主機的交付,并且在分組經過...
    顧慎為閱讀 3,165評論 0 0
  • 1.這篇文章不是本人原創的,只是個人為了對這部分知識做一個整理和系統的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,134評論 6 174
  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,093評論 0 8
  • 合炁堂是厚樸同學在廣州番禺開的一家無為灸館,館主莊林之前厚樸同學聚會見過,近幾天自灸神闕、中脘等任脈上的穴位,灸感...
    愛折騰的臭豆媽閱讀 658評論 1 4