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

📄 tcpip_protocol.h

📁 单片机TCP IP software
💻 H
字号:
//=================================================================================



//=================================================================================
//定义MAC类型
#define	cMACTYPE_IP		0x0800
#define	cMACTYPE_ARP	0x0806

//定义IP协议字段值,我没有找到具体的资料,介绍对应的值。下面这些值,是我自己摸索出来的。
#define	cIPTYPE_ICMP	0x0001		//经过Ping测试,应该是这个
#define	cIPTYPE_IGMP	0x0002		//可能是
#define	cIPTYPE_UDP		0x0011		//可能是
#define	cIPTYPE_TCP		0x0006		//可能是

//定义ICMP类型
#define	cICMP_PingResponse	0x0000
#define	cICMP_PingRequest	0x0008

//定义各种数据报头的依次偏移
#define	cHdrOff_MAC_IP	0x0007		//7个字,14个字节
#define	cHdrOff_IP_UDP	0x000A		//10个字,20个字节(如果没有可选项的话)
#define	cHdrOff_IP_ICMP	0x000A		//10个字,20个字节(如果没有可选项的话)
#define	cHdrOff_IP_IGMP	0x000A		//10个字,20个字节(如果没有可选项的话)
#define	cHdrOff_UDP_Data	0x0004	//4个字,8个字节
//=================================================================================





//	定义网络上使用的数据结构。
//=================================================================================
struct	TIPAddr
{
	unsigned	short	Addr2_1;
	unsigned	short	Addr4_3;
};

struct	TMAC
{
	unsigned	short	Addr2_1;
	unsigned	short	Addr4_3;
	unsigned	short	Addr6_5;
};

struct	TMACHeader
{
	struct		TMAC	DestMAC;			//目的MAC地址
	struct		TMAC	SrcMAC;				//源MAC地址
	unsigned	short	MACType;			//MAC类型
};

struct	TIPHeader						//IP首部20个字节
{
	unsigned	short	TOS_Version;	//IP
	unsigned	short	TotalLength;	//报文总长度
	unsigned	short	ID;				//报文标识
	unsigned	short	Flag_Offset;	//分段
	unsigned	short	Protocol_TTL;	//报文生存周期,以及IP头之后的协议(TCP,UDP,VINES)
	unsigned	short	ChkSum;			//校验和
	struct		TIPAddr SrcAddr;		//源IP
	struct		TIPAddr DestAddr;		//目的IP
};

struct	TUDPHeader
{
	unsigned	short	SrcPort;		//源端口
	unsigned	short	DestPort;		//目的端口
	unsigned	short	Length;			//信息长度
	unsigned	short	ChkSum;			//校验和
};

struct	TIGMPHeader
{
	unsigned	short	Type_MRT;
	unsigned	short	ChkSum;
	struct		TIPAddr	GroupAddr;
};

struct	TICMPHeader
{
	unsigned	short	Type_Code;
	unsigned	short	ChkSum;
};

struct	TPre_UDPHeader					//UDP伪头部
{
	struct		TIPAddr	SrcAddr;		//源IP
	struct		TIPAddr	DestAddr;		//目的IP
	unsigned	short	Protocol_Value;	//协议值 17
	unsigned	short	Length;			//UDP长度
};

struct	TARP
{
	unsigned	short	Hard_Type;				//硬件类型 以太网1
	unsigned	short	Protocol_type;			//协议类型 网际协议0x0800
	unsigned	short	Protocol_Hard_Length;	//协议、硬件地址长度各8位	对于IPV4来说  0x0604
	unsigned	short	OP_Code;				//操作码 本机请求ARP=1,应答ARP=2
	struct		TMAC    Send_MACAddr;			//发送方的硬件地址
	struct		TIPAddr	Send_IPAddr;			//发送方的IP
	struct		TMAC	Receive_MACAddr;		//接受方硬件地址
	struct		TIPAddr	Receive_IPAddr;			//接受方的IP
};

struct	TARPPacket
{
	struct		TMAC	DestMAC;			//目的MAC地址
	struct		TMAC	SrcMAC;				//源MAC地址
	unsigned	short	MACType;			//MAC类型
	struct		TARP	ARP;				//ARP	数据
};

struct	TUDPPacket
{
	struct		TMACHeader	MACHdr;			//MAC	数据头
	struct		TIPHeader	IPHdr;			//IP	数据头
	struct		TUDPHeader	UDPHdr;			//UDP	数据头
	unsigned	short	FirstData;			//我们的数据由此开始
};

struct	TClientInfo
{
	struct		TMAC	MAC;				//用户的MAC地址
	struct		TIPAddr	IP;					//用户的IP地址
	unsigned	short	Port;				//用户的端口
};

/*union	TPacketHeader
{
	struct	TUDPPacket	UDPHeader;
	struct	TARPPacket	ARPHeader;
};*/

struct	TIP_MAC_Table
{
	struct	TIPAddr	ip;
	struct	TMAC	MAC;
};

//=================================================================================



//=================================================================================
void	IP_Init();
void	IP_DispatchPacket(unsigned short * pData);
void	IP_SendARP(struct TIPAddr ip);
//=================================================================================



⌨️ 快捷键说明

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