《TCP IP报文讲解.docx》由会员分享,可在线阅读,更多相关《TCP IP报文讲解.docx(7页珍藏版)》请在三一办公上搜索。
1、TCP IP报文讲解TCP/IP协议 学习理解: 一个完整的数据帧: 利用抓包工具,我们可以从网络中随便抓取一个包,比如抓个ICMP包。其结构如下: Frame 3076下是该数据帧里的一些相关信息: 数据帧到达时间 /捕捉到数据帧的时间 ? ? 从抓到第一个包到现在计时 帧序列号: /抓包工具抓到的第几个包 帧长度: /该包自己标记的长度 捕捉到的帧长度: /实际捕捉到的包长 帧是否被标记: /? 帧里包含的协议:eth:ip:icmp:data /包内自上往下封装的协议 下面是数据帧里的结构: 以太网 /协议 目的主机硬件地址: /48bit 被发送端主机硬件地址 MAC 源主机硬件地址:
2、 /48bit 发送端主机硬件地址 MAC 包类型: /16bit (0x0800) 所封装包的类型,只识别最外一层IP协议 IP /协议 版本: /版本号为4,也称作IPv4 首部长度: /首部占32bit数目,字段长4比特,所以其最长为:32/8*15=60字节 服务类型: /8位 优先权子字段 : /3bit优先权子字段 TOS子字段 : /4bit TOS子字段,分别代表:最小时延、最大吞吐量、最高可靠性和最小费用,这里全0表一般服务 未用位: /1bit未用位 总长:16位 /指整个IP数据报的长度,由于该字段长16比特,所以IP数据包最长可达65535字节 标识:16位 /唯一标识
3、主机发送的每一份数据报,通常每发送一份报文它的值就会加1 标志:3位 / 片偏移:13位 / 生存时间:8位 /设置数据报可以经过的最多路由器 内封装协议类型: /8bit (这里是ICMP ,0x01) 所封装的协议 头部检验和:true or false 16位 /根据首部计算的检验和码,结果全1为true,否则false 源IP地址: /发送端主机IP地址 目的IP地址:32位 /接收端主机IP地址 ICMP /协议 类型:8位 代码:8位 /类型和代码决定其报文的类型 如8和0表示请求报文,0和0 表示回应报文 检验和:16位 /作用和算法同IP检验和 标识符:16位 序列号:16位
4、/标识符和序列号由发送端任意选择决定,这些值在应答中将被返回,发送端就可以将应答和请求进行匹配。 数据:范围 0至1472 /发送报文的主要内容 下面背景加黑的部分表示相应的值。 这是一个完整的ICMP数据包,由内到外封装顺序为: ICMPIPETH 当接收端主机收到一个报文后,分用过程则和封装相反:ETHIPICMP ARP报文: 从相关信息中我们可以看到,ARP的封装格式为:ETHARP。 ETH封装: 发送方式为广播方式,即目的硬件地址全1,这是一个询问硬件地址的报文;如果是回应报文,则以单播的方式发送回一个报文。ARP报文中的ETH封装比ICMP多一个9个字节的Trailer,一般规定
5、数据帧最小为60字节,ARP请求或应答都是42字节,所以填充18个全0的字节以满足最小60字节的要求。 帧类型:ARP ARP封装下的信息: 硬件类型: /表示硬件地址的类型,0x0001表示以太网地址 协议类型: /表示要映射的协议地址类型,0x0800表示IP地址 硬件地址长度: /1字节,这里值为6,表示硬件地址长度为6字节 协议地址长度: /1字节,这里值为4 操作字段: /ARP请求:1;ARP应答:2;RARP请求:3;RARP应答4。 发送端硬件地址: 发送端IP地址: 接收端硬件地址: 接收端IP地址: RARP报文: RARP分组格式和ARP基本一致。它们之间主要差别是RAR
6、P请求或应答的帧类型代码为0x8035,RARP请求操作代码为3,应答操作代码为4。 PING程序: 目的:测试另一台主机是否可以到达。 实验1:PING 10.11.1.1 结果输出如下图: 输出第一行是采用默认的32字节的报文PING目的主机的IP地址。通过抓包工具抓包分析,我们可以查到发送的报文是包含32字节数据的长74字节的ICMP请求报文。 从第25行输出和抓到的数据包可以看到:从目的主机10.11.1.1收到:内含32字节数据、长74字节的ICMP回应报文;往返时间都是2毫秒,生存时间TTL为255。 从第7行可以看到:发送4个包,接受到4个包,丢失率0%; 从第9行可以看到:这里
7、最小和最大往返时间都是2毫秒,平均往返时间2毫秒。 实验2:PING一个不存在的主机10.11.1.2 结果输出如下图: 从图中我们可以看,请求时间超时,发送4个包,收到0个回应,丢失率100%。多PING几次,即可确定10.11.1.2和我们的主机是不相连的。 上面是在局域网里面操作的,如果在广域网里操作,结果会如何呢? 实验3:PING 输出结果如下图: 从图中我们可以看出: 第一行DNS自动把域名解析成IP地址;第2、4、5行往返时间明显比实验1要大很多,甚至超时, 以上实验中的一些数值是可以修改的,如传输的数据长度,生存时间等都可以根据需要来修改,但存在一定的范围限制,如:、 输入PI
8、NG i 100 10.11.1.1 /修改TTL值为100; 通过抓包可以看到: 输入PING -i 500 10.11.1.1 /修改TTL值为500; 则在PING命令下显示: PING实现过程: 1、 生成ICMP请求报文。 2、 将ICMP报文、发送端和目的端的主机IP地址封装在IP报文中,并发给ETH协议层。 3、 通过ARP缓存查询目的IP地址相对应的硬件地址。如果不存在,则执行4;如果存在,则执行6。 4、 发送ARP请求报文,以广播方式发送出去,询问对应目的IP地址的硬件地址。 5、 如果接到ARP请求回应,则执行6,否则超时,按异常处理,输出请求超时。 6、 ETH协议层将
9、收到的IP报文、源主机和目的主机的硬件地址。 7、 将封装好的报文通过媒介端口发送出去。 8、 目的主机接收到发来的ICMP请求数据包,采用自上往下的方式分用报文。 9、 ETH协议层查看发来的目的硬件地址是否和本地主机硬件地址相同?相同,则提取IP数据包发送给IP协议层处理;否则丢弃。 10、IP协议层接收后,检查目的IP地址是否和本地IP地址相同?相同,则提取ICMP数据包给ICMP协议层,否则丢弃。 11、ICMP协议层接收处理后,马上构建一个ICMP回应给发送端主机,过程和发送请求一样,只是不需要再回应。 Traceroute 程序: 作用:可以查看IP数据报从一台主机传到另一台主机所
10、经过的路由。 在PING过程中,我们知道采用-r可以记录路由选项。但其受到一些限制,无法通用:1、并不是所有的路由器都支持这个记录路由选项。见实验1; 2、记录路由一般都是单向的选项,会受到一些限制;3、IP首部中留给选项空间有限,不能存放太多的路径。 实验1:PING r 9 10.11.3.36 、PING r 9 10.11.1.1 输出结果: PING r 9 10.11.3.36: PING r 9 10.11.1.1: 由上可见,通过交换机连接的路由是记录的,但网关路由器是不支持这记录路由选项的。 实验2:Tracert 10.11.1.1 输出结果如下图: 实验3:Tracert Traceroute过程: Traceroute发送一份TTL为1的IP数据报给目的主机,处理这份报文的第一个路由器将TTL值减1,丢弃该数据报,并发回一份ICMP超时报文,这样发送端主机就得到路径中的第一个路由地址。然后Traceroute程序再发送一份TTL值为2的IP数据报,这样就可以得到第2个路由地址,依此类推得到后面的路由地址。当目的端主机收到一份TTL为1的报文时,发现端口不可用,即产生一份“端口不可达”错误的ICMP报文告诉发送端主机程序应该结束了,这样即可得到了整个路由过程的路由地址。