📄 tcpip.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 + -