日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

傳輸層------IP報文結(jié)構(gòu)

 chenc_lib 2014-04-24
1、TCP數(shù)據(jù)段格式
  
  TCP是一種可靠的、面向連接的字節(jié)流服務(wù)。源主機(jī)在傳送數(shù)據(jù)前需要先和目標(biāo)主機(jī)建立連接。然后,在此連接上,被編號的數(shù)據(jù)段按序收發(fā)。同時,要求對每個數(shù)據(jù)段進(jìn)行確認(rèn),保證了可靠性。如果在指定的時間內(nèi)沒有收到目標(biāo)主機(jī)對所發(fā)數(shù)據(jù)段的確認(rèn),源主機(jī)將再次發(fā)送該數(shù)據(jù)段。
  
  如圖1所示,是TCP頭部結(jié)構(gòu)(RFC 793、1323)。
 
 
 

    圖1  TCP頭部結(jié)構(gòu)   
  ●源、目標(biāo)端口號字段:占16比特。TCP協(xié)議通過使用"端口"來標(biāo)識源端和目標(biāo)端的應(yīng)用進(jìn)程。端口號可以使用0到65535之間的任何數(shù)字。在收到服務(wù)請求時,操作系統(tǒng)動態(tài)地為客戶端的應(yīng)用程序分配端口號。在服務(wù)器端,每種服務(wù)在"眾所周知的端口"(Well-Know Port)為用戶提供服務(wù)。
  
  ●順序號字段:占32比特。用來標(biāo)識從TCP源端向TCP目標(biāo)端發(fā)送的數(shù)據(jù)字節(jié)流,它表示在這個報文段中的第一個數(shù)據(jù)字節(jié)。
  
  ●確認(rèn)號字段:占32比特。只有ACK標(biāo)志為1時,確認(rèn)號字段才有效。它包含目標(biāo)端所期望收到源端的下一個數(shù)據(jù)字節(jié)。
  
  ●頭部長度字段:占4比特。給出頭部占32比特的數(shù)目。沒有任何選項字段的TCP頭部長度為20字節(jié);最多可以有60字節(jié)的TCP頭部。
  
  ●標(biāo)志位字段(U、A、P、R、S、F):占6比特。各比特的含義如下:
  
  ◆URG:緊急指針(urgent pointer)有效。
  
  ◆ACK:確認(rèn)序號有效。
  
  ◆PSH:接收方應(yīng)該盡快將這個報文段交給應(yīng)用層。
  
  ◆RST:重建連接。
  
  ◆SYN:發(fā)起一個連接。
  
  ◆FIN:釋放一個連接。
  
  ●窗口大小字段:占16比特。此字段用來進(jìn)行流量控制。單位為字節(jié)數(shù),這個值是本機(jī)期望一次接收的字節(jié)數(shù)。
  
  ●TCP校驗和字段:占16比特。對整個TCP報文段,即TCP頭部和TCP數(shù)據(jù)進(jìn)行校驗和計算,并由目標(biāo)端進(jìn)行驗證。
  
  ●緊急指針字段:占16比特。它是一個偏移量,和序號字段中的值相加表示緊急數(shù)據(jù)最后一個字節(jié)的序號。
  
  ●選項字段:占32比特??赡馨?窗口擴(kuò)大因子"、"時間戳"等選項。
  
  2、UDP數(shù)據(jù)段格式
  

  UDP是一種不可靠的、無連接的數(shù)據(jù)報服務(wù)。源主機(jī)在傳送數(shù)據(jù)前不需要和目標(biāo)主機(jī)建立連接。數(shù)據(jù)被冠以源、目標(biāo)端口號等UDP報頭字段后直接發(fā)往目的主機(jī)。這時,每個數(shù)據(jù)段的可靠性依靠上層協(xié)議來保證。在傳送數(shù)據(jù)較少、較小的情況下,UDP比TCP更加高效。

 圖2  UDP數(shù)據(jù)段格式   
  ●源、目標(biāo)端口號字段:占16比特。作用與TCP數(shù)據(jù)段中的端口號字段相同,用來標(biāo)識源端和目標(biāo)端的應(yīng)用進(jìn)程。
  
  ●長度字段:占16比特。標(biāo)明UDP頭部和UDP數(shù)據(jù)的總長度字節(jié)。
  
  ●校驗和字段:占16比特。用來對UDP頭部和UDP數(shù)據(jù)進(jìn)行校驗。和TCP不同的是,對UDP來說,此字段是可選項,而TCP數(shù)據(jù)段中的校驗和字段是必須有的

3、IP報文段格式:


 
 
普通的 IP 頭部長度為20 個字節(jié),不包含IP 選項字段。


版本號(Version)字段標(biāo)明了IP 協(xié)議的版本號,目前的協(xié)議版本號為4。下一代IP 協(xié)議的版本號為6。


報文長度指 IP 包頭部長度,占4 位。


8 位的服務(wù)類型(TOS,Type of Service)字段包括一個3 位的優(yōu)先權(quán)字段(COS,Class of Service),4 位TOS 字段和1 位未用位。4 位TOS 分別代表最小時延、最大吞吐量、最高可靠性和最小費(fèi)用。


總長度(Total length)是整個IP 數(shù)據(jù)報長度,包括數(shù)據(jù)部分。


標(biāo)識符(Identification)字段唯一地標(biāo)識主機(jī)發(fā)送的每一份數(shù)據(jù)報。通常每發(fā)送一份報文它的值就會加1.


生存時間(TTL,Time to Live)字段設(shè)置了數(shù)據(jù)包可以經(jīng)過的路由器數(shù)目。一旦經(jīng)過一個路由器,TTL 值就會減1,當(dāng)該字段值為0 時,數(shù)據(jù)包將被丟棄。


協(xié)議字段確定在數(shù)據(jù)包內(nèi)傳送的上層協(xié)議,和端口號類似,IP 協(xié)議用協(xié)議號區(qū)分上層協(xié)議。TCP 協(xié)議的協(xié)議號為6,UDP 協(xié)議的協(xié)議號為17。


報頭校驗和(Head checksum)字段計算IP 頭部的校驗和,檢查報文頭部的完整性。源IP 地址和目的IP 地址字段標(biāo)識數(shù)據(jù)包的源端設(shè)備和目的端設(shè)備。

Linux下各數(shù)據(jù)報頭部結(jié)構(gòu)體定義:

#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN   (1)   //BYTE ORDER
#else
#error Redefine LITTLE_ORDER
#endif

//Mac頭部,總長度14字節(jié)
typedef struct _eth_hdr
{
unsigned char dstmac[6]; //目標(biāo)mac地址
unsigned char srcmac[6]; //源mac地址
unsigned short eth_type; //以太網(wǎng)類型
}eth_hdr;

//IP頭部,總長度20字節(jié)
typedef struct _ip_hdr
{
#if LITTLE_ENDIAN
unsigned char ihl:4;   //首部長度
unsigned char version:4, //版本 
#else
unsigned char version:4, //版本
unsigned char ihl:4;   //首部長度
#endif
unsigned char tos;   //服務(wù)類型
unsigned short tot_len; //總長度
unsigned short id;    //標(biāo)志
unsigned short frag_off; //分片偏移
unsigned char ttl;   //生存時間
unsigned char protocol; //協(xié)議
unsigned short chk_sum; //檢驗和
struct in_addr srcaddr; //源IP地址
struct in_addr dstaddr; //目的IP地址
}ip_hdr;

//TCP頭部,總長度20字節(jié)
typedef struct _tcp_hdr
{
unsigned short src_port;   //源端口號
unsigned short dst_port;   //目的端口號
unsigned int seq_no;    //序列號
unsigned int ack_no;    //確認(rèn)號
#if LITTLE_ENDIAN
unsigned char reserved_1:4; //保留6位中的4位首部長度
unsigned char thl:4;    //tcp頭部長度
unsigned char flag:6;    //6位標(biāo)志
unsigned char reseverd_2:2; //保留6位中的2位
#else
unsigned char thl:4;    //tcp頭部長度
unsigned char reserved_1:4; //保留6位中的4位首部長度
unsigned char reseverd_2:2; //保留6位中的2位
unsigned char flag:6;    //6位標(biāo)志 
#endif
unsigned short wnd_size;   //16位窗口大小
unsigned short chk_sum;   //16位TCP檢驗和
unsigned short urgt_p;    //16為緊急指針
}tcp_hdr;

//UDP頭部,總長度8字節(jié)
typedef struct _udp_hdr
{
unsigned short src_port; //遠(yuǎn)端口號
unsigned short dst_port; //目的端口號
unsigned short uhl;   //udp頭部長度
unsigned short chk_sum; //16位udp檢驗和
}udp_hdr;

//ICMP頭部,總長度4字節(jié)
typedef struct _icmp_hdr
{
unsigned char icmp_type;   //類型
unsigned char code;    //代碼
unsigned short chk_sum;   //16位檢驗和
}icmp_hdr;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多