⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpip.h

📁 这是新华龙(www.xhl.xom.xn)开发的
💻 H
字号:
#define BYTE unsigned char
#define WORD unsigned int 
#define LONG unsigned long 

union u {WORD word;
         struct{BYTE high;BYTE low;} bytes;//字节顺序为高位在前的2byte结构
		 };

union w { LONG dwords;
          struct {WORD high;WORD low;}words;
		  struct {BYTE byte3;BYTE byte2;BYTE byte1;BYTE byte0;}bytes;
       };

union ethernet_address_type{
                      WORD words[3];
					  BYTE bytes[6];
                      };

union ip_address_type{
                      LONG dwords;
                      WORD words[2];
					  BYTE bytes[4];
                      };

union arp_table_type {
                      BYTE bytes[12];
                      WORD words[6];
                      struct
					  {
					  	BYTE status;BYTE ttl;WORD ip_address[2];WORD ethernet_address[3];
                      //状态,       生存时间,ip地址,            以太网地址
                       }arp;
                     };
//以太网帧
struct  ethernet {  BYTE status;   //接收状态
                    BYTE nextpage; //下一个页
                    WORD length;   //以太网长度,以字节为单位
                    WORD destnodeid[3];    //目的网卡地址
                    WORD sourcenodeid[3];  //源网卡地址
                    WORD protocal;         //下一层协议 
                    BYTE packet[1518];     //包的内容
                   }  ;
struct  retransmit { BYTE status;   //重发缓冲区状态
                    BYTE timeout;   //超时时间值,单位为10毫秒,最大2.55秒
                    WORD length;    //以太网长度,以字节为单位
                    WORD destnodeid[3];    //*目的网卡地址
                    WORD sourcenodeid[3];  //源网卡地址
                    WORD protocal;         //下一层协议 
                    BYTE packet[1518];     //包的内容
                   }  ;  

//IP包   仅当IHL=5时用 当不=5时作转换
struct ip  { 		WORD head[9];          //以太网包头
                    BYTE verandihl;        //版本与头长度
                    BYTE typeofserver;     //服务类型
                    WORD totallength;      //总长度
                    WORD frameindex;       //IP帧序号
                    WORD segment;          //分段标志
                    BYTE ttl;             //生存时间
                    BYTE protocal;        //下一层协议
                    WORD crc;              //校验和
                    WORD sourceip[2];      //源IP
                    WORD destip[2];        //目的IP
                    BYTE packet[1498];     //IP包的内容

                   };

struct ippacket   { WORD head[9];          //以太网包头
                    WORD ippacket[720];    //IP包的内容
                  };
                
struct arp  { 
				 WORD head[9];  //以太网头  
                                //arp报文的内容总长28字节
                 WORD harewaretype;   //以太网为0x0001
                 WORD protocaltype;   //ip 为0X0800
                 BYTE halength;       //=0X06
                 BYTE palength;       //=0X04
                 WORD operation;      //操作  0X0001为请求   0X0002为应答  
                                      //0X0003为反向地址请求 0X0004为反向地址应答
                 WORD sourcenodeid[3];//源网卡地址
                 WORD sourceip[2];    //源IP地址
                 WORD destnodeid[3];  //目的网卡地址
                 WORD destip[2];      //目的IP地址
			}; 

struct icmp {//包含在IP包中,是IP的上层为0X01的应用
                WORD head[9];     //以太网头*/
                WORD iphead[10];  //IP头*/
                BYTE type;  //0X08 PING请求 0X00 PING应答*/
                BYTE option; //0X00 PING*/
                WORD crc;      
                WORD id;
                WORD seq;
                BYTE icmpdata[1478];
             };

struct tcp {   WORD head[9];
               WORD iphead[10];
               WORD sourceport; //源端口
               WORD destport;   //目的端口
               LONG seqnumber; //顺序号
               LONG acknumber; //确认号
               BYTE offset;     //数据偏移量
               BYTE control;    //连接控制
               WORD window;     //流控
               WORD crc;        //校验和 ,包括伪头部,TCP头部,数据
               WORD urg;        //紧急指针
               BYTE tcpdata[1478];    //*TCP数据
             };

struct udp {   WORD head[9];
               WORD iphead[10];
               WORD sourceport; //源端口
               WORD destport;   //目的端口
               WORD length;    
               WORD crc;        //校验和 ,包括伪头部,udp头部,数据
               BYTE udpdata[1478];    //udp数据
             };
             
//所有协议的共用体

union netcard {struct {BYTE  bytebuf[1536];} bytes;
               struct {WORD wordbuf[768];} words;
               struct ethernet etherframe;
			   struct retransmit rtframe;
               struct arp   arpframe;
               struct icmp  icmpframe;
               struct tcp   tcpframe;  
               struct ip   ipframe;
			   struct udp   udpframe;
               struct ippacket ippacket;
              };

struct socket_type{
                   WORD my_port; //本机端口
				   WORD dest_port;//对方端口
				   WORD dest_ip[2];//对方ip
				   WORD dest_node_id[3];//对方的以太网地址
				   LONG irs;//初始化顺序号
                   LONG iss;//我的初始化序列号
                   LONG rcv_nxt;//对方的顺序号
				   LONG snd_nxt;//我的已经发送顺序号
                   LONG snd_una;//我的还没有确认顺序号
				   //LONG dest_ack_number;
				   WORD rcv_wnd;//对方的window大小
                   WORD snd_wnd; //我的window大小
        		   WORD dest_max_segment_size;//对方接受的最大的数据包大小MTU
                   WORD my_max_segment_size;//我能接受的最大的数据包大小
				   LONG my_wl1;//seq
				   LONG my_wl2;//ack
                   BYTE state;//连接状态
				   BYTE open;
                  };

/*  TCP 状态定义 */
#define tcp_state_listen        0
#define tcp_state_syn_rcvd  	1
#define tcp_state_syn_sent      2
#define tcp_state_established   3
#define TCP_STATE_FIN_WAIT1     4
#define TCP_STATE_FIN_WAIT2     5
#define TCP_STATE_CLOSING       6
#define tcp_state_close_wait   	7
#define tcp_state_last_ack      8
#define TCP_STATE_CLOSED        9
#define tcp_state_time_wait     10


#define reg00   XBYTE[0x0300]   //reg00- 10为isa网卡接口的寄存器地址300-310;
#define reg01   XBYTE[0x0301]
#define reg02   XBYTE[0x0302]
#define reg03   XBYTE[0x0303]
#define reg04   XBYTE[0x0304]
#define reg05   XBYTE[0x0305]
#define reg06   XBYTE[0x0306]
#define reg07   XBYTE[0x0307]
#define reg08   XBYTE[0x0308]
#define reg09   XBYTE[0x0309]
#define reg0a   XBYTE[0x030a]
#define reg0b   XBYTE[0x030b]
#define reg0c   XBYTE[0x030c]
#define reg0d   XBYTE[0x030d]
#define reg0e   XBYTE[0x030e]
#define reg0f   XBYTE[0x030f]
#define reg10   XBYTE[0x0310]

#define tcp_max_rt   8  //tcp包最多重发的次数
#define rt_size 5

//tcp连接的标志位
#define tcp_fin 0x01
#define tcp_syn 0x02
#define tcp_rst 0x04
#define tcp_psh 0x08
#define tcp_ack 0x10
#define tcp_urg 0x20

extern BYTE rttime;//重发时间
extern xdata union ip_address_type my_ip_address; //本机的ip地址
extern xdata union ip_address_type gateway_ip_address;//网关的ip地址
extern xdata union ip_address_type temp_ip_address; //临时变量
extern xdata union ip_address_type mask_ip_address;//子网掩码
extern xdata union ip_address_type ping_ip_address;//用于ping命令
extern BYTE drop_count;//用于关闭tcp_ip连接的计数
extern xdata union netcard retransmit_buffer[];//最多5块重发缓冲区
extern xdata struct socket_type tcp1024;
extern WORD frameindex;				//IP包的序列号 
extern bit txd_buffer_select;   		//选择网卡的发送缓冲区     
extern BYTE gateway_ip_address_ttl ; //网关的ip地址的以太网地址生存时间 单位分钟
                                //=0表示还没有解析
								//  <5分钟时需要刷新
								//  最大25分钟
extern BYTE ping_ip_address_ttl;
extern BYTE ping_count;	//ping的次数
extern BYTE tcp_count;		//用于telnet连接的次数
extern BYTE udp_count;
extern BYTE xdata *read_dma_point;
extern bit double_second;
extern bit tcp_time_out;
extern bit tcpconnect;  		//是否已经建立tcp连接的标志
extern xdata union netcard rxdnet;
extern xdata union netcard txdnet;
extern BYTE data next_page;
extern union w crctemp; 
extern xdata union ethernet_address_type my_ethernet_address;  	//本机的以太网地址
extern xdata union ethernet_address_type gateway_ethernet_address; //网关的以太网地址
extern xdata union ethernet_address_type ping_ethernet_address;	//用来ping的以太网地址
extern union u port;
extern xdata unsigned char command_buffer[];//命令缓冲区
extern unsigned int  command_length;//命令长度
extern BYTE TimeSecond;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -