?? 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 + -