2 表示为IGMP协议 6 表示为TCP协议 http://www.paper51.com 17 表示为UDP协议 http://www.paper51.com 10)首部检验和:16位,是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。 内容来自www.paper51.com 11)任选项:是数据报中的一个可变长的可选信息。 内容来自论文无忧网 www.paper51.com 通过以上的网络层分析在协议标识的第10个字节为6时,表示IP包的内容是一个TCPsegment,从而获得网络层TCP 的数据包。 http://www.paper51.com 实现过程中4Bit的IP头的定义: paper51.com
typedef structtag_ip_address copyright paper51.com { 内容来自www.paper51.com u_char byte1; //sizeof(u_char)==1 u_char占一个字节(8位) paper51.com u_char byte2; copyright paper51.com
u_char byte3; 内容来自论文无忧网 www.paper51.com
u_char byte4; http://www.paper51.com }ip_address; copyright paper51.com 实现过程中IP数据报报头的数据结构如下: 内容来自论文无忧网 www.paper51.com //定义IP头 IP数据包=IP头+TCP数据段(或UDP数据段) http://www.paper51.com typedef struct tag_ip_header 内容来自www.paper51.com { 内容来自论文无忧网 www.paper51.com
u_char ver_ihl; // u_char 8位 版本(4位) + 头长(4位) 内容来自www.paper51.com u_char tos;//TOS 服务类型 http://www.paper51.com
u_short tlen;//包总长 u_short占两个字节 http://www.paper51.com u_short identification;//标识 http://www.paper51.com u_short flags_fo;//标志位Flags(3位)+分段偏移(13位) paper51.com u_char ttl;//TTL paper51.com u_char proto;//Protocol http://www.paper51.com u_short crc;//校验和 内容来自论文无忧网 www.paper51.com ip_address saddr;//源地址 paper51.com ip_address daddr;//目的地址 paper51.com
u_int op_pad;//选项+填充字段 u_int占4个字节 32位 paper51.com //接下来是数据段,不属于IP头部 内容来自论文无忧网 www.paper51.com }ip_header; paper51.com ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。 http://www.paper51.com ICMP报文是在IP数据报内部被传输的,如图3-4所示。 copyright paper51.com
copyright paper51.com
图3-4 ICMP封装在IP数据报内部 paper51.com ICMP报文的格式如图3-5所示。 paper51.com
内容来自论文无忧网 www.paper51.com 图3-5 ICMP数据报格式及首部中的各字段首部 http://www.paper51.com
ICMP报文的种类有两种:ICMP差错报文和ICMP询问报文。 内容来自www.paper51.com ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码、检验和,剩下的其他字节则互不相同。 http://www.paper51.com 1)类型:8位,可以有15个不同的值,以描述特定类型的ICMP报文。 paper51.com 2)代码:8位,是为了进一步区分某种类型中的几种不同的情况。 内容来自www.paper51.com 3)检验和:16位,检验和字段覆盖了整个ICMP报文。 内容来自www.paper51.com typedef structtag_icmp_header http://www.paper51.com { paper51.com u_char type;//8位 类型 内容来自www.paper51.com u_char identifer;//8位 代码 http://www.paper51.com u_char sequence;//序列号 8位 内容来自www.paper51.com
u_char chksum;//8位校验和 http://www.paper51.com }icmp_header; paper51.com
3.2.3 传输层 paper51.com 运输层主要是为两台主机上的应用程序提供端到端的通信。在TCP/IP协议中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。 http://www.paper51.com TCP(传输控制协议)是专门设计用于在不可靠的网络上提供可靠的、端到端的字节流通信的协议。一个TCP报文段分为首部和数据两部分,TCP数据报封装成一份IP数据报的格式如图3-6所示。 内容来自论文无忧网 www.paper51.com paper51.com 图3-6 TCP数据报的封装 http://www.paper51.com TCP的全部功能都体现在它首部中各个字段的作用。因此,只有弄清楚TCP首部各字段的作用才能掌握TCP的工作原理。TCP协议的首部字段如图3-7所示。 paper51.com
paper51.com 图3-7 TCP数据报格式及首部中的各字段 内容来自论文无忧网 www.paper51.com TCP报文段首部的前20个字节是固定的,后面有4N字节是根据需要而增加的选项(N必须是整数)。因此TCP首部的最小长度是20字节。 http://www.paper51.com 首部固定部分各字段的意义如下: 内容来自论文无忧网 www.paper51.com 1)源端口和目的端口:各占2个字节。端口是运输层与应用层的服务接口。这两个值加上IP首部中的源端IP地址和目的端的IP地址唯一确定一个TCP连接。 copyright paper51.com
2)序号:32位,标识从TCP 发送端向TCP 接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。序号是32 bit的无符号数,序号到达232-1后又从0开始。 内容来自论文无忧网 www.paper51.com 3)确认号:32位,是期望受到对方的下一个报文段的数据的第一个字节的序号,也就是期望收到的下一个报文段首部的序号字段的值。顺序号标志本分组的编号,确认号指示希望接受的下一个分组编号。 paper51.com
4)首部长度:4位,表示TCP报文段首部的长度。这条信息对于定位确切的数据信息十分重要,因为任选字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部。然而,没有任选字段,正常的长度是20字节。 内容来自www.paper51.com
5)保留:6位,保留为今后使用,但当前应置为0。 paper51.com 6)标志位:在TCP首部中有6个标志比特。它们中的多个可同时被设置为1。具体用法如下: copyright paper51.com URG:紧急指针(urgent pointer)有效; 内容来自论文无忧网 www.paper51.com ACK:确认序号有效; paper51.com PSH:接受方应该尽快将这个报文段交给应用层; copyright paper51.com RST:重建连接; paper51.com SYN:同步序号用来发起一个连接。 内容来自www.paper51.com
FIN:发端完成发送任务。 http://www.paper51.com 7)窗口大小:16位,TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口的大小为字节书,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。 paper51.com
8)检验和:16位,检验和覆盖了整个的TCP报文段。 paper51.com
9)紧急指针:16位,只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 http://www.paper51.com
10)选项:长度可变。最常见的可选字段是最长报文大小,又称为MSS(Maximun Segment Size)。它指明本端所能接收的最大长度的报文段。 内容来自论文无忧网 www.paper51.com 实现过程中TCP数据报报头的数据结构如下: 内容来自www.paper51.com
typedef struct tag_tcp_header 内容来自www.paper51.com { copyright paper51.com u_short sport;//源端口地址 16位 内容来自www.paper51.com u_short dport;//目的端口地址 16位 paper51.com u_int32_t sn;//序列号 32位 内容来自www.paper51.com u_int32_t an;//确认号 32位 内容来自论文无忧网 www.paper51.com
u_int16_t other;// 内容来自www.paper51.com 16位 其中头长度4位+保留6位+UPG1+ACK1+PSH1+RST1+SYN1+FIN1 内容来自论文无忧网 www.paper51.com u_int16_twindow_size;//窗口大小 16位 paper51.com u_int16_t check_sum;//校验和 16位 内容来自www.paper51.com
u_int16_t urgent_pointer;//紧急指针 16位 paper51.com
u_int32_t option;//选项0或32位 copyright paper51.com }tcp_header; 内容来自www.paper51.com UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。 paper51.com UDP数据报封装成一份IP数据报的格式如图3-8所示。 内容来自论文无忧网 www.paper51.com
内容来自论文无忧网 www.paper51.com 图3-8 UDP数据报封装 内容来自论文无忧网 www.paper51.com
UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地。 内容来自论文无忧网 www.paper51.com UDP首部的各字段如图3-9所示。 paper51.com
http://www.paper51.com 图3-9 UDP数据报格式及首部中的各字段 http://www.paper51.com
1)源端口和目的端口号:各16位,表示发送进程和接收进程。 copyright paper51.com 2)UDP长度字段:16位,指的是UDP首部和UDP数据的字节长度。该字段最小值为8 字节。IP数据报长度指的是数据报全长(如图3-9),因此UDP数据报长度是全长减去IP首部的长度。 copyright paper51.com 3)UDP检验和:16位,UDP检验和覆盖UDP首部和UDP数据。 内容来自论文无忧网 www.paper51.com 实现过程中UDP数据报报头的数据结构如下: 内容来自论文无忧网 www.paper51.com typedef structtag_udp_header http://www.paper51.com { 内容来自论文无忧网 www.paper51.com u_short sport;//源端口 16位 内容来自www.paper51.com u_short dport;//目的端口 16位 copyright paper51.com u_short len;//数据报长度 16位 copyright paper51.com u_short crc;//校验和 16位 copyright paper51.com }udp_header; 内容来自www.paper51.com 3.3 小结 内容来自www.paper51.com 本章主要介绍了网络的体系结构及MAC帧头、IP、ICMP、TCP、UDP协议的数据报格式。通过网络的功能分层带来了网络协议的层次结构。数据在传输过程中,就面临着数据的封装。当应用程序用TCP传输数据的时候,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。在本系统网络协议分析中对数据报的分析就是一个解封装的过程。 内容来自www.paper51.com |