TCPIP协议头部结构体.docx

上传人:b****1 文档编号:14290079 上传时间:2023-06-22 格式:DOCX 页数:19 大小:303.57KB
下载 相关 举报
TCPIP协议头部结构体.docx_第1页
第1页 / 共19页
TCPIP协议头部结构体.docx_第2页
第2页 / 共19页
TCPIP协议头部结构体.docx_第3页
第3页 / 共19页
TCPIP协议头部结构体.docx_第4页
第4页 / 共19页
TCPIP协议头部结构体.docx_第5页
第5页 / 共19页
TCPIP协议头部结构体.docx_第6页
第6页 / 共19页
TCPIP协议头部结构体.docx_第7页
第7页 / 共19页
TCPIP协议头部结构体.docx_第8页
第8页 / 共19页
TCPIP协议头部结构体.docx_第9页
第9页 / 共19页
TCPIP协议头部结构体.docx_第10页
第10页 / 共19页
TCPIP协议头部结构体.docx_第11页
第11页 / 共19页
TCPIP协议头部结构体.docx_第12页
第12页 / 共19页
TCPIP协议头部结构体.docx_第13页
第13页 / 共19页
TCPIP协议头部结构体.docx_第14页
第14页 / 共19页
TCPIP协议头部结构体.docx_第15页
第15页 / 共19页
TCPIP协议头部结构体.docx_第16页
第16页 / 共19页
TCPIP协议头部结构体.docx_第17页
第17页 / 共19页
TCPIP协议头部结构体.docx_第18页
第18页 / 共19页
TCPIP协议头部结构体.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

TCPIP协议头部结构体.docx

《TCPIP协议头部结构体.docx》由会员分享,可在线阅读,更多相关《TCPIP协议头部结构体.docx(19页珍藏版)》请在冰点文库上搜索。

TCPIP协议头部结构体.docx

TCPIP协议头部结构体

TCP/IP协议头部结构体

 

网络协议结构体定义

1.// i386 is little_endian.   

2.#ifndef LITTLE_ENDIAN   

3.#define LITTLE_ENDIAN   

(1)   //BYTE ORDER   

4.#else   

5.#error Redefine LITTLE_ORDER   

6.#endif   

7.//Mac头部,总长度14字节   

8.typedef struct _eth_hdr  

9.{  

10.    unsigned char dstmac[6]; //目标mac地址   

11.    unsigned char srcmac[6]; //源mac地址   

12.    unsigned short eth_type; //以太网类型   

13.}eth_hdr;  

14.//IP头部,总长度20字节   

15.typedef struct _ip_hdr  

16.{  

17.    #if LITTLE_ENDIAN   

18.    unsigned char ihl:

4;     //首部长度   

19.    unsigned char version:

4, //版本    

20.    #else   

21.    unsigned char version:

4, //版本   

22.    unsigned char ihl:

4;     //首部长度   

23.    #endif   

24.    unsigned char tos;       //服务类型   

25.    unsigned short tot_len;  //总长度   

26.    unsigned short id;       //标志   

27.    unsigned short frag_off; //分片偏移   

28.    unsigned char ttl;       //生存时间   

29.    unsigned char protocol;  //协议   

30.    unsigned short chk_sum;  //检验和   

31.    struct in_addr srcaddr;  //源IP地址   

32.    struct in_addr dstaddr;  //目的IP地址   

33.}ip_hdr;  

34.//TCP头部,总长度20字节   

35.typedef struct _tcp_hdr  

36.{  

37.    unsigned short src_port;    //源端口号   

38.    unsigned short dst_port;    //目的端口号   

39.    unsigned int seq_no;        //序列号   

40.    unsigned int ack_no;        //确认号   

41.    #if LITTLE_ENDIAN   

42.    unsigned char reserved_1:

4; //保留6位中的4位首部长度   

43.    unsigned char thl:

4;        //tcp头部长度   

44.    unsigned char flag:

6;       //6位标志   

45.    unsigned char reseverd_2:

2; //保留6位中的2位   

46.    #else   

47.    unsigned char thl:

4;        //tcp头部长度   

48.    unsigned char reserved_1:

4; //保留6位中的4位首部长度   

49.    unsigned char reseverd_2:

2; //保留6位中的2位   

50.    unsigned char flag:

6;       //6位标志    

51.    #endif   

52.    unsigned short wnd_size;    //16位窗口大小   

53.    unsigned short chk_sum;     //16位TCP检验和   

54.    unsigned short urgt_p;      //16为紧急指针   

55.}tcp_hdr;  

56.//UDP头部,总长度8字节   

57.typedef struct _udp_hdr  

58.{  

59.    unsigned short src_port; //远端口号   

60.    unsigned short dst_port; //目的端口号   

61.    unsigned short uhl;      //udp头部长度   

62.    unsigned short chk_sum;  //16位udp检验和   

63.}udp_hdr;  

64.//ICMP头部,总长度4字节   

65.typedef struct _icmp_hdr  

66.{  

67.    unsigned char icmp_type;   //类型   

68.    unsigned char code;        //代码   

69.    unsigned short chk_sum;    //16位检验和   

70.}icmp_hdr;   

 

 

全面的网络协议结构体定义

1./*********************************************/  

2.//计算机网络各种协议的结构   

3.#define ETHER_ADDR_LEN 6 //NIC物理地址占6字节   

4.#define MAXDATA 10240   

5./* 

6.网络实验程序 

7.数据包中的TCP包头,IP包头,UDP包头,ARP包,Ethernet包等. 

8.以及各种表.路由寻址表,地址解析协议表DNS表等 

9.*/  

10.#define ETHERTYPE_IP 0x0800   //IP Protocal   

11.#define ETHERTYPE_ARP 0x0806   //Address Resolution Protocal   

12.#define ETHERTYPE_REVARP 0x0835   //Reverse Address Resolution Protocal 逆地址解析协议   

13./*********************************************/  

14.//ethernet   

15.typedef struct ether_header  

16.{  

17.    u_char ether_dhost[ETHER_ADDR_LEN];  

18.    u_char ether_shost[ETHER_ADDR_LEN];  

19.    u_short ether_type;  

20.}ETH_HEADER;  

21./*********************************************/  

22.//ether_header eth;   

23./*********************************************/  

24.//arp   

25.typedef struct arphdr  

26.{  

27.    u_short ar_hrd;  

28.    u_short ar_pro;  

29.    u_char ar_hln;  

30.    u_char ar_pln;  

31.    u_short ar_op;  

32.}ARP_HEADER;  

33./*********************************************/  

34./*********************************************/  

35.//IP报头   

36.typedef struct ip  

37.{  

38.    u_int ip_v:

4; //version(版本)   

39.    u_int ip_hl:

4; //header length(报头长度)   

40.    u_char ip_tos;  

41.    u_short ip_len;  

42.    u_short ip_id;  

43.    u_short ip_off;  

44.    u_char ip_ttl;  

45.    u_char ip_p;  

46.    u_short ip_sum;  

47.    struct in_addr ip_src;  

48.    struct in_addr ip_dst;  

49.}IP_HEADER;  

50./*********************************************/  

51./*********************************************/  

52.//TCP报头结构体   

53.typedef struct tcphdr   

54.{  

55.    u_short th_sport;  

56.    u_short th_dport;  

57.    u_int th_seq;  

58.    u_int th_ack;  

59.    u_int th_off:

4;  

60.    u_int th_x2:

4;  

61.    u_char th_flags;  

62.    u_short th_win;  

63.    u_short th_sum;  

64.    u_short th_urp;  

65.}TCP_HEADER;  

66.#define TH_FIN 0x01   

67.#define TH_SYN 0x02   

68.#define TH_RST 0x04   

69.#define TH_PUSH 0x08   

70.#define TH_ACK 0x10   

71.#define TH_URG 0x20   

72./*********************************************/  

73./*********************************************/  

74.//UDP报头结构体*/   

75.typedef struct udphdr   

76.{  

77.    u_short uh_sport;  

78.    u_short uh_dport;  

79.    u_short uh_ulen;  

80.    u_short uh_sum;  

81.}UDP_HEADER;  

82./*********************************************/  

83.//=============================================   

84./*********************************************/  

85./*ARP与ETHERNET生成的报头*/  

86.typedef struct ether_arp  

87.{  

88.    struct arphdr ea_hdr;  

89.    u_char arp_sha[ETHER_ADDR_LEN];  

90.    u_char arp_spa[4];  

91.    u_char arp_tha[ETHER_ADDR_LEN];  

92.    u_char arp_tpa[4];  

93.}ETH_ARP;  

94.#define arp_hrd ea_hdr.ar_hrd   

95.#define arp_pro ea_hdr.ar_pro   

96.#define arp_hln ea_hdr.ar_hln   

97.#define arp_pln ea_hdr.ar_pln   

98.#define arp_op ea_hdr.ar_op   

99.#define ARPHRD 1   

100./*********************************************/  

101./*********************************************/  

102.//tcp与ip生成的报头   

103.typedef struct packet_tcp   

104.{  

105.    struct ip ip;  

106.    struct tcphdr tcp;  

107.    u_char data[MAXDATA];  

108.}TCP_IP;  

109./*********************************************/  

110./*********************************************/  

111.//udp与ip生成的报头   

112.typedef struct packet_udp   

113.{  

114.    struct ip ip;  

115.    struct udphdr udp;  

116.}UDP_IP;  

117./*********************************************/  

118./*********************************************/  

119.//ICMP的各种形式   

120.//icmpx,x==icmp_type;   

121.//icmp报文(能到达目的地,响应-请求包)   

122.struct icmp8   

123.{  

124.    u_char icmp_type; //type of message(报文类型)   

125.    u_char icmp_code; //type sub code(报文类型子码)   

126.    u_short icmp_cksum;  

127.    u_short icmp_id;  

128.    u_short icmp_seq;  

129.    char icmp_data[1];  

130.};  

131.//icmp报文(能返回目的地,响应-应答包)   

132.struct icmp0   

133.{  

134.    u_char icmp_type; //type of message(报文类型)   

135.    u_char icmp_code; //type sub code(报文类型子码)   

136.    u_short icmp_cksum;  

137.    u_short icmp_id;  

138.    u_short icmp_seq;  

139.    char icmp_data[1];  

140.};  

141.//icmp报文(不能到达目的地)   

142.struct icmp3   

143.{  

144.    u_char icmp_type; //type of message(报文类型)   

145.    u_char icmp_code; //type sub code(报文类型子码),例如:

0网络原因不能到达,1主机原因不能到达...   

146.    u_short icmp_cksum;  

147.    u_short icmp_pmvoid;  

148.    u_short icmp_nextmtu;  

149.    char icmp_data[1];  

150.};  

151.//icmp报文(重发结构体)   

152.struct icmp5   

153.{  

154.    u_char icmp_type; //type of message(报文类型)   

155.    u_char icmp_code; //type sub code(报文类型子码)   

156.    u_short icmp_cksum;  

157.    struct in_addr icmp_gwaddr;  

158.    char icmp_data[1];  

159.};  

160.struct icmp11   

161.{  

162.    u_char icmp_type; //type of message(报文类型)   

163.    u_char icmp_code; //type sub code(报文类型子码)   

164.    u_short icmp_cksum;  

165.    u_int icmp_void;  

166.    char icmp_data[1];  

167.};  

 

 

================================================================================

IP协议 

  IP协议(InternetProtocol)是网络层协议,用在因特网上,TCP,

UDP,ICMP,IGMP数据都是按照IP数据格式发送得。

IP协议提供的是不可靠无连接得服务。

IP数据包由一个头部和一个正文部分构成。

正文主要是传输的数据,我们主要来理解头部数据,可以从其理解到IP协议。

  

IP数据包头部格式(RFC791) 

 

  ExampleInternetDatagramHeader 

  上面的就是IP数据的头部格式,这里大概地介绍一下。

  

  IP头部由20字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到右。

  

TCP协议  

  TCP协议(TRANSMISSIONCONTROLPROTOCOL)是传输层协议,为应用层提供服务,和UDP不同的是,TCP协议提供的可靠的面向连接的服务。

在RFC793中是基本的TCP描述。

关于TCP协议的头部格式内容的说明:

  

TCPHeaderFORMat  

 

 

  TCPHeaderFORMat  

  跟IP头部差不多,基本的长度也是20字节。

TCP数据包是包含在一个IP数据报文中的。

  

  好了,简单介绍到此为止。

来看看我捕获的例子吧。

这是一次FTP的连接,呵呵,是cuteftp默认的cuteftp的FTP站点,IP地址是:

216.3.226.21。

我的IP地址假设为:

192.168.1.1。

下面的数据就是TCO/IP连接过程中的数据传输。

我们可以分析TCP/IP协议数据格式以及TCP/IP连接的三次握手(ThreeWay-Handshake)情况。

下面的这些十六进制数据只是TCP/IP协议的数据,不是完整的网络通讯数据。

  

  第一次,我向FTP站点发送连接请求(我把TCP数据的可选部分去掉了) 

  192.168.1.1->216.3.226.21  

  IP头部:

450000305252400080062c23c0a80101d803e215  

  TCP头部:

0d280015505fa9060000000070024000c0290000  

  来看看IP头部的数据是些什么。

  

  第一字节,“45”,其中“4”是IP协议的版本(Version),说明是IP4。

“5”是IHL位,表示IP头部的长度,是一个4bit字段,最大就是1111了,值为12,IP头部的最大长度就是60字节。

而这里为“5”,说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据。

  

  接下来的一个字节“00”是服务类型(TypeofService)。

这个8bit字段由3bit的优先权子字段(现在已经被忽略),4bit的TOS子字段以及1bit的未用字段(现在为0)构成.4bit的TOS子字段包含:

最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1bit位最多只能有一个为1,本例中都为0,表示是一般服务。

  

  接着的两个字节“0030”是IP数据报文总长,包含头部以及数据,这里表示48字节。

这48字节由20字节的IP头部以及28字节的TCP头构成(本来截取的TCP头应该是28字节的,其中8字节为可选部分,被我省去了)。

因此目前最大的IP数据包长度是65535字节。

  

  再是两个字节的标志位(Identification):

“5252”,转换为十进制就是21074。

这个是让目的主机来判断新来的分段属于哪个分组。

  

  下一个字节“40”,转换为二进制就是“01000000”,其中第一位是IP协议目前没有用上的,为0。

接着的是两个标志DF和MF。

DF为1表示不要分段,MF为1表示还有进一步的分段(本例为0)。

然后的“00000”是分段便移(FragmentOffset)。

  

  “80”这个字节就是TTL(TimeToLive)了,表示一个IP数据流的生命周期,用Ping显示的结果,能得到TTL的值,很多文章就说通过TTL位来判别主机类型。

因为一般主机都有默认的TTL值,不同系统的默认值不一样。

比如WINDOWS为128。

不过,一般Ping得到的都不是默认值,这是因为每次IP数据包经过一个路由器的时候TTL就减一,当减到0时,这个数据包就消亡了。

这也时Tracert的原理。

本例中为“80”,转换为十进制就是128了,我用的WIN2000。

  

  继续下来的是“06”,这个字节表示传输层的协议类型(Protocol)。

在RFC790中有定义,6表示传输层是TCP协议。

  

  “2c23”这个16bit是头校验和(HeaderChecksum)。

  

  接下来“c0a80101”,这个就是源地址(SourceAddress)了,也就是我的IP地址。

 

  转换为十进制的IP地址就是:

192.168.1.1,同样,继续下来的32位“d803e215”是目标地址,216.3.226.21  

  好了,真累啊,终于看完基本的20字节的IP数据报头了。

继续看TCP的头部吧,这个是作为IP数

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2