TCP/IP协议
TCP/IP(Transmission Control Protocal/Internet Protocal,传输控制协议/网际协议)协议是互联网上最流行的协议,它能够实现互联网上不同类型操作系统的计算机相互通信。对于网络开发人员,必须了解TCP/IP协议的结构。TCP/IP协议将网络分为4层,分别对应于OSI参考模型的7层结构。表1列出了TCP/IP协议与OSI参考模型的对应关系。
表1 TCP/IP协议结构层次
|
TCP/IP协议
|
OSI参考模型
|
|
应用层(包括Telnet、FTP、SNTP协议)
|
会话层、表示层和应用层
|
|
传输层(包括TCP、UDP协议)
|
传输层
|
|
网络层(包括ICMP、IP、ARP等协议)
|
网络层
|
|
数据链路层
|
物理层和数据链路层
|
从表1中可以发现,TCP/IP协议不是单个协议,而是一个协议簇,它包含有多种协议,其中主要的协议有网际协议(IP)和传输控制协议(TCP)等。下面给出TCP/IP主要协议的结构。
(1)TCP协议
传输控制协议TCP是一种提供可靠数据传输的通行协议,它是TCP/IP体系结构中传输层上的协议。在发送数据时,应用层的数据传输到传输层,加上TCP的首部,数据就构成了报文。报文是网际层IP的数据,如果再加上IP首部,就构成了IP数据报。TCP协议C语言数据描述如下:
typedef struct HeadTCP {
WORD SourcePort; //16位源端口号
WORD DePort; //16位目的端口
DWORD SequenceNo; //32位序号
DWORD ConfirmNo; //32位确认序号
BYTE HeadLen; //与Flag为一个组成部分, 首部长度,占4位,保留6位,6位标识,共16位
BYTE Flag;
WORD WndSize; //16位窗口大小
WORD CheckSum; //16位校验和
WORD UrgPtr; //16位紧急指针
} HEADTCP;
(2)IP协议
IP协议又称为网际协议。它工作在网际层,主要提供无链接数据报传输。IP协议不保证数据报的发送,但最大限度的发送数据。IP协议C语言数据描述如下:
typedef struct HeadIP {
unsigned char headerlen:4; //首部长度,占4位
unsigned char version:4; //版本,占4位
unsigned char servertype; //服务类型,占8位,即1个字节
unsigned short totallen; //总长度,占16位
unsigned short id; //与idoff构成标识 ,共占16位,前3位是标识,后13位是片偏移
unsigned short idoff;
unsigned char ttl; //生存时间 ,占8位
unsigned char proto; //协议,占8位
unsigned short checksum; //首部检验和,占16位
unsigned int sourceIP; //源IP地址,占32位
unsigned int destIP; //目的IP地址,占32位
}HEADIP;
提示:在IP数据包结构中,第一个成员和第2个成员各占4位,也就是半个字节。我们知道为对象分配空间最小单位是1个字节,为了描述IP数据包中的成员,我们在定义数据包结构时使用了位域,具体指定每一个成员占用的位数。
(3)ICMP协议
ICMP协议又称为网际控制报文协议。它负责网络上设备状态的发送和报文检查,可以将某个设备的故障信息发送到其他设备上。ICMP协议C语言数据描述如下:
typedef struct HeadICMP {
BYTE Type; //8位类型
BYTE Code; //8位代码
WORD ChkSum; //16位校验和
} HEADICMP;
(4)UDP协议
用户数据报协议UDP是一个面向无连接的协议,采用该协议,两个应用程序不需要先建立连接,它为应用程序提供一次性的数据传输服务。UDP协议不提供差错恢复,不能提供数据重传,因此该协议传输数据安全性略差。UDP协议C语言数据描述如下:
typedef struct HeadUDP {
WORD SourcePort; //16位源端口号
WORD DePort; //16位目的端口
WORD Len; //16为UDP长度
WORD ChkSum; //16位UDP校验和
} HEADUDP;