首页 > 其他 > 详细

TCP/IP Four Layer Protocol Format Learning(undone)

时间:2014-11-04 18:55:42      阅读:280      评论:0      收藏:0      [点我收藏+]

相关学习资料

tcp-ip详解卷1:协议.pdf

 

目录

0. 引言
1. 应用层
3. 传输层
4. 网络层

 

0. 引言 

协议中的网络字节序问题

在学习协议格式之前,有一点必须明白,否则我们在观察抓包数据的时候可能会产生疑惑:

1. 协议格式中的字段排布,最高位在左边,记为0bit;最低位在右边,记为31 bit。
2. 4个字节的32bit值以下面的次序传输:
    1) 首先是0~7bit
    2) 其次8~15bit
    3) 然后16~23bit
    4) 最后是24~31bit
这种传输次序称作"big endian字节序"
3. 由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作"网络字节序"
4. 以其他形式存储二进制整数的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序

 

1. 应用层

0x1: NTP网络协议

NTP有两种不同类型的报文,一种是时钟同步报文,另一种是控制报文(用于网络管理),NTP基于UDP报文进行传输,使用的UDP端口号为123 

1. 时钟同步报文

bubuko.com,布布扣

1. LI(Leap Indicator)(2 bits) 
    1) 值为"11"时表示告警状态,时钟未被同步
    2) 为其他值时NTP本身不做处理
2. VN(Version Number)(3 bits): 表示NTP的版本号,目前的最新版本为3
3. Mode(3 bits): 表示NTP的工作模式。不同的值所表示的含义分别是:
    1) 0: 未定义
    2) 1: 主动对等体模式
    3) 2: 表示被动对等体模式
    4) 3: 表示客户模式
    5) 4: 表示服务器模式
    6) 5: 表示广播模式或组播模式
    7) 6: 表示此报文为NTP控制报文(MODE_CONTROL)
    8) 7: 预留给内部使用(MODE_PRIVATE)
4. Stratum(8 bits): 系统时钟的层数,取值范围为1~16,它定义了时钟的准确度,这也表明了整个NTP的架构是一种层次型的架构
    1) 层数为1的时钟准确度最高
    2) 准确度从1到16依次递减
    3) 层数为16的时钟处于未同步状态,不能作为参考时钟
5. Poll(8 bits): 轮询时间,即两个连续NTP报文之间的时间间隔
6. Precision(8 bits): 系统时钟的精度 
7. Root Delay(32 bits): 本地到主参考时钟源的往返时间 
8. Root Dispersion(32 bits): 系统时钟相对于主参考时钟的最大误差 
9. Reference Identifier(32 bits): 参考时钟源的标识 
10. Reference Timestamp(64 bits): 系统时钟最后一次被设定或更新的时间 

11. Originate Timestamp(64 bits): NTP请求报文离开发送端时发送端的本地时间  
12. Receive Timestamp(64 bits): NTP请求报文到达接收端时接收端的本地时间 
13. Transmit Timestamp(64 bits): 应答报文离开应答者时应答者的本地时间 
14. Authenticator((optional)96 bits): 验证信息 

Relevant Link:

http://bjtime.cn/info/view.asp?id=270
http://www.rfc-editor.org/rfc/rfc958.txt
http://wenku.baidu.com/view/4a7e73c308a1284ac85043a8.html
http://wiki.wireshark.org/SampleCaptures
http://qgjie456.blog.163.com/blog/static/354513672010821241599/
http://www.cnblogs.com/TianFang/archive/2011/12/20/2294603.html

2. 控制报文

控制报文和时钟同步报文的区别仅仅在于"Mode"字段的区别,

1. 常规NTP时间同步报文
模式1~5 

2. NTP控制报文
模式6,由ntpq使用

3. NTP mode 7 (MODE_PRIVATE)
由ntpdc查询和控制工具使用

对于控制报文来说,"Mode"字段的值为6

Relevant Link:

http://wiki.wireshark.org/NTP
http://wiki.wireshark.org/SampleCaptures

 

3. 传输层

0x1: ICMP Internet控制报文协议

尽管对于ICMP协议属于网络层还是传输层有很多争议,但是从学习协议的严谨性上来说,ICMP应该算是传输层协议,因为ICMP数据报需要被包装在IP数据报的数据部分进行发送,所以ICMP也应该算是IP协议的一个上层协议。

ICMP属于传输层协议。ICMP 的正式规范参见RFC 792 [Posterl 1981b]

bubuko.com,布布扣

和其他大多数协议一样,ICMP有很多种数据报类型,它们的协议格式也不尽相同,我们按照类型的大分类来逐一学习

在ICMP数据报中,头部的类型(8bit)、和代码(8bit)字段决定了这个ICMP数据报的准确类型。类型和代码各占8bit,先决定类型,然后看代码,它们共同决定了这个ICMP数据报的类型

bubuko.com,布布扣

Destination Unreachable Message(目的不可达)

bubuko.com,布布扣

1. 类型
类型码为3
2. 代码
    1) 0: 网络不可达
    2) 1: 主机不可达
    3) 2: 协议不可达
    4) 3: 端口不可达
    5) 4: 需要进行分片但设置了不分片bit
    6) 5: 源站路由失败
    7) 6: 目的网络不认识
    8) 7: 目的主机不认识
    9) 8: 源主机被隔离(作废不用)
    10) 9: 目的网络被强制禁止
    11) 10: 目的主机被强制禁止
    12) 11: 由于服务类型TOS,网络不可达
    13) 12: 由于服务类型TOS,主机不可达
    14) 13: 由于过滤,通信被强制禁止
    15) 14: 主机越权
    16) 15: 优先权中止生效
3. 校验和
4. 4字节的unused字段,置零
5. 原始IP数据报的头部+64bit的数据部分
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节(64bit)。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的
协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来

Time Exceeded Message(超时)

bubuko.com,布布扣

1. 类型
类型码为11
2. 代码
    1) 0: 传输期间生存期为0
    2) 1: 在数据报组装期间生存期为0
3. 校验和
4. 4字节的unused字段,置零
5. 原始IP数据报的头部+64bit的数据部分
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节(64bit)。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的
协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来

Parameter Problem Message(参数错误)

bubuko.com,布布扣

1. 类型
类型码为12
2. 代码
    1) 0: 错误信息的指针
3. 校验和
4. 4字节的unused字段,置零
5. 原始IP数据报的头部+64bit的数据部分
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节(64bit)。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的
协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来

Source Quench Message(源站被抑制)

bubuko.com,布布扣

1. 类型
类型码为4
2. 代码
    1) 0: 源站被抑制
3. 校验和
4. 4字节的unused字段,置零
5. 原始IP数据报的头部+64bit的数据部分
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节(64bit)。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的
协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来

Redirect Message(重定向)

bubuko.com,布布扣

1. 类型
类型码为5
2. 代码
    1) 0: 对网络重定向
    2) 1: 对主机重定向
    3) 2: 对服务类型和网络重定向
    4) 3: 对服务类型和主机重定向
3. 校验和
4. Gateway Internet Address 
指明重定向后的IP地址
5. 原始IP数据报的头部+64bit的数据部分
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节(64bit)。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的
协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来

对于ICMP Redirect重定向数据报,我们需要注意的,攻击者可以针对指定主机或者路由器发送ICMP Redirect数据报,来强制更新目标主机或路由器的"网关设置",从而劫持目标主机的原始流量。

http://insecure.org/sploits/arp.games.html

Echo or Echo Reply Message(ping)

bubuko.com,布布扣

1. 类型
    1) 0: 回显应答
    2) 8: 回显请求
2. 代码
0
3. 校验和
5. Identifier、Sequence Number   
发送方用它们对每次的echo和reply进行匹配
6. 数据

Timestamp or Timestamp Reply Message(ICMP时间戳请求与应答)

bubuko.com,布布扣

ICMP时间戳请求允许系统向另一个系统查询当前的时间。返回的建议值是自午夜开始计算的毫秒数,协调的统一时间(Coordinated Universal Time, UTC)

1. 类型
    1) 13: 发送时间戳
    2) 14: 返回时间戳
2. 代码
0
3. 校验和
5. Identifier、Sequence Number   
发送方用它们对每次的echo和reply进行匹配
6. Originate Timestamp
请求端填写发起时间戳,然后发送报文
7. Receive Timestamp
应答系统收到请求报文时填写接收时间戳
8. Transmit Timestamp    
在
发送应答时填写发送时间戳

 

4. 网络层

本章节介绍网络层的各种协议、以及格式规范。

(这里给一张网络层总体架构图,尽量包含完整的网络层协议)

0x1: IP 网际协议

IP是TCP/IP协议族中最为核心的协议。RFC 791[Postel 1981a]是IP的正式规范文件: http://www.rfc-editor.org/rfc/rfc791.txt

bubuko.com,布布扣

1. 版本(4bit)
    1) 版本号4: IPv4
    2) 版本号6: IPv6
2. 首部长度(4bit)
首部占32bit(4字节)字的数目(所以首部长度为这个字段值*4),包括任何选项。普通IP数据报(没有任何选择项)字段的值是5(20字节)
3. 服务类型(TOS)(8bit)
    1) 优先权子字段(3bit): 现在已被忽略
    2) TOS子字段(4bit)
        2.1)  Bit 0: 最小时延
        2.2)  Bit 1: 最大吞吐量
        2.3)  Bit 2: 最高可靠性
        2.4)  Bit 3: 最小费用
    3) 未用置0字段(1bit)
在单个IP数据报中,TOS子字段4bit中只能置其中1 bit。如果所有4bit均为0,那么就意味着是一般服务。RFC 1340、RFC 1349详细地描述了TOS的特性:
    1) Domain Name Service
        1.1) UDP Query: 1000: 最小时延
        1.2) TCP Query: 0000: 一般服务
        1.3) Zone Transfer: 0100: 最大吞吐量 
        2) NNTP: 0001: 最小费用
    3) ICMP
        3.1) Errors: 0000: 一般服务
        3.2) Requests: 0000: 一般服务  
        3.3) Responses: 0000: 一般服务  
    4) Any IGP: 0010: 最高可靠性 
    5) EGP: 0000: 一般服务  
    6) TELNET: 1000: 最小时延
    Telnet要求最小的传输时延,因为人们主要用它们来传输少量的交互数据
    7) FTP 
        7.1) Control: 1000: 最小时延
        7.2) Data: 0100: 最大吞吐量 
    FTP文件传输则要求有最大的吞吐量
        8) TFTP: 0100: 最大吞吐量 
    9) SMTP 
        9.1) Command phase: 1000: 最小时延
        9.2) DATA phase: 0100: 最大吞吐量  
    10) BOOTP: 0000: 一般服务 
对于IP数据报中的TOS字段,我们需要明白的是: 现在大多数的TCP/IP实现都不支持TOS特性,但是在很多Unix系统上对它提供了设置。另外,路由协议如OSPF和IS-IS都能根据这些字段的值进
行路由决策。所以,研究TOS还是很有现实意义的
4. 总长度(16bit) 总长度字段是指整个IP数据报的长度(以字节为单位)。利用总长度字段-首部长度字段,就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535
字节。当数据报被分片时,该字段的值也随着变化(关于数据报分片,我们之后会详细学习) 总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46字节,但是I P数据可能会更短(IP的头部只有20字节,数据部
分可以为0)。如果没有总长度字段,那么IP层就不知道46字节中有多少是IP数据报的内容,有多少是padding的内容
5. 标识(16bit) 标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。在分片和重组时会使用到 6. 标志(3bit) 1) Bit 0: 保留,必须置为0 2) Bit 1: 2.1) 0: 可以分组 2.2) 1: 不可以分组 3) Bit 2: 3.1) 0: 已经是最后一个分组了 3.2) 1: 还有更多分组 7. 片偏移(13bit) 当前分片在完整数据报中的偏移 8. 生存时间TTL(8bit) TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就
减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。
9. 协议(8bit) 该IP数据包携带的的上层协议,这个字段的作用为了实现"分用",所谓分用,即当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每
层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)
10. 首部检验和(16bit) 首部检验和字段是根据"IP首部"计算的检验和码(注意,只是首部),它不对首部后面的数据进行计算。 为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份IP数
据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果
应该为全1。如果结果不是全1(即检验和错误),那么I P就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传
11. 源IP地址(32bit) 每一份IP数据报都包含源IP地址和目的I P地址,它们都是32 bit的值 12. 目的IP地址(32bit) 每一份IP数据报都包含源IP地址和目的I P地址,它们都是32 bit的值 13. 选项OPTION 选项数据报中的一个"可变长""可选信息"1) 安全和处理限制(用于军事领域,详细内容参见RFC 1108[Kent 1991]) 2) 记录路径(让每个路由器都记下它的IP地址) 3) 时间戳(让每个路由器都记下它的IP地址和时间) 4) 宽松的源站选路(loose source route)(为数据报指定一系列必须经过的IP地址) http://en.wikipedia.org/wiki/Loose_Source_Routing 5) 严格的源站选路(strict source route)(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)
   可以使用: loose: ping –j <hosts>、strict: ping –k <hosts>进行测试
14. Padding填充: 选项字段一直都是以32 bit作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终是32bit的整数倍(这是首部长度字段所要求的,因为它是以2为基底的) 14. 数据 IP数据包携带的上层数据

 

Copyright (c) 2014 LittleHann All rights reserved

 

 

TCP/IP Four Layer Protocol Format Learning(undone)

原文:http://www.cnblogs.com/LittleHann/p/3837839.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!