WEB开发网
开发学院软件开发VC TCP/IP学习笔记 阅读

TCP/IP学习笔记

 2010-04-03 20:34:41 来源:WEB开发网   
核心提示:三、数据包的封装和分用1、封装:应用程序→TCP/UDP→IP→以太网2、分用:以太网←IP←TCP/UDP←应用程序 以太网 首部 (14)

三、数据包的封装和分用

1、封装:

应用程序→TCP/UDP→IP→以太网

2、分用:

以太网←IP←TCP/UDP←应用程序

以太网

首部

(14)

IP首部

(20)

TCP首

部(20)

应用数据 以太网

尾部(4)

四、IP首部:

IP协议是TCP/IP协议族中最核心的协议,所有的TCP、UDP、ICMP和IGMP数据都以IP数据报格式传输。IP传输的两个特点:不可靠和无连接。IP协议并不保证数据报能成功地到达目的地,也不维护后续数据报的状态信息。必须由上层协议处理。

4位

版本

4位首

部长度

8位服务类型 16位总长度(字节数)
16位标识 3位

标志

13位片偏移
8位TTL 8位协议 16位首部检验和
32位源IP地址
32位目的IP地址

IP首部定义:

typedef struct ip_hdr
{
  unsigned char ip_verlen; // 4-bit 版本号
               // 4-bit 首部长度 (in 32-bit words)
  unsigned char ip_tos; // IP 服务类型
  unsigned short ip_totallength; // 总长度(字节数)
  //第一个32位
  unsigned short ip_id; // 标识
  unsigned short ip_offset; //3位标志,13位分片偏移,
  #define IP_DF 0x4000 //0x4000 don''t fragment flag
  #define IP_MF 0x2000 //0x2000 more fragment flag
  #define IP_OFFMASK 0x1fff //0x1fff mask for fragmenting bits
  //第二个32位
  unsigned char ip_ttl; // 生存时间
  unsigned char ip_protocol; // 上层协议
  unsigned short ip_checksum; // 首部检验和
  //第三个32位
  unsigned int ip_srcaddr; // 源IP地址
  //第四个32位
  unsigned int ip_destaddr; // 目的IP地址
  //第五个32位
  } ip,IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;

说明:ip_verlen前4位目前为4,表示为IPv4,后4位为5,表示首部长度为5X4=20个字节。

ip_tos为服务类型(type of service),aaabbbbc,aaa为优先权子字段,现在已被忽略,bbbb为TOS子字段,代表:最小时延、最大吞吐量、最高可靠性和最小费用,c未使用必须为0。如果bbbb均为0,则表示为一般服务。目前大多数TCP/IP实现都不支持TOS特性。

ip_totallength为IP数据报的总长度,以字节为单位,因此理论最大值为65535,但实际是不可能的。

ip_id为唯一标识主机发送的每一个数据报,通常每发一份它的值就会加1。

ip_off前3位标志abc,a为保留,必须为0,b为不分片标志,c为更多分片标志。

ip_off后13位为分片位置,以8字节为单位计算。因此,除最后一个分片外,其他每个分片都希望是一个8字节倍数的数据,从而使后面的分片从8字节边界开始。

ip_ttl为IP报的生存周期,每经过一个路由器就减1,如果该字段为0,则该数据报被丢弃。

ip_protocol:1=ICMP,2=IGMP,3=TCP,17=UDP

ip_checksum为数据报的首部检验和。计算方法如下:

USHORT checksum(ip *ip, int size) 

  unsigned long cksum=0;
  while (size > 1) 
  {  
   cksum += * ((USHORT*)ip )++;
   size -= sizeof(USHORT);
  }
  if (size) 
 {
   cksum +=(USHORT) *(UCHAR*)ip;
 }
 cksum = (cksum >> 16) + (cksum & 0xffff);
 cksum += (cksum >>16);
 return (USHORT)(~cksum);
}

ICMP、IGMP、TCP和UDP协议也采用相同的检验和算法。

上一页  1 2 3 4  下一页

Tags:TCP IP 学习

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接