TCP/IP协议基础
生活随笔
收集整理的這篇文章主要介紹了
TCP/IP协议基础
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、TCP/IP協議棧?
四層模型?
TCP/IP這個協議遵守一個四層的模型概念:應用層、傳輸層、互聯層和網絡接口層。?
網絡接口層?
模型的基層是網絡接口層。負責數據幀的發送和接收,幀是獨立的網絡信息傳輸單元。網絡接口層將幀放在網上,或從網上把幀取下來。?
互聯層?
互聯協議將數據包封裝成internet數據報,并運行必要的路由算法。?
這里有四個互聯協議:?
網際協議IP:負責在主機和網絡之間尋址和路由數據包。?
地址解析協議ARP:獲得同一物理網絡中的硬件主機地址。?
網際控制消息協議ICMP:發送消息,并報告有關數據包的傳送錯誤。?
互聯組管理協議IGMP:被IP主機拿來向本地多路廣播路由器報告主機組成員。?
傳輸層?
傳輸協議在計算機之間提供通信會話。傳輸協議的選擇根據數據傳輸方式而定。?
兩個傳輸協議:?
傳輸控制協議TCP:為應用程序提供可靠的通信連接。適合于一次傳輸大批數據的情況。并適用于要求得到響應的應用程序。?
用戶數據報協議UDP:提供了無連接通信,且不對傳送包進行可靠的保證。適合于一次傳輸小量數據,可靠性則由應用層來負責。?
應用層?
應用程序通過這一層訪問網絡。?
網絡接口技術?
IP使用網絡設備接口規范NDIS向網絡接口層提交幀。IP支持廣域網和本地網接口技術。?
串行線路協議?
TCP/IPG一般通過internet串行線路協議SLIP或點對點協議PPP在串行線上進行數據傳送。(是不是我們平時把它稱之為異步通信,對于要拿LINUX提供建立遠程連接的朋友應該多研究一下這方面的知識)??
2、ARP?
要在網絡上通信,主機就必須知道對方主機的硬件地址(我們不是老遇到網卡的物理地址嘛)。地址解析就是將主機IP地址映射為硬件地址的過程。地址解析協議ARP用于獲得在同一物理網絡中的主機的硬件地址。?
解釋本地IP地址(要了解地址解析工作過程的朋友看好了)?
主機IP地址解析為硬件地址:?
(1)當一臺主機要與別的主機通信時,初始化ARP請求。當該IP斷定IP地址是本地時,源主機在ARP緩存中查找目標主機的硬件地址。?
(2)要是找不到映射的話,ARP建立一個請求,源主機IP地址和硬件地址會被包括在請求中,該請求通過廣播,使所有本地主機均能接收并處理。?
(3)本地網上的每個主機都收到廣播并尋找相符的IP地址。?
(4)當目標主機斷定請求中的IP地址與自己的相符時,直接發送一個ARP答復,將自己的硬件地址傳給源主機。以源主機的IP地址和硬件地址更新它的ARP緩存。源主機收到回答后便建立起了通信。?
解析遠程IP地址?
不同網絡中的主機互相通信,ARP廣播的是源主機的缺省網關。?
目標IP地址是一個遠程網絡主機的話,ARP將廣播一個路由器的地址。?
(1)通信請求初始化時,得知目標IP地址為遠程地址。源主機在本地路由表中查找,若無,源主機認為是缺省網關的IP地址。在ARP緩存中查找符合該網關記錄的IP地址(硬件地址)。?
(2)若沒找到該網關的記錄,ARP將廣播請求網關地址而不是目標主機的地址。路由器用自己的硬件地址響應源主機的ARP請求。源主機則將數據包送到路由器以傳送到目標主機的網絡,最終達到目標主機。?
(3)在路由器上,由IP決定目標IP地址是本地還是遠程。如果是本地,路由器用ARP(緩存或廣播)獲得硬件地址。如果是遠程,路由器在其路由表中查找該網關,然后運用ARP獲得此網關的硬件地址。數據包被直接發送到下一個目標主機。?
(4)目標主機收到請求后,形成ICMP響應。因源主機在遠程網上,將在本地路由表中查找源主機網的網關。找到網關后,ARP即獲取它的硬件地址。?
(5)如果此網關的硬件地址不在ARP緩存中,通過ARP廣播獲得。一旦它獲得硬件地址,ICMP響應就送到路由器上,然后傳到源主機。?
ARP緩存?
為減少廣播量,ARP在緩存中保存地址映射以備用。ARP緩存保存有動態項和靜態項。動態項是自動添加和刪除的,靜態項則保留在CACHE中直到計算?
機重新啟動。?
ARP緩存總是為本地子網保留硬件廣播地址(0xffffffffffffh)作為一個永久項。?
此項使主機能夠接受ARP廣播。當查看緩存時,該項不會顯示。?
每條ARP緩存記錄的生命周期為10分鐘,2分鐘內未用則刪除。緩存容量滿時,刪除最老的記錄。?
加入靜態(永久)記錄?
通過添加靜態ARP項可減少ARP請求訪問主機的次數。?
ARP包的結構?
ARP結構的字段如下:?
硬件類型--使用的硬件(網絡訪問層)類型。?
協議類型--解析過程中的協議使用以太類型的值。?
硬件地址長度--硬件地址的字節長度,對于以太網和令牌環來說,其長度為6字節。?
協議地址長度--協議地址字節的長度,IP的長度是4字節。?
操作號--指定當前執行操作的字段。?
發送者的硬件地址--發送者的硬件地址。?
發送者的協議地址--發送者的協議地址。?
目的站硬件地址--目標者的硬件地址。?
目的站協議地址--目標者的協議地址。?
3、ICMP和IGMP?
internet控制消息協議ICMP是用于報告錯誤并代表IP對消息進行控制。?
IP運用互聯組管理協議IGMP來告訴路由器,某一網絡上指導組中的可用主機。?
ICMP?
ICMP源抑制消息:當TCP/IP主機發送數據到另一主機時,如果速度達到路由器或者鏈路的飽和狀態,路由器發出一個ICMP源抑制消息。?
ICMP數據包結構?
類型:一個8位類型字段,表示ICMP數據包類型。?
代碼:一個8位代碼域,表示指定類型中的一個功能。如果一個類型中只有一種功能,代碼域置為0。?
檢驗和:數據包中ICMP部分上的一個16位檢驗和。?
指定類型的數據隨每個ICMP類型變化的一個附加數據。?
IGMP?
IGMP信息傳給別的路由器以使每個支持多路廣播的路由器獲知哪個主機組和哪個網絡中。?
IGMP包結構?
版本:IGMP的版本,值一般為0x1h。?
類型:IGMP消息的類型。0x1h類型稱為主機成員請求,在多路廣播路由器上用于指定多級組中的任何成員輪詢一個網絡。0x2h類型稱為主機成員報告,在主機上用于發布指定組中的成員情況或對一個路由器的主機成員請求進行回答。?
未用:未用的域名被發送者置零且被接收者忽略。?
檢驗和:IGMP頭的一個16位檢驗和。?
組地址:主機用該組地址在一個主機成員請求中存儲IP多路廣播地址。在主機成員請求中,組地址被全置零,而且硬件級的多路廣播地址被用來標示主機組。?
4、IP?
IP是一個無連接的協議,主要就是負責在主機間尋址并為數據包設定路由,在交換數據前它并不建立會話。因為它不保證正確傳遞,另一方面,數據在被收到時,IP不需要收到確認,所以它是不可靠的。?
有一些字段,在當數據從傳輸層傳下來時,會被附加在數據包中,我們來看一下這些字段:?
源IP地址:用IP地址確定數據報發送者。?
目標IP地址:用IP地址確定數據報目標。?
協議:告知目的機的IP是否將包傳給TCP或UDP。?
檢查和:一個簡單的數學計算,用來證實收到的包的完整性。?
TTL生存有效時間:指定一個數據報被丟棄之前,在網絡上能停留多少時間(以秒計)。它避免了包在網絡中無休止循環。路由器會根據數據在路由器中駐留的時間來遞減TTL。其中數據報通過一次路由器,TTL至少減少一秒。?
根據我們前面提到關于ARP的知識,如果IP地址目標為本地地址時,IP將數據包直接傳給那個主機;如果目標地址為遠程地址的話,IP在本地的路由表中查找遠程主機的路由(看來好象我們平時撥114一樣)。如果找到一個路由,IP用它傳送數據包。如果沒找到呢,就會將數據包發送到源主機的缺省網關,也稱之為路由器。(很多時候一直在搞網關和路由器的定義,其實我覺得在學的時候不一定死摳概念,現在硬件和軟件結合的產品越來越多了,一時很分清的,只要我們運用的時候可以解決實際問題嘛。)?
這樣當路由器收到一個包后,該包向上傳給IP:?
(1)如果交通阻塞(聽起來蠻可怕的),包在路由器中停滯,TTL至少減1或更多。要是它降到0的話,包就會被拋棄。?
(2)如果對于下一網絡來說包太大的話,IP會將它分割成若干個小包。?
(3)如果包被分解,IP為每個新包制造一個新頭,其中包括:一個標志,用來顯示其它小包在其后;一個小包ID,用來確定所有小包是一起的;一個小包偏移,用來告訴接收主機怎么重新組合它們。?
(4)IP計算一個新的檢驗和。?
(5)IP獲取一個路由的目標硬件地址。?
(6)IP轉發包。?
在下一主機,包被發送到TCP或UDP。每個路由器都要重復該過程。直到包到達最終目的地。當包到達最終目的地后,IP將小包組裝成原來的包。?
5、TCP?
TCP是一種可靠的面向連接的傳送服務。它在傳送數據時是分段進行的,主機交換數據必須建立一個會話。它用比特流通信,即數據被作為無結構的字節流。?
通過每個TCP傳輸的字段指定順序號,以獲得可靠性。如果一個分段被分解成幾個小段,接收主機會知道是否所有小段都已收到。通過發送應答,用以確認別的主機收到了數據。對于發送的每一個小段,接收主機必須在一個指定的時間返回一個確認。如果發送者未收到確認,數據會被重新發送;如果收到的數據包損壞,接收主機會舍棄它,因為確認未被發送,發送者會重新發送分段。?
端口?
SOCKETS實用程序使用一個協議端口號來標明自己應用的唯一性。端口可以使用0到65536之間的任何數字。在服務請求時,操作系統動態地為客戶端的應用程序分配端口號。?
套接字?
套接字在要領上與文件句柄類似,因為其功能是作為網絡通信的終結點。一個應用程序通過定義三部分來產生一個套接字:主機IP地址、服務類型(面向連接的服務是TCP,無連接服務是UDP)、應用程序所用的端口。?
TCP端口?
TCP端口為信息的傳送提供定地點,端口號小于256的定義為常用端口。?
TCP的三次握手?
TCP對話通過三次握手來初始化。三次握手的目的是使數據段的發送和接收同步;告訴其它主機其一次可接收的數據量,并建立虛連接。?
我們來看看這三次握手的簡單過程:?
(1)初始化主機通過一個同步標志置位的數據段發出會話請求。?
(2)接收主機通過發回具有以下項目的數據段表示回復:同步標志置位、即將發送的數據段的起始字節的順序號、應答并帶有將收到的下一個數據段的字節順序號。?
(3)請求主機再回送一個數據段,并帶有確認順序號和確認號。?
TCP滑動窗口?
TCP滑動窗口用來暫存兩臺主機間要傳送的數據,有點類似CACHE。?
每個TCP/IP主機有兩個滑動窗口:一個用于接收數據,另一個用于發送數據。?
6、UDP?
用戶數據報協議UDP提供了無連接的數據報服務。它適用于無須應答并且通常一次只傳送少量數據的應用軟件。?
UDP端口?
端口作為多路復用的消息隊列使用。?
15?NETSTAT?網絡狀態?
53?DOMAIN?域名服務器?
69?TFTP?平凡文件傳送協議?
137?NETBIOS-NS?NETBIOS命令服務?
138?NETBIOS-DGM?NETBIOS數據報服務?
161?SNMP?SNMP網絡監視器?
--------------------------------------------------------------------------------
實現IP路由?
1、IP路由簡介?
路由就是選擇一條數據包傳輸路徑的過程。當TCP/IP主機發送IP數據包時,便出現了路由,且當到達IP路由器還會再次出現。路由器是從一個物理網向另一個物理網發送數據包的裝置,路由器通常被稱為網關。對于發送的主機和路由器而言,必須決定向哪里轉發數據包。在決定路由時,IP層查詢位于內存中的路由表。?
(1)當一個主機試圖與另一個主機通信時,IP首先決定目的主機是一個本地網還是遠程網。?
(2)如果目的主機是遠程網,IP將查詢路由表來為遠程主機或遠程網選擇一個路由。?
(3)若未找到明確的路由,IP用缺省的網關地址將一個數據傳送給另一個路由器。?
(4)在該路由器中,路由表再次為遠程主機或網絡查詢路由,若還未找到路由,該數據包將發送到該路由器的缺省網關地址。?
每發現一條路由,數據包被轉送下一級路由器,稱為一次“跳步”,并最終發送至目的主機。?
若未發現任何一個路由,源主機將收到一個出錯信息。?
--------------------------------------------------------------------------------?
TCP/IP協議介紹?
TCP/IP的通訊協議?
這部分簡要介紹一下TCP/IP的內部結構,為討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、以太網以及RS-232串行接口)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User?Datagram?Protocol)協議、ICMP(Internet?Control?Message?Protocol)協議和其他一些協議的協議組。?
TCP/IP整體構架概述?
TCP/IP協議并不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。這4層分別為:?
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。?
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據并把它傳輸到下一層中,這一層負責傳送數據,并且確定數據已被送達并接收。?
互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。?
網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial?Line等)來傳送數據。?
TCP/IP中的協議?
以下簡單介紹TCP/IP中的協議都具備什么樣的功能,都是如何工作的:?
1.?IP?
網際協議IP是TCP/IP的心臟,也是網絡層中最重要的協議。?
IP層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,并把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP并沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。?
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP?source?routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最后一個系統傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務將產生問題并且會被非法入侵。?
2.?TCP?
如果IP數據包中有已經封好的TCP數據包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。?
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最后到接收方。?
面向連接的服務(例如Telnet、FTP、rlogin、X?Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。?
3.UDP?
UDP與TCP位于同一層,但對于數據包的順序錯誤或重發。因此,UDP不被應用于那些使用虛電路的面向連接的服務,UDP主要用于那些面向查詢---應答的服務,例如NFS。相對于FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。?
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。?
4.ICMP?
ICMP與IP位于同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務。?
5.?TCP和UDP的端口結構?
TCP和UDP服務通常有一個客戶/服務器的關系,例如,一個Telnet服務進程開始在系統上處于空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息并發出響應,客戶程序讀出響應并向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。?
兩個系統間的多重Telnet連接是如何相互確認并協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:?
源IP地址---發送包的IP地址。?
目的IP地址---接收包的IP地址。?
源端口---源系統上的連接的端口。?
目的端口---目的系統上的連接的端口。?
端口是一個軟件結構,被客戶程序或服務進程用來發送和接收信息。一個端口對應一個16比特的數。服務進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣為人知’的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
四層模型?
TCP/IP這個協議遵守一個四層的模型概念:應用層、傳輸層、互聯層和網絡接口層。?
網絡接口層?
模型的基層是網絡接口層。負責數據幀的發送和接收,幀是獨立的網絡信息傳輸單元。網絡接口層將幀放在網上,或從網上把幀取下來。?
互聯層?
互聯協議將數據包封裝成internet數據報,并運行必要的路由算法。?
這里有四個互聯協議:?
網際協議IP:負責在主機和網絡之間尋址和路由數據包。?
地址解析協議ARP:獲得同一物理網絡中的硬件主機地址。?
網際控制消息協議ICMP:發送消息,并報告有關數據包的傳送錯誤。?
互聯組管理協議IGMP:被IP主機拿來向本地多路廣播路由器報告主機組成員。?
傳輸層?
傳輸協議在計算機之間提供通信會話。傳輸協議的選擇根據數據傳輸方式而定。?
兩個傳輸協議:?
傳輸控制協議TCP:為應用程序提供可靠的通信連接。適合于一次傳輸大批數據的情況。并適用于要求得到響應的應用程序。?
用戶數據報協議UDP:提供了無連接通信,且不對傳送包進行可靠的保證。適合于一次傳輸小量數據,可靠性則由應用層來負責。?
應用層?
應用程序通過這一層訪問網絡。?
網絡接口技術?
IP使用網絡設備接口規范NDIS向網絡接口層提交幀。IP支持廣域網和本地網接口技術。?
串行線路協議?
TCP/IPG一般通過internet串行線路協議SLIP或點對點協議PPP在串行線上進行數據傳送。(是不是我們平時把它稱之為異步通信,對于要拿LINUX提供建立遠程連接的朋友應該多研究一下這方面的知識)??
2、ARP?
要在網絡上通信,主機就必須知道對方主機的硬件地址(我們不是老遇到網卡的物理地址嘛)。地址解析就是將主機IP地址映射為硬件地址的過程。地址解析協議ARP用于獲得在同一物理網絡中的主機的硬件地址。?
解釋本地IP地址(要了解地址解析工作過程的朋友看好了)?
主機IP地址解析為硬件地址:?
(1)當一臺主機要與別的主機通信時,初始化ARP請求。當該IP斷定IP地址是本地時,源主機在ARP緩存中查找目標主機的硬件地址。?
(2)要是找不到映射的話,ARP建立一個請求,源主機IP地址和硬件地址會被包括在請求中,該請求通過廣播,使所有本地主機均能接收并處理。?
(3)本地網上的每個主機都收到廣播并尋找相符的IP地址。?
(4)當目標主機斷定請求中的IP地址與自己的相符時,直接發送一個ARP答復,將自己的硬件地址傳給源主機。以源主機的IP地址和硬件地址更新它的ARP緩存。源主機收到回答后便建立起了通信。?
解析遠程IP地址?
不同網絡中的主機互相通信,ARP廣播的是源主機的缺省網關。?
目標IP地址是一個遠程網絡主機的話,ARP將廣播一個路由器的地址。?
(1)通信請求初始化時,得知目標IP地址為遠程地址。源主機在本地路由表中查找,若無,源主機認為是缺省網關的IP地址。在ARP緩存中查找符合該網關記錄的IP地址(硬件地址)。?
(2)若沒找到該網關的記錄,ARP將廣播請求網關地址而不是目標主機的地址。路由器用自己的硬件地址響應源主機的ARP請求。源主機則將數據包送到路由器以傳送到目標主機的網絡,最終達到目標主機。?
(3)在路由器上,由IP決定目標IP地址是本地還是遠程。如果是本地,路由器用ARP(緩存或廣播)獲得硬件地址。如果是遠程,路由器在其路由表中查找該網關,然后運用ARP獲得此網關的硬件地址。數據包被直接發送到下一個目標主機。?
(4)目標主機收到請求后,形成ICMP響應。因源主機在遠程網上,將在本地路由表中查找源主機網的網關。找到網關后,ARP即獲取它的硬件地址。?
(5)如果此網關的硬件地址不在ARP緩存中,通過ARP廣播獲得。一旦它獲得硬件地址,ICMP響應就送到路由器上,然后傳到源主機。?
ARP緩存?
為減少廣播量,ARP在緩存中保存地址映射以備用。ARP緩存保存有動態項和靜態項。動態項是自動添加和刪除的,靜態項則保留在CACHE中直到計算?
機重新啟動。?
ARP緩存總是為本地子網保留硬件廣播地址(0xffffffffffffh)作為一個永久項。?
此項使主機能夠接受ARP廣播。當查看緩存時,該項不會顯示。?
每條ARP緩存記錄的生命周期為10分鐘,2分鐘內未用則刪除。緩存容量滿時,刪除最老的記錄。?
加入靜態(永久)記錄?
通過添加靜態ARP項可減少ARP請求訪問主機的次數。?
ARP包的結構?
ARP結構的字段如下:?
硬件類型--使用的硬件(網絡訪問層)類型。?
協議類型--解析過程中的協議使用以太類型的值。?
硬件地址長度--硬件地址的字節長度,對于以太網和令牌環來說,其長度為6字節。?
協議地址長度--協議地址字節的長度,IP的長度是4字節。?
操作號--指定當前執行操作的字段。?
發送者的硬件地址--發送者的硬件地址。?
發送者的協議地址--發送者的協議地址。?
目的站硬件地址--目標者的硬件地址。?
目的站協議地址--目標者的協議地址。?
3、ICMP和IGMP?
internet控制消息協議ICMP是用于報告錯誤并代表IP對消息進行控制。?
IP運用互聯組管理協議IGMP來告訴路由器,某一網絡上指導組中的可用主機。?
ICMP?
ICMP源抑制消息:當TCP/IP主機發送數據到另一主機時,如果速度達到路由器或者鏈路的飽和狀態,路由器發出一個ICMP源抑制消息。?
ICMP數據包結構?
類型:一個8位類型字段,表示ICMP數據包類型。?
代碼:一個8位代碼域,表示指定類型中的一個功能。如果一個類型中只有一種功能,代碼域置為0。?
檢驗和:數據包中ICMP部分上的一個16位檢驗和。?
指定類型的數據隨每個ICMP類型變化的一個附加數據。?
IGMP?
IGMP信息傳給別的路由器以使每個支持多路廣播的路由器獲知哪個主機組和哪個網絡中。?
IGMP包結構?
版本:IGMP的版本,值一般為0x1h。?
類型:IGMP消息的類型。0x1h類型稱為主機成員請求,在多路廣播路由器上用于指定多級組中的任何成員輪詢一個網絡。0x2h類型稱為主機成員報告,在主機上用于發布指定組中的成員情況或對一個路由器的主機成員請求進行回答。?
未用:未用的域名被發送者置零且被接收者忽略。?
檢驗和:IGMP頭的一個16位檢驗和。?
組地址:主機用該組地址在一個主機成員請求中存儲IP多路廣播地址。在主機成員請求中,組地址被全置零,而且硬件級的多路廣播地址被用來標示主機組。?
4、IP?
IP是一個無連接的協議,主要就是負責在主機間尋址并為數據包設定路由,在交換數據前它并不建立會話。因為它不保證正確傳遞,另一方面,數據在被收到時,IP不需要收到確認,所以它是不可靠的。?
有一些字段,在當數據從傳輸層傳下來時,會被附加在數據包中,我們來看一下這些字段:?
源IP地址:用IP地址確定數據報發送者。?
目標IP地址:用IP地址確定數據報目標。?
協議:告知目的機的IP是否將包傳給TCP或UDP。?
檢查和:一個簡單的數學計算,用來證實收到的包的完整性。?
TTL生存有效時間:指定一個數據報被丟棄之前,在網絡上能停留多少時間(以秒計)。它避免了包在網絡中無休止循環。路由器會根據數據在路由器中駐留的時間來遞減TTL。其中數據報通過一次路由器,TTL至少減少一秒。?
根據我們前面提到關于ARP的知識,如果IP地址目標為本地地址時,IP將數據包直接傳給那個主機;如果目標地址為遠程地址的話,IP在本地的路由表中查找遠程主機的路由(看來好象我們平時撥114一樣)。如果找到一個路由,IP用它傳送數據包。如果沒找到呢,就會將數據包發送到源主機的缺省網關,也稱之為路由器。(很多時候一直在搞網關和路由器的定義,其實我覺得在學的時候不一定死摳概念,現在硬件和軟件結合的產品越來越多了,一時很分清的,只要我們運用的時候可以解決實際問題嘛。)?
這樣當路由器收到一個包后,該包向上傳給IP:?
(1)如果交通阻塞(聽起來蠻可怕的),包在路由器中停滯,TTL至少減1或更多。要是它降到0的話,包就會被拋棄。?
(2)如果對于下一網絡來說包太大的話,IP會將它分割成若干個小包。?
(3)如果包被分解,IP為每個新包制造一個新頭,其中包括:一個標志,用來顯示其它小包在其后;一個小包ID,用來確定所有小包是一起的;一個小包偏移,用來告訴接收主機怎么重新組合它們。?
(4)IP計算一個新的檢驗和。?
(5)IP獲取一個路由的目標硬件地址。?
(6)IP轉發包。?
在下一主機,包被發送到TCP或UDP。每個路由器都要重復該過程。直到包到達最終目的地。當包到達最終目的地后,IP將小包組裝成原來的包。?
5、TCP?
TCP是一種可靠的面向連接的傳送服務。它在傳送數據時是分段進行的,主機交換數據必須建立一個會話。它用比特流通信,即數據被作為無結構的字節流。?
通過每個TCP傳輸的字段指定順序號,以獲得可靠性。如果一個分段被分解成幾個小段,接收主機會知道是否所有小段都已收到。通過發送應答,用以確認別的主機收到了數據。對于發送的每一個小段,接收主機必須在一個指定的時間返回一個確認。如果發送者未收到確認,數據會被重新發送;如果收到的數據包損壞,接收主機會舍棄它,因為確認未被發送,發送者會重新發送分段。?
端口?
SOCKETS實用程序使用一個協議端口號來標明自己應用的唯一性。端口可以使用0到65536之間的任何數字。在服務請求時,操作系統動態地為客戶端的應用程序分配端口號。?
套接字?
套接字在要領上與文件句柄類似,因為其功能是作為網絡通信的終結點。一個應用程序通過定義三部分來產生一個套接字:主機IP地址、服務類型(面向連接的服務是TCP,無連接服務是UDP)、應用程序所用的端口。?
TCP端口?
TCP端口為信息的傳送提供定地點,端口號小于256的定義為常用端口。?
TCP的三次握手?
TCP對話通過三次握手來初始化。三次握手的目的是使數據段的發送和接收同步;告訴其它主機其一次可接收的數據量,并建立虛連接。?
我們來看看這三次握手的簡單過程:?
(1)初始化主機通過一個同步標志置位的數據段發出會話請求。?
(2)接收主機通過發回具有以下項目的數據段表示回復:同步標志置位、即將發送的數據段的起始字節的順序號、應答并帶有將收到的下一個數據段的字節順序號。?
(3)請求主機再回送一個數據段,并帶有確認順序號和確認號。?
TCP滑動窗口?
TCP滑動窗口用來暫存兩臺主機間要傳送的數據,有點類似CACHE。?
每個TCP/IP主機有兩個滑動窗口:一個用于接收數據,另一個用于發送數據。?
6、UDP?
用戶數據報協議UDP提供了無連接的數據報服務。它適用于無須應答并且通常一次只傳送少量數據的應用軟件。?
UDP端口?
端口作為多路復用的消息隊列使用。?
15?NETSTAT?網絡狀態?
53?DOMAIN?域名服務器?
69?TFTP?平凡文件傳送協議?
137?NETBIOS-NS?NETBIOS命令服務?
138?NETBIOS-DGM?NETBIOS數據報服務?
161?SNMP?SNMP網絡監視器?
--------------------------------------------------------------------------------
實現IP路由?
1、IP路由簡介?
路由就是選擇一條數據包傳輸路徑的過程。當TCP/IP主機發送IP數據包時,便出現了路由,且當到達IP路由器還會再次出現。路由器是從一個物理網向另一個物理網發送數據包的裝置,路由器通常被稱為網關。對于發送的主機和路由器而言,必須決定向哪里轉發數據包。在決定路由時,IP層查詢位于內存中的路由表。?
(1)當一個主機試圖與另一個主機通信時,IP首先決定目的主機是一個本地網還是遠程網。?
(2)如果目的主機是遠程網,IP將查詢路由表來為遠程主機或遠程網選擇一個路由。?
(3)若未找到明確的路由,IP用缺省的網關地址將一個數據傳送給另一個路由器。?
(4)在該路由器中,路由表再次為遠程主機或網絡查詢路由,若還未找到路由,該數據包將發送到該路由器的缺省網關地址。?
每發現一條路由,數據包被轉送下一級路由器,稱為一次“跳步”,并最終發送至目的主機。?
若未發現任何一個路由,源主機將收到一個出錯信息。?
--------------------------------------------------------------------------------?
TCP/IP協議介紹?
TCP/IP的通訊協議?
這部分簡要介紹一下TCP/IP的內部結構,為討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因為它可以用在各種各樣的信道和底層協議(例如T1和X.25、以太網以及RS-232串行接口)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User?Datagram?Protocol)協議、ICMP(Internet?Control?Message?Protocol)協議和其他一些協議的協議組。?
TCP/IP整體構架概述?
TCP/IP協議并不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議采用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。這4層分別為:?
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。?
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據并把它傳輸到下一層中,這一層負責傳送數據,并且確定數據已被送達并接收。?
互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。?
網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial?Line等)來傳送數據。?
TCP/IP中的協議?
以下簡單介紹TCP/IP中的協議都具備什么樣的功能,都是如何工作的:?
1.?IP?
網際協議IP是TCP/IP的心臟,也是網絡層中最重要的協議。?
IP層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,并把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因為IP并沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。?
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP?source?routing,可以用來指定一條源地址和目的地址之間的直接路徑。對于一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最后一個系統傳遞過來的,而不是來自于它的真實地點。這個選項是為了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那么,許多依靠IP源地址做確認的服務將產生問題并且會被非法入侵。?
2.?TCP?
如果IP數據包中有已經封好的TCP數據包,那么IP將把它們向‘上’傳送到TCP層。TCP將包排序并進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。?
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最后到接收方。?
面向連接的服務(例如Telnet、FTP、rlogin、X?Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。?
3.UDP?
UDP與TCP位于同一層,但對于數據包的順序錯誤或重發。因此,UDP不被應用于那些使用虛電路的面向連接的服務,UDP主要用于那些面向查詢---應答的服務,例如NFS。相對于FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。?
欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連接(也可以稱為握手)(因為在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨著更大的危險。?
4.ICMP?
ICMP與IP位于同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基于ICMP的服務。?
5.?TCP和UDP的端口結構?
TCP和UDP服務通常有一個客戶/服務器的關系,例如,一個Telnet服務進程開始在系統上處于空閑狀態,等待著連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息并發出響應,客戶程序讀出響應并向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。?
兩個系統間的多重Telnet連接是如何相互確認并協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:?
源IP地址---發送包的IP地址。?
目的IP地址---接收包的IP地址。?
源端口---源系統上的連接的端口。?
目的端口---目的系統上的連接的端口。?
端口是一個軟件結構,被客戶程序或服務進程用來發送和接收信息。一個端口對應一個16比特的數。服務進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣為人知’的,因為在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
轉載于:https://www.cnblogs.com/zqrferrari/archive/2010/07/12/1776036.html
總結
以上是生活随笔為你收集整理的TCP/IP协议基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初试lucene
- 下一篇: 经典SQL短小代码收集汇总