基於Jpcap的TCP/IP數據包分析(一)

基於Jpcap的TCP/IP數據包分析
原做:趙新輝
目 錄
第一章 以太網的結構和TCP/IP
1.1 以太網的結構
1.1.1 基於網絡架構的以太網
1.1.2 以太網的數據交換
1.1.3 以太網幀的結構
1.2 IP數據報的構成
1.2.1 IP地址
1.2.2 路由
1.2.3 IP數據報的構成
1.2.4 其餘報文結構
1.3 TCP/UDP
1.3.1 TCP/UDP的做用
1.3.2 TCP和UDP報文的結構
第二章 Jpcap類庫
2.1 Jpcap的使用
2.1.1 Jpcap的運行環境的安裝
2.1.2 Jpcap的開發環境的安裝
2.2 Jpcap介紹
2.2.1 Packet基類及其子類
2.2.2 Jpcap的主要功能
第三章 數據包監聽程序的設計
3.1 數據包監聽原理
3.2 以太網幀的解析
3.2.1 獲取MAC地址
3.2.2 數據包類型的判斷
3.3 IP數據報的監聽
3.3.1 IP數據報的解析
3.3.2 ARP和ICMP數據報解析
3.4 TCP和UDP監聽
3.4.1 TCP數據報的解析
3.4.2 UDP數據報的解析
第四章 數據包分析
4.1 流量分析
4.1.1 數據包大小的表示
4.1.2 數據包流量觀測
4.2 數據包分類分析
4.2.1 數據包過濾
4.2.2 利用數據包分析解決網絡問題
第五章 數據包發送
5.1 構造發送IP數據包
5.1.1 IP數據包構造與發送
5.1.2 發送結果分析
5.2 構造發送TCP數據包
5.2.1 TCP數據包構造與發送
5.2.2 發送結果分析
第一章 太網的結構和TCP/IP
1.1 以太網的結構
以太網是當今現有局域網採用的最通用的通訊協議標準.該標準定義了在局域網(LAN)中採用的電纜類型和信號處理方法.以太網在互聯設備之間以10~100Mbps的速率傳送信息包,雙絞線電纜10 Base T以太網因爲其低成本,高可靠性以及10Mbps的速率而成爲應用最爲普遍的以太網技術.許多製造商提供的產品都能採用通用的軟件協議進行通訊,開放性最好.以太網,屬網絡低層協議,一般在OSI(open system interconnect reference model)模型的物理層和數據鏈路層操做.它是總線型協議中最多見的,數據速率爲10Mbps(兆比特/秒)的同軸電纜系統.
1.1.1 基於網絡架構的以太網
在計算機網絡構成中,通常都實行使用協議進行層與層之間得通訊.一般的OSI中,把協議等級分爲七層.第一層是物理層,處理關於硬件上的網絡協議.第七層爲應用層,處理關於應用程序的協議.第二層到第六層按照其間的順序被依次設置.

名 稱
規 定 的 內 容
高層
第七層
應用層
關於郵件,新聞等應用程序的協議
第六層
表示層
數據語法協議
第五層
會話層
基於網絡的管理對話協議
低層
第四層
傳輸層
補充第三層的功能,可靠地在兩臺計算機間傳輸數據
第三層
網絡層
從網絡上多臺計算機中選擇做爲通信對象地計算機
第二層
數據鏈路層
在兩臺計算機上進行一對一數據通訊
第一層
物理層
電氣信號,鏈接器規格等關於硬件地協議
OSI參考模型
以太網是20世紀70年代,施樂(Xerox)公司地Palo Alto研究所設計的,其後在80年代由施樂,英特爾,DEC(後被康柏收購)三家公司總結了面向局域網(LAN)的協議集合.而以太網的規格是由美國電氣和電子工程師協會(Institute of Electrical and Electronics Engineers)中專門討論規格的802委員會,從1980年開始標準化討論的.並把IEEE802.3做爲標準規格,其後ISO(International Standard Organization)把它做爲ISO802.3標準.
舊的以太網設備是用同軸電纜做爲傳送媒體的.使用同軸電纜的以太網,設備之間的鏈接不須要網絡集線器,但必須在同軸電纜上講設備鏈接起來,是同軸電纜成爲多臺設備間共享信號的總線(bus),這種網絡鏈接形式被稱爲總線型.如今,廣爲使用的傳送媒體爲雙絞線.一般使用的是被稱爲第五類的雙絞線,擁有100Mbit/s的通訊速度.在用雙絞線鏈接時要使用被稱爲網絡集線器的設備.它是爲實現多臺計算機的鏈接,把多根雙絞線相互鏈接起來的設備.在使用網絡集線器的網絡重,計算機以網絡集線器爲中心呈放射狀鏈接,這樣的網絡被稱爲星型網絡.
因爲以太網中集線器的轉發功能,也就使得進行數據包監聽能夠在局域網內進行.本文中的數據包監聽程序都是在局域網內進行的.固然,數據包監聽也能夠在網關等數據包的進出口進行.
1.1.2 以太網的數據交換
在以太網中,數據是以被稱爲幀的數據結構體爲單位進行交換的.一般在計算機網絡上交換的數據結構體的單位是數據包,而在以太網中把使用的數據包稱爲幀.數據包包含着發送給對方所必需信息的報頭部分和記錄着傳送給接收端信息內容的報文部分組成的.報頭包含接收端的地址,發送端的地址,數據錯誤檢查和改正所必需的錯誤檢驗和修正碼.數據包被傳送到網絡上,經過網絡中繼裝置傳送到接收端.
幀是被稱爲帶碰撞檢測的載波偵聽多址訪問(CSMA/CD: Carrier Sense Multiple Access with Collision Detection)發送的.在CSMA/CD技術中,若是網絡上沒有數據,則任什麼時候候均可以將數據傳送出去.所以,傳送數據的網絡設備,首先要確認網絡上是否有數據在傳送.若是沒有數據則能夠將數據發送到網絡上.若是網絡被使用,那就要等到網絡空閒後發送.上面的工做至關於CSMA/CD的CSMA部分.在這種方法中,同時發送數據的網絡設備會同時認爲網絡是空閒的,這樣就會產生髮送衝突.所以,在CSMA/CD技術中會常常一邊檢測數據衝突,一邊發送數據.若是檢測出衝突,爲強調衝突的發生,要等待發送出32位數據所必需的時間以後,在等待一個隨機決定的時間,然後從新發送.這樣同時開始發送的兩臺網絡設備中,隨機數小的網絡設備先進行發送,隨機數大的網絡設備要等到網絡空閒下來才能發送.這種等到時間被稱爲補償時間.
網絡擁擠和屢次反覆發生衝突,就可能形成數據沒法發送.所以,爲有效利用網絡資源,在網絡空閒和擁擠時,對等待的最大值進行調整.空閒時即衝突次數少的狀況下,把等待時間的最大值縮小;擁擠和衝突頻繁發生時,把等待時間的最大值擴大.等待時間的最大值能夠用下面的公式表示:
T=Ts×2k
式中Ts爲發送512位數據所必需的時間(被稱爲Slot時間),k爲衝突次數和數字10中最小的數字.
這樣,在CSMA/CD技術中,網絡空間的狀況下,任什麼時候候均可以將數據發送出去,萬一發生衝突形成發送失敗時,能夠從新發送幀.因此CSMA/CD在網絡比較空閒的狀況下是一種高效的通訊協議.
可是在網絡擁擠的狀況下剛好相反.CSMA/CD發生衝突時,在等待和再次發送等方面花費過多的時間,會形成網絡反覆發送無用的數據,網絡設備和傳送線路等網絡資源被白白佔用,結果致使通訊效率下降.
在衝突頻繁發生的以太網上,CSMA/CD的通訊效率很是低,由於沒法預測何時會發生衝突,所以不能保證對方在必定的限制時間內能接收到數據.這樣,在進行聲音和圖像等對時間依賴性很強的多媒體數據的實時通訊的狀況下,存在着致命缺陷.因此採用CSMA/CD的以太網不能進行面向多媒體數據的通訊.
幀在網絡上傳輸,由網卡接收.通常而言,網卡有幾種接收數據幀的狀態,如unicast,broadcast,multicast,promiscuous等,unicast是指網卡在工做時接收目的地址是本機硬件地址的數據幀.Broadcast是指接收全部類型爲廣播報文的數據幀.Multicast是指接收特定的組播報文.Promiscuous則是一般說的混雜模式,是指對報文中的目的硬件地址不加任何檢查,所有接收的工做模式.
當局域網內的主機都經過HUB等方式鏈接時,通常都稱爲共享式的鏈接,這種共享式的鏈接有一個很明顯的特色:就是HUB會將接收到的全部數據向HUB上的每一個端口轉發,也就是說當主機根據mac地址進行數據包發送時,儘管發送端主機告知了目標主機的地址,但這並不意味着在一個網絡內的其餘主機聽不到發送端和接收端之間的通信,只是在正常情況下其餘主機會忽略這些通信報文而已!若是這些主機不肯意忽略這些報文,網卡被設置爲promiscuous狀態的話,那麼,對於這臺主機的網絡接口而言,任何在這個局域網內傳輸的信息都是能夠被偵聽到的.
1.1.3 以太網幀的結構
以太網幀的結構是這樣.開始的64位是前同步碼(preamble)和幀首定界符(start frame delimiter).前同步碼是使發送端和接收端在數據的交接上步調一致的信號.發送端以56位(10101010…10)反覆發送1和0信號.接收端接收到這種信號後,準備讀取發送來的信號.
前同步碼結束後使表示幀的真正開始的8位(10101011)位列.幀首定界符以後是地址等報頭信息.幀首定界符後面是接收端及及發送端的MAC地址.只有在接收端的MAC地址是本身的MAC地址的狀況下,才能進行幀的接收;MAC地址爲其餘機器的狀況下,將不接收改幀.但當接收端地址所有都爲1時,在同一以太網內鏈接的全部設備,都要接收該幀.地址所有爲1的MAC地址稱爲廣播地址.
接收端和發送端的MAC地址後面是16位的類型字段(type field).類型字段中存放的是以太網幀中傳送數據的上層協議的種類代碼.以太網幀的報文部最大能存放12000位,即1500字節.以太網是物理層及數據鏈路層的協議.以太網幀所傳送的數據是網絡層規定的數據包.若是要使用IP網絡協議,則IP數據包就將存儲在以太網幀的報文處.
幀的尾部是檢查數據錯誤的錯誤校驗及修正碼.通常錯誤的檢驗方法有奇偶校驗等方法,但以太網中常使用循環冗餘校驗(CRC: Cyclic Redundancy Check)檢查錯誤.CRC中,將表示幀的位列做爲多項式.把多項式與準備好的特定多項式相除,得出的結果與數據一同發送.在接收端從新進行一次除法運算,用其結果確認傳送來的數據正確與否.使用CRC不但能檢查出是否有錯誤,並且還能在接收端修正錯誤.可是,以太網在檢查出錯誤時,該幀將被刪除從新發送.
轉發網絡集線器是不能識別MAC地址的,它將以太網幀向所有端口中繼.開關網絡集線器也被稱爲二層開關.這是由於開關網絡集線器是按照數據鏈路層協議即第二層協議來解釋以太網幀的.使用開關網絡集線器與計算機一對一鏈接起來後,通訊線路也徹底變成一對一.即發生不了CSMA/CD所預想的衝突.這時接收和發送是並行的,這樣的通訊稱爲全雙工通訊.而普通的以太網通訊線路稱爲半雙工通訊.由於在全雙工通訊中,接收和發送能並列進行,因此通訊速度是半雙工的2倍.
1.2 IP數據報的構成
以太網幀中的數據段一般IP數據報或與IP有關的其餘協議,包括ARP(Address Resolution Protocol),ICMP(Internet Control Message Protocol)等.
1.2.1 IP地址
一般所說IP地址是指如今所使用的第四版本的Ipv4地址協議.其中的IP是以32位的二進制數來表示的.一般按8位分紅4段,用十進制的數值表示,中間用點號分開.所以IP地址的數值能夠從0.0.0.0到255.255.255.255.
計算機地址除了0和所有爲1得數值外均可以使用.計算機地址爲0時,在網路地址中指定爲指向網絡自己.計算機地址所有爲1時,網絡地址指定爲向全體網絡進行通訊廣播.網絡地址使用多少位取決於一個局域網能容納的計算機臺數.所以,網絡地址的位數決定了IP地址的分類.
A類地址中網絡地址有7位,計算機地址被分配爲24位.即具備A類地址的網絡在全世界只有100個左右,是可以容納1600萬臺計算機的網絡.B類地址使用方便,網絡數量和可容納的主機數都比較合適,形成如今B類地址資源不足,申請分配十分困難.C類地址目前還有大量剩餘,可是因爲一個單位中使用一個C類地址,經常不能容納本身網絡上全部的計算機,所以必須分配給相應的多個C類地址.這種狀況下,須要使用把這些計算機做爲一個網絡的無類別域際路由選擇(CIDR: Classless Inter-Domain Routing)技術,使用不受原本類別制約的地址.進行地址空間的再分配會擴大網絡地址的使用,在此種狀況下分配的網絡稱爲子網.使用子網時不能從IP地址的類別上區分IP地址中哪部分是網絡地址.D類地址是多點傳送地址,向多方傳送IP數據報.廣播會向全部的網絡設備傳送IP數據報,可是在多點傳送中但願接收數據的多臺計算機能夠接受到IP數據報.這種多點傳送能夠將聲音,圖像等向多臺網絡設備同時傳送,所以常被使用在利用網絡進行廣播的應用程序上.
在因特網中使用的IP地址,在世界範圍內是不重複的.可是對於因特網沒有對外公開的IP地址和其餘網絡中發生重複是沒有關係的.所以,做爲沒有公開的內部私有地址,要規定其使用範圍.RFC1918中對私有地址的規定是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
所以在內部私有網中的IP經常會是在以上範圍內.
下一代的IP地址爲Ipv6,IP地址的位數達到128位,IP地址的個數能夠達到如今的296倍.這樣Ipv4地址資源不足的問題將獲得解決,而IP地址將域網絡結構相對應,更加提升路由的效率.
1.2.2 路由
路由器是工做在OSI參考模型第三層——網絡層的數據包轉發設備.路由器經過轉發數據包來實現網絡互連.雖然路由器能夠支持多種協議(如TCP/IP,IPX/SPX,AppleTalk等協議),可是在我國絕大多數路由器運行TCP/IP協議.路由器一般鏈接兩個或多個由IP子網或點到點協議標識的邏輯端口,至少擁有1個物理端口.路由器根據收到數據包中的網絡層地址以及路由器內部維護的路由表決定輸出端口以及下一跳地址,而且重寫鏈路層數據包頭實現轉發數據包.路由器經過動態維護路由表來反映當前的網絡拓撲,並經過與網絡上其餘路由器交換路由和鏈路信息來維護路由表.
在IP中,兩個以上的網絡間進行通信時要使用路由器.路由器具備鏈接兩個或兩個以上網絡接口.路由器能將因特網上的IP數據報進行接力傳遞.路由器從直接鏈接在其上的網絡設備中獲得的IP數據報,適當調整IP數據報的傳送方向後送出.由於IP數據報自己不含有在因特網上經過怎樣的傳送的路徑到達目的計算機的信息,因此IP數據報只依靠接收端的IP地址信息,經過多個路由器進行IP數據報的接力傳遞.
路由器具備兩大功能.數據通路功能:對於每一個到達路由器的數據包,在不丟失的狀況下,負責尋路.此功能主要包括:轉發決定,經由背板輸出鏈路隊列調度.轉發功能是經過專門硬件來實現的,每個經過路由器的分組包都要執行這個操做.數據通路功能對改進路由器的性能是很重要的.控制功能:主要包括路由表的管理和系統的配置與管理,以及與相鄰路由器交換路由表信息,經過軟件實現等.這些功能不是針對每一個數據包的,所以使用頻度相對低一些.
路由器要對到達的分組包進行識別,分類以決定其所應接受的服務類型.最初所考慮的方案是在網絡的核心,根據IP報頭的TOS(Type of Service)域來識別分組,可是在互聯網的發展過程當中,因爲一直採用"盡力"傳輸,同時因爲終端在發送IP包時不考慮TOS,所以,TOS一直沒有發揮做用.目前在邊緣設備,根據IP分組的源IP地址,目的IP地址,源端口號,目的端口號,傳輸層協議類型來對分組進行識別.此外,爲了實現防火牆的功能也須要對IP分組進行識別.
在識別時,每條識別規則採用的是源IP地址,目的IP地址,源端口號,目的端口號,傳輸層協議類型.在上述識別規則中,每一個域均可能是一個區間.例若有這樣一條識別規則"202.66.83.X,202.66.72.X,X,23,TCP"(X表示任意),這條規則識別從網絡202.66.83.X到網絡202.66.72.X的telnet數據.從幾何的角度來看,假如判別時利用了IP報頭的K個域,這個問題其實是在一個K維空間中有許多互相交疊的實體(每條判別規則對應於一個實體),每當有一個分組到達時,該分組至關於K維空間上的一個點,進行判別其實是要找出包含該點的優先級最高的實體.
IP數據報的路由是按照路由表安排的.路由表即記錄着某臺網絡設備把IP數據報傳送到其餘網絡設備的數據結構.不僅是路由器具備路由表,全部使用網絡層協議的網絡設備都具備路由表.包括計算機,路由器和L3交換器(路由器組)等.
在路由表中,以組的形式記錄着IP數據報要傳送到目的計算機的IP地址和爲達到最終目的地必須通過的路由器IP地址.例如在此網絡中的計算機下面這張路由表
接收端
接下來發送地址
192.168.1.0
直接發送到接收端計算機
Default(缺省)
192.168.1.254
路由表
這表示若是接收端的IP地址屬於本身的局域網,那就使用數據鏈路層協議的功能將IP數據報直接發給對方,若是是其它則向局域網中存在的路由器發送IP數據報.路由器具備的路由表是很複雜的.在上面的例子中,路由器兩側鏈接的計算機可使用各自具備的數據鏈路層協議進行直接通訊.除此之外在進行計算機通訊時,還必須向鄰近的路由器發送IP數據報,並進行IP數據報的接力傳遞.
路由器收到數據包之後,會根據數據包中目的地址到路由表中查找相應的路由條目,若是找到相匹配的路由就會按照該路由處理數據包,不然在缺省狀況下會扔棄數據包
.路由表的造成有靜態路由和動態路由兩種.靜態路由時手動記錄路由表,適用於小局域網,一點網絡的規模稍微增大則會變得很是麻煩,當網絡變動時也須要手動修改.動態路由就是自動交換路由信息,生成路由表.動態路由的協議中有網絡內部使用的內部網關協議(IGP)和網絡間使用的外部網關協議(EGP).
過去,路由器被看做是最佳轉發數據包的硬件設備,軟件僅提供監視器的功能.但隨着路由器的發展,軟件在路由器中起的做用愈來愈大.實際上,實時操做系統(如,通訊領域經常使用PSOS和VxWorks)的選擇對一個通訊產品來講是相當重要的.若是要開發效率很高的軟件,須要操做系統廠商的支持.像Cisco公司,就是本身開發專用的路由器操做系統以及應用軟件.若是這種趨勢繼續發展,終端用戶未來能夠很方便地在路由器上裝載各類應用軟件模塊,使路由器可以提供防火牆,流量管理策略,特殊應用信令,路由策略等功能.
路由器的數據報處理能力對網絡的處理能力影響十分大,因此開發了使用硬件進行高速路由的設備.這樣的路由器是在開關網絡集線器中附加路由功能,被稱爲L3交換機.
1.2.3 IP數據報的構成
IP數據報的最開始存放着IP的版本(version).Ipv4版本存放爲4.
接下來IHL是一個字符,即以32位爲一個單位,存放着從版本開始到填充結束的報頭的長度.最短的狀況沒有選項,這是IHL的值爲5.
服務類型字段(type of service)表示IP數據報在傳遞時發送端要求的品質.第七位是爲未來預留的擴展位.
數據報長度字段(total length)以8位爲一個單位,即字節表示IP數據報的長度.接下來的標識字段(identification),從TCP等上層協議調用時IP數據報的標識號.
標誌字段(flags)和數據塊偏移(fragment offset)用於對數據塊偏移的處理.IP數據報要在數據鏈路層的協議規定下裝入幀的報文中傳送,因爲IP數據報中,報文部分最大就有65535爲,數據鏈路層的幀是不能所有容納的,因此採用叫作分塊的方法.分割的數據稱爲碎塊.IP數據報的標誌表示有無碎塊,數據塊偏移用於保證數據塊偏移按照正確的順序處理.
TTL字段是爲了防止錯誤的IP數據報在網絡上循環,賦予IP數據報必定的壽命.IP數據報在發送時就在TTL字段中設置其壽命.TTL字段的值在IP數據報每經過一次路由器時,進行一次衰減.當爲0時,IP數據報就被刪除.一般設爲最大值255.
協議字段(protocol)中存放着表示TCP等IP的上層協議的值.包括ICMP,TCP,EGP,IGP,UDP等.
在檢查錯誤的報頭校驗碼(header checksum)的後面是發送端地址和目的地址,他們在Ipv4中都爲32位.最後存放的是選項和把報頭進行32位整數化後餘下的位.
version
IHL
type of service
Total length
Identification
flags
fragment offset
TTL
protocol
Header checksum
96位
IP數據報頭的結構
1.2.4 其它報文結構
比較重要的有地址解析協議和Internet控制信息協議.地址解析協議(ARP:Address Resolution Protocol)是鏈接網絡層和數據鏈路層的,於IP沒有直接的聯繫,它是採用以太網的IP網絡中必需的協議.
在ARP中進行的處理是對應於以太網的物理地址(MAC地址)和IP地址.把IP數據報傳送到其餘計算機時,要從對方的IP地址中查詢對方的物理地址,使用對方的物理地址創建新的以太網幀.在使用IP進行通訊時,就必須知道IP地址和對應的MAC地址.先進行以太網的廣播功能,將要查詢的MAC地址的網絡設備的IP地址通知給其餘網絡設備.獲得消息的網絡設備進行匹配,符合則將本身的MAC地址返回過去.從ARP中取得的IP地址和MAC地址的對應關係,保持一段時間用於通訊,一段時間後就被刪除.把ARP反過來考慮從MAC地址查詢IP地址的狀況用RARP(Reverse ARP),RARP包和ARP包具備相同的結構,只是ARP包的操做號之後的內容不同.ARP的操做號爲1(請求)和2(響應),請求查詢時對象的MAC地址爲空,RARP操做號爲3(請求)和4(響應),請求時的IP地址爲空.
在網上通訊,可能發生各類狀況致使數據包被破壞,形成數據包在網絡上循環,這時路由器等網絡設備將刪除數據包,而後向發送端請求從新發送數據包.這種通訊方式就是由ICMP決定的.ICMP是把消息裝入到IP數據報的報文部傳送的.從這種意義上來講,ICMP與TCP,UDP相同,都屬於傳輸層的協議.但從功能上ICMP具備補充IP的功能.
ICMP是"Internet Control Message Protocol"(Internet控制消息協議)的縮寫.它是TCP/IP協議族的一個子協議,用於在IP主機,路由器之間傳遞控制消息.控制消息是指網絡通不通,主機是否可達,路由是否可用等網絡自己的消息.這些控制消息雖然並不傳輸用戶數據,可是對於用戶數據的傳遞起着重要的做用.
1.3 TCP/UDP
1.3.1 TCP/UDP的做用
傳輸控制協議(TCP)和用戶數據報協議(UDP)是在因特網上傳輸層使用的協議.使用網絡層的IP協議,能夠從世界上任何一臺計算機中找到特定的通訊對象,並向其發送數據.傳輸層的協議提供的是鏈接指定在對方計算機上運行的特定應用程序和但願獲得的網絡服務.
TCP及UDP中使用的是端口的概念,以區別計算機上的程序.端口是應用程序在網絡通訊上使用的數據輸入輸出口.當某一網絡客戶端利用其餘計算機上的服務程序時,在根據IP地址指定服務計算機的同時,也指定了被分配的服務程序的公認端口號.由此,能夠利用與端口號對應的特定的網絡服務.
TCP/UDP數據報
IP數據報
一般的過程以下:客戶端程序從用戶處獲得運行服務器程序的計算機DNS名和服務器程序的應用程序名.客戶端程序利用從用戶處獲得的DNS名檢索DNS服務器,獲得鏈接對象的計算機的IP地址.而且從應用程序名中檢索到服務器程序的公認端口號.再從應用程序名中決定做爲傳輸層協議是使用TCP仍是UDP.而後從對方的IP地址,本身的IP地址,對方的端口號及指定TCP或UDP中,創建將TCP或者UDP存放到報文的IP數據報.運行系統再把通訊上的合適端口分配給客戶端程序.這樣就肯定了由IP地址,端口號及TCP或UDP組成的世界上不重複的數據組合.客戶端程序把含有TCP/UDP數據包的IP數據報發送出去,服務程序將響應一樣發給客戶端程序.
TCP協議是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接.一個TCP鏈接必需要通過三次"對話"才能創建起來,其中的過程很是複雜,咱們這裏只作簡單,形象的介紹,你只要作到可以理解這個過程便可.咱們來看看這三次對話的簡單過程:主機A向主機B發出鏈接請求數據包:"我想給你發數據,能夠嗎 ",這是第一次對話;主機B向主機A發送贊成鏈接和要求同步(同步就是兩臺主機一個在發送,一個在接收,協調工做)的數據包:"能夠,你何時發 ",這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:"我如今就發,你接着吧!",這是第三次對話.三次"對話"的目的是使數據包的發送和接收同步,通過三次"對話"以後,主機A才向主機B正式發送數據.
TCP和UDP把端口通訊功能提供給應用程序.可是TCP和UDP 在性質上由差異.TCP中補充了IP沒有提供的網絡功能,在兩個程序之間提供一條沒有錯誤的全雙工通訊線路.全部使用TCP爲傳輸層協議的應用程序要利用網絡是十分方便的.數據的再次發送,錯誤處理和數據包到達順序的控制等處理在TCP的處理部分進行,在應用程序上不須要進行相關的處理.可是,爲了提供面向鏈接這種高級功能,TCP對計算機系統來講負載很大,速度較慢.
它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去.UDP只是在IP的功能中追加了端口功能的簡單結構.所以,對要求處理速度的應用程序提供了傳輸層功能.UDP中鏈接和數據的順序控制等功能由應用程序來完成.這種性質被稱爲無鏈接.因此在錯誤少的局部環境下並要求快速的應用程序中,經常使用UDP來實現.UDP適用於一次只傳送少許數據,對可靠性要求不高的應用環境.好比,咱們常用"ping"命令來測試兩臺主機之間TCP/IP通訊是否正常,其實"ping"命令的原理就是向對方主機發送UDP數據包,而後對方主機確認收到數據包,若是數據包是否到達的消息及時反饋回來,那麼網絡就是通的.例如,在默認狀態下,一次"ping"操做發送4個數據包.發送的數據包數量是4包,收到的也是4包(由於對方主機收到後會發回一個確認收到的數據包).這充分說明了UDP協議是面向非鏈接的協議,沒有創建鏈接的過程.正由於UDP協議沒有鏈接的過程,因此它的通訊效果高;但也正由於如此,它的可靠性不如TCP協議高.QQ就使用UDP發消息,所以有時會出現收不到消息的狀況.
1.3.2 TCP/UDP報文結構
TCP報文頭開始部分存放的是發送端端口號(source port)和接收端的端口號(destination port),順序號(sequence)中存放的是按照發送順序處理的相關數值.用來表示將某消息段中的數據位全體數據塊的字節數與進行通訊時某一個規定的偏移量相加後的數值.
確認號(acknowledgment number)是接收端對於發送端接收到的數據塊狀態的順序號.具備4位的數據偏移字段(data offset)是以32位爲一個單位存放報頭長度的數值.從TCP
Source port
destination port
Sequence
acknowledgment number
1
2
3
window
checksum
urgent pointer
options, padding
96位
1:data offset 2:reserved 3:control bits
TCP數據報頭的結構
消息段開始的部分到數據偏移×4字節後存放的就是TCP的報文部分.
用於擴展的6位字段後面是控制位(control bits).控制位是6位標誌的集合,表示TCP以怎樣的狀態進行通訊.控制位的位置在1爲URG,表示緊急數據指針有效;控制位在2爲ACK,表示確認號有效;控制位在3爲PSH,表示傳送強制功能;控制位在4爲RTS,表示請求鏈接從新設置;控制位在5爲SYN,表示請求順序號同步處理;控制位在6爲FIN,表示發送結束.
Window表示接收端緩存的數值.接下來檢查錯誤用的校驗碼(checksum)和爲處理緊急數據而配置的緊急數據指針(urgent pointer),最後放的是選擇和填充(options, padding)
UDP數據報構造相對比較簡單.UDP數據報中含有做爲傳輸層協議實現接收所必需的端口號字段,數據報長度及錯誤檢查用校驗碼.UDP能進行高速的信息傳遞,但數據報順序控制的工做要由應用程序來完成.UDP這種協議只是在IP提供的功能中加上了端口的概念,是簡單的傳輸層協議.
source port
destination port
length
checksum
data
UDP數據報的結構緩存

相關文章
相關標籤/搜索