IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节。
下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变。
版本:占4位(bit),指IP协议的版本号。目前的主要版本为IPV4,即第4版本号,也有一些教育网和科研机构在使用IPV6。在进行通信时,通信双方的IP协议版本号必须一致,否则无法直接通信。
首部长度:占4位(bit),指IP报文头的长度。最大的长度(即4个bit都为1时)为15个长度单位,每个长度单位为4字节(TCP/IP标准,DoubleWord),所以IP协议报文头的最大长度为60个字节,最短为上图所示的20个字节。
服务类型:占8位(bit),用来获得更好的服务。其中的前3位表示报文的优先级,后面的几位分别表示要求更低时延、更高的吞吐量、更高的可靠性、更低的路由代价等。对应位为1即有相应要求,为0则不要求。
总长度:16位(bit),指报文的总长度。注意这里的单位为字节,而不是4字节,所以一个IP报文的的最大长度为65535个字节。
标识(identification):该字段标记当前分片为第几个分片,在数据报重组时很有用。
标志(flag):该字段用于标记该报文是否为分片(有一些可能不需要分片,或不希望分片),后面是否还有分片(是否是最后一个分片)。
片偏移:指当前分片在原数据报(分片前的数据报)中相对于用户数据字段的偏移量,即在原数据报中的相对位置。
生存时间:TTL(Time to Live)。该字段表明当前报文还能生存多久。每经过1ms或者一个网关,TTL的值自动减1,当生存时间为0时,报文将被认为目的主机不可到达而丢弃。使用过Ping命令的用户应该有印象,在windows中输入ping命令,在返回的结果中即有TTL的数值。
协议:该字段指出在上层(网络7层结构或TCP/IP的传输层)使用的协议,可能的协议有UDP、TCP、ICMP、IGMP、IGP等。
首部校验和:用于检验IP报文头部在传播的过程中是否出错,主要校验报文头中是否有某一个或几个bit被污染或修改了。
源IP地址:32位(bit),4个字节,每一个字节为0~255之间的整数,及我们日常见到的IP地址格式。
目的IP地址:32位(bit),4个字节,每一个字节为0~255之间的整数,及我们日常见到的IP地址格式。
由于Delphi里面没有位域这个概念,所以定义结构的时候只能整字节了,挺怀恋C++或者Erlang的,有位域定义出来和使用起来都很方便了
//IP包
TIPHeader = packed record
iph_verlen: byte; // 版本和长度
iph_tos: byte; // 服务类型
iph_length: word; // 总长度,2个无符号字节所以只能65535
iph_id: word; // 标识
iph_offset: word; // 标志和片偏移
iph_ttl: byte; // 生存时间
iph_protocol: byte; // 协议
iph_xsum: word; // 头校验和
iph_src: longword; // 源地址
iph_dest: longword; // 目的地址
end;
这个结构体有什么用呢?其实在嗅探的时候就很有用了.
TCP数据包的头
typedef struct _TCP_HEADER {
USHORT nSourPort ; // 源端口号16bit
USHORT nDestPort ; // 目的端口号16bit
UINT nSequNum ; // 序列号32bit
UINT nAcknowledgeNum ; // 确认号32bit
USHORT nHLenAndFlag ; // 前4位:TCP头长度;中6位:保留;后6位:标志位16bit
USHORT nWindowSize ; // 窗口大小16bit
USHORT nCheckSum ; // 检验和16bit
USHORT nrgentPointer ; // 紧急数据偏移量16bit
} TCP_HEADER, *PTCP_HEADER ;
UDP数据包的头
typedef struct _UDP_HEADER {
USHORT nSourPort ; // 源端口号16bit
USHORT nDestPort ; // 目的端口号16bit
USHORT nLength ; // 数据包长度16bit
USHORT nCheckSum ; // 校验和16bit
} UDP_HEADER, *PUDP_HEADER ;
进入协议栈的过程:(从协议栈出来刚好相反)
ICMP头和报文校验和的计算
TCP/IP 2010-03-30 11:13:51 阅读305 评论0 字号:大中小
订阅
////////////////////////////////定义ICMP包头
typedef struct _ICMP_HEADER {
BYTE bType ; // 类型8bit
BYTE bCode ; // 代码8bit
USHORT nCheckSum ; // 校验和16bit
USHORT nId ; // 标识,本进程ID16bit
USHORT nSequence ; // 序列号16bit
UINT nTimeStamp ; // 可选项,这里为时间,用于计算时间32bit
} ICMP_HEADER, *PICMP_HEADER ;
/////////////////////////////////
发送ICMP报文时,必须由程序自己计算校验和,将它填入ICMP头部对应的域中。校验和的计算方法是:
将数据以字(16位)为单位累加到一个双字中(强转换双字类型),如果数据长度为奇数(奇数个字节),最后一个字节将被扩展到字,累加的结果是一个双字,
最后将这个双字的高16位和低16位相加后取反,便得到了校验和!
// 计算ICMP包校验值
// 参数1:ICMP包缓冲区
// 参数2:ICMP包长度
USHORT GetCheckSum ( LPBYTE lpBuf, DWORD dwSize )
{
DWORD dwCheckSum = 0 ;
USHORT* lpWord = (USHORT*)lpBuf ;
// 累加
while ( dwSize > 1 )
{
dwCheckSum += *lpWord++ ;
dwSize -= 2 ;
}
// 如果长度是奇数
if ( dwSize == 1 )
dwCheckSum += *((LPBYTE)lpWord) ;
// 高16位和低16位相加
dwCheckSum = ( dwCheckSum >> 16 ) + ( dwCheckSum & 0xFFFF ) ;
// 取反
return (USHORT)(~dwCheckSum ) ;
}
分享到:
相关推荐
IP、TCP和UDP协议详解 IP协议是Internet协议栈中的一部分,负责将数据从源主机传输到目的主机。IP协议的基本处理单元是IP数据报,格式见下图:IP数据报=首部+数据。 IP数据报的首部中有固定部分和可变部分。固定...
《TCP/IP详解三宗卷》是一套全面深入探讨TCP/IP协议族的专业书籍,涵盖了网络通信的基础理论和实际应用。这套书由Steven McQuerry撰写,是IT从业者和网络技术爱好者学习TCP/IP技术的重要参考资料。 首先,我们要...
Ethernet(以太网)、IP(互联网协议)、TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中的四大核心协议,它们各自负责不同层面的数据封装与处理。下面将对这四个协议的头部结构进行详细讲解。 1. ...
TCP/IP详解:TCP/IP协议是互联网通信的基础,它定义了网络设备如何进行数据交换和通信的标准。本资源,"TCP/IP详解 卷1协议",是深入理解这一核心技术的宝贵资料,适合网络工程师、程序员以及对网络通信感兴趣的读者...
TCP/IP协议栈是互联网通信的基础,它定义了网络设备如何互相连接、通信以及数据如何传输。TCP(Transmission Control Protocol)负责提供可靠的数据传输服务,而IP(Internet Protocol)则负责数据在网络中的路由。...
在结构方面,它详细解析了各个层次的协议,如传输层的TCP(传输控制协议)和UDP(用户数据报协议),网络层的IP(互联网协议)以及ICMP(因特网控制消息协议)。同时,书中也探讨了如何通过这些协议实现不同网络的...
- **定义**:用户数据报协议(User Datagram Protocol,UDP)是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。与TCP相比,UDP不保证数据包的顺序、可靠性或流量控制。 - **特点**: - **无连接**...
《TCP/IP详解》卷一是由Steven S. McQuerry撰写的一部经典IT技术书籍,它深入浅出地介绍了网络通信的基础知识,特别是TCP/IP协议族的原理与应用。本PPT版是该书内容的提炼,旨在帮助读者快速理解和掌握TCP/IP的核心...
9. 协议(Protocol):标识上层使用的协议,例如 ICMP、IGMP、TCP、UDP 等。 10. 头部校验(Header Checksum):用来检测 IP 头部的正确性。 11. 起源和目标地址(Source and Destination Addresses):标识包的起源...
【网络工程师IP-TCP-UDP-ICMP报头详解】 在计算机网络中,理解网络协议报头的结构对于网络通信的分析和问题排查至关重要。本文将深入解析IP、TCP、UDP和ICMP这四个基本协议的报头结构,以及相关的以太网数据包头...
它包括了传输控制协议(TCP),用户数据报协议(UDP),互联网协议(IP),地址解析协议(ARP),网络控制消息协议(ICMP),以及更多。 2. Internet协议(IP):IP是网络层的核心协议,负责在不同网络中传递数据包...
以上只是TCP/IP详解中的一部分核心概念,实际学习过程中,还需要深入理解每层的详细功能、各协议的工作原理以及它们在实际网络环境中的应用。通过全面的学习和实践,可以更好地掌握TCP/IP协议栈,为网络编程和网络...
TCP/IP协议是互联网通信的基础,它定义了网络设备如何互相连接并交换数据。这个协议族由多个层次组成,包括应用层、传输层、网络层和数据链路层,每个层都负责不同的通信任务。 《TCP/IP协议详解》这套书籍分为三卷...
《TCP/IP详解 卷1:协议》作为基础卷,全面介绍了TCP/IP协议族的基础知识,是网络工程师、系统管理员以及对网络感兴趣的读者不可或缺的参考书籍。通过阅读,读者可以深入理解互联网背后的工作原理,提升网络问题的...
### IP、TCP、UDP 报头结构体分析 #### TCP数据段格式详解 TCP(Transmission Control Protocol)是一种基于连接的、可靠的传输层协议,旨在提供数据传输的完整性、顺序性和可靠性。TCP通过建立连接、数据传输及...
卷一主要讲解TCP/IP的基础知识,包括网络接口层(链路层)、网络层(IP协议)、以及运输层(TCP和UDP)。在这一卷中,读者可以了解到IP地址的结构、子网掩码的运用、ICMP(Internet Control Message Protocol)的...
### TCP/IP详解 #### 1.1 引言 TCP/IP协议族允许来自不同制造商生产的计算机,即使它们运行着截然不同的操作系统,也能实现互相之间的通信。这一特性令人印象深刻,因为TCP/IP的作用早已超越了其最初的设想。它...
**TCP/IP**(Transmission Control Protocol/Internet Protocol)是互联网的核心协议之一,它定义了数据在网络中的传输方式以及路由寻址机制。本章节将从给定文档的部分内容出发,详细解读TCP/IP模型中的关键技术点...
此外,还讨论了IP分片与重组,以及IP服务类型(如TCP/IP的TCP和UDP协议)的区别。 在传输层,TCP(传输控制协议)是重点,书中详细阐述了TCP连接的建立与释放(三次握手和四次挥手)、滑动窗口机制、拥塞控制、流量...