1樓:愛吃的小鬍子
一、mac幀頭定義
/*資料幀定義,頭14個位元組,尾4個位元組*/
typedef struct _mac_frame_header
__attribute__((packed))mac_frame_header,*pmac_frame_header;
typedef struct _mac_frame_tail
__attribute__((packed))mac_frame_tail, *pmac_frame_tail;
二、ip頭結構的定義
/*ip頭定義,共20個位元組*/
typedef struct _ip_header
__attribute__((packed))ip_header, *pip_header ;
三、tcp頭結構定義
/*tcp頭定義,共20個位元組*/
typedef struct _tcp_header
__attribute__((packed))tcp_header, *ptcp_header;
/*tcp頭中的選項定義
kind(8bit)+length(8bit,整個選項的長度,包含前兩部分)+內容(如果有的話)
kind = 1表示 無操作nop,無後面的部分
2表示 maximum segment 後面的length就是maximum segment選項的長度(以byte為單位,1+1+內容部分長度)
3表示 windows scale 後面的length就是 windows scale選項的長度(以byte為單位,1+1+內容部分長度)
4表示 sack permitted length為2,沒有內容部分
5表示這是一個sack包 length為2,沒有內容部分
8表示時間戳,length為10,含8個位元組的時間戳
*/typedef struct _tcp_options
__attribute__((packed))tcp_options, *ptcp_options;
四、udp頭結構的定義
/*udp頭定義,共8個位元組*/
tcp、ip、udp頭部格式
2.2 tcp/ip報文格式
1、ip報文格式
ip協議是tcp/ip協議族中最為核心的協議。它提供不可靠、無連線的服務,也即依賴其他層的協議進行差錯控制。在區域網環境,ip協議往往被封裝在乙太網幀(見本章1.
3節)中傳送。而所有的tcp、udp、icmp、igmp資料都被封裝在ip資料包中傳送。如圖2-3所示:
圖2-3 tcp/ip報文封裝
圖2-4是ip頭部(報頭)格式:(rfc 791)。
圖2-4 ip頭部格式
其中:●版本(version)欄位:佔4位元。用來表明ip協議實現的版本號,當前一般為ipv4,即0100。
●報頭長度(internet header length,ihl)欄位:佔4位元。是頭部佔32位元的數字,包括可選項。
普通ip資料包(沒有任何選項),該欄位的值是5,即160位元=20位元組。此欄位最大值為60位元組。
●服務型別(type of service ,tos)欄位:佔8位元。其中前3位元為優先權子欄位(precedence,現已被忽略)。
第8位元保留未用。第4至第7位元分別代表延遲、吞吐量、可靠性和花費。當它們取值為1時分別代表要求最小時延、最大吞吐量、最高可靠性和最小費用。
這4位元的服務型別中只能置其中1位元為1。可以全為0,若全為0則表示一般服務。服務型別欄位宣告瞭資料包被網路系統傳輸時可以被怎樣處理。
例如:telnet協議可能要求有最小的延遲,ftp協議(資料)可能要求有最大吞吐量,snmp協議可能要求有最高可靠性,nntp(network news transfer protocol,網路新聞傳輸協議)可能要求最小費用,而icmp協議可能無特殊要求(4位元全為0)。實際上,大部分主機會忽略這個欄位,但一些動態路由協議如
//www.xiupin365.net/sitemap.
html?protocol)、is-is(intermediate system to intermediate system protocol)可以根據這些欄位的值進行路由決策。
●總長度欄位:佔16位元。指明整個資料包的長度(以位元組為單位)。最大長度為65535位元組。
●標誌欄位:佔16位元。用來唯一地標識主機傳送的每一份資料包。通常每發一份報文,它的值會加1。
●標誌位欄位:佔3位元。標誌一份資料包是否要求分段。
●段偏移欄位:佔13位元。如果一份資料包要求分段的話,此欄位指明該段偏移距原始資料包開始的位置。
●生存期(ttl:time to live)欄位:佔8位元。
用來設定資料包最多可以經過的路由器數。由傳送資料的源主機設定,通常為32、64、128等。每經過一個路由器,其值減1,直到0時該資料包被丟棄。
●協議欄位:佔8位元。指明ip層所封裝的上層協議型別,如icmp(1)、igmp(2) 、tcp(6)、udp(17)等。
●頭部校驗和欄位:佔16位元。內容是根據ip頭部計算得到的校驗和碼。
計算方法是:對頭部中每個16位元進行二進位制反碼求和。(和icmp、igmp、tcp、udp不同,ip不對頭部後的資料進行校驗)。
●源ip地址、目標ip地址欄位:各佔32位元。用來標明傳送ip資料包文的源主機地址和接收ip報文的目標主機地址。
可選項欄位:佔32位元。用來定義一些任選項:
如記錄路徑、時間戳等。這些選項很少被使用,同時並不是所有主機和路由器都支援這些選項。可選項欄位的長度必須是32位元的整數倍,如果不足,必須填充0以達到此長度要求。
2、tcp資料段格式
tcp是一種可靠的、面向連線的位元組流服務。源主機在傳送資料前需要先和目標主機建立連線。然後,在此連線上,被編號的資料段按序收發。
同時,要求對每個資料段進行確認,保證了可靠性。如果在指定的時間內沒有收到目標主機對所發資料段的確認,源主機將再次傳送該資料段。
如圖2-5所示,是tcp頭部結構(rfc 793、1323)。
圖2-5 tcp頭部結構
●源、目標埠號欄位:佔16位元。tcp協議通過使用"埠"來標識源端和目標端的應用程序。
埠號可以使用0到65535之間的任何數字。在收到服務請求時,作業系統動態地為客戶端的應用程式分配埠號。在伺服器端,每種服務在"眾所周知的埠"(well-know port)為使用者提供服務。
●順序號欄位:佔32位元。用來標識從tcp源端向tcp目標端傳送的資料位元組流,它表示在這個報文段中的第一個資料位元組。
●確認號欄位:佔32位元。只有ack標誌為1時,確認號欄位才有效。它包含目標端所期望收到源端的下一個資料位元組。
●頭部長度欄位:佔4位元。給出頭部佔32位元的數目。沒有任何選項欄位的tcp頭部長度為20位元組;最多可以有60位元組的tcp頭部。
●標誌位欄位(u、a、p、r、s、f):佔6位元。各位元的含義如下:
◆urg:緊急指標(urgent pointer)有效。
◆ack:確認序號有效。
◆psh:接收方應該儘快將這個報文段交給應用層。
◆rst:重建連線。
◆syn:發起一個連線。
◆fin:釋放一個連線。
●視窗大小欄位:佔16位元。此欄位用來進行流量控制。單位為位元組數,這個值是本機期望一次接收的位元組數。
●tcp校驗和欄位:佔16位元。對整個tcp報文段,即tcp頭部和tcp資料進行校驗和計算,並由目標端進行驗證。
●緊急指標欄位:佔16位元。它是一個偏移量,和序號欄位中的值相加表示緊急資料最後一個位元組的序號。
●選項欄位:佔32位元。可能包括"視窗擴大因子"、"時間戳"等選項。
3、udp資料段格式
udp是一種不可靠的、無連線的資料包服務。源主機在傳送資料前不需要和目標主機建立連線。資料被冠以源、目標埠號等udp報頭欄位後直接發往目的主機。
這時,每個資料段的可靠性依靠上層協議來保證。在傳送資料較少、較小的情況下,udp比tcp更加高效。
如圖2-6所示,是udp頭部結構(rfc 793、1323):
圖2-6 udp資料段格式
●源、目標埠號欄位:佔16位元。作用與tcp資料段中的埠號欄位相同,用來標識源端和目標端的應用程序。
●長度欄位:佔16位元。標明udp頭部和udp資料的總長度位元組。
●校驗和欄位:佔16位元。用來對udp頭部和udp資料進行校驗。和tcp不同的是,對udp來說,此欄位是可選項,而tcp資料段中的校驗和欄位是必須有的。
2.3 套接字
在每個tcp、udp資料段中都包含源埠和目標埠欄位。有時,我們把一個ip地址和一個埠號合稱為一個套接字(socket),而一個套接字對(socket pair)可以唯一地確定互連網路中每個tcp連線的雙方(客戶ip地址、客戶埠號、伺服器ip地址、伺服器埠號)。
如圖2-7所示,是常見的一些協議和它們對應的服務埠號。
圖2-7 常見協議和對應的埠號
需要注意的是,不同的應用層協議可能基於不同的傳輸層協議,如ftp、telnet、smtp協議基於可靠的tcp協議。tftp、snmp、rip基於不可靠的udp協議。
同時,有些應用層協議佔用了兩個不同的埠號,如ftp的20、21埠,snmp的161、162埠。這些應用層協議在不同的埠提供不同的功能。如ftp的21埠用來偵聽使用者的連線請求,而20埠用來傳送使用者的檔案資料。
再如,snmp的161埠用於snmp管理程序獲取snmp**的資料,而162埠用於snmp**主動向snmp管理程序傳送資料。
還有一些協議使用了傳輸層的不同協議提供的服務。如dns協議同時使用了tcp 53埠和udp 53埠。dns協議在udp的53埠提供域名解析服務,在tcp的53埠提供dns區域檔案傳輸服務。
2.4 tcp連線建立、釋放時的握手過程
1、tcp建立連線的三次握手過程
tcp會話通過三次握手來初始化。三次握手的目標是使資料段的傳送和接收同步。同時也向其他主機表明其一次可接收的資料量(視窗大小),並建立邏輯連線。這三次握手的過程可以簡述如下:
●源主機傳送一個同步標誌位(syn)置1的tcp資料段。此段中同時標明初始序號(initial sequence number,isn)。isn是一個隨時間變化的隨機值。
●目標主機發回確認資料段,此段中的同步標誌位(syn)同樣被置1,且確認標誌位(ack)也置1,同時在確認序號欄位表明目標主機期待收到源主機下一個資料段的序號(即表明前一個資料段已收到並且沒有錯誤)。此外,此段中還包含目標主機的段初始序號。
●源主機再回送一個資料段,同樣帶有遞增的傳送序號和確認序號。
至此為止,tcp會話的三次握手完成。接下來,源主機和目標主機可以互相收發資料。整個過程可用圖2-8表示。
圖2-8 tcp建立連線的三次握手過程
2、tcp釋放連線的四次握手過程
IP模型的傳輸層有兩個協議,協議TCP是一種可靠的面向連線的協議,協議UDP是
udp是無連線的面向資料包的網路協議,不提供可靠性。記得采納啊 對比著來看嘛。udp是不可靠的 面向事務的協議。1 tcp面向連線 bai 如打 要先撥 du號建立連線 udp是無連zhi接的dao,即傳送資料版之前不需要建立連線權 2 tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差...
http用的是tcp還是udp,http協議是基於tcp還是udp
預設情況下http使用tcp,但是也可以基於以後存在的其他可靠傳輸協議。由於udp無法提供可靠傳輸,所以不會使用udp。http用的是tcp還是udp http協議是建立在請求 響應模型上的。首先由客戶建立一條與伺服器的tcp連結,並回傳送一個請求到伺服器,請求中答包含請求方法 uri 協議版本以及...
TCP是怎樣限制人們上網自由的,在不同國家是怎樣執行的
可以通過對寬頻路由器進行適當設定就可以對上網進行限制。這裡以tp linktl r402m為例 因為我發現最多人用這種。說說限制上網的步驟。一 取得區域網內所有使用者的ip與mac地址.取得ip的方法很多,推薦用 區域網檢視工具 網上隨便搜尋一下就有了.取得mac地址的方法 win r,輸入cmd,...