IP协议的那些事(总结)

IP协议是TCP协议栈中的核心协议,也是网络编程的基础之一。

网络层概述

IP服务特点:

IP协议为上层协议提供无状态,无连接,不可靠的服务。

  • 无状态:IP通信双方不同步状态传输信息,因此所有IP数据报的发送和接收都是相互独立的,这样也就造成了它无法处理乱序,重复的IP数据报。相对于面向连接而设定的,例如TCP协议,它能够自己处理乱序,重复的报文段。他递交给上层的内容绝对是有序的正确的。但是IP协议的状态也是有优点的,它简单高效,因为我们无需为保证它的状态而分配一些内核数据结构。
  • 无连接:通信双方都不长久的维持对方的任何信息,那么就需要上层协议去指定传输的IP地址。
  • 不可靠服务:不可靠指的是IP协议不能保证IP数据报完整并且准确的到达接收端。因此使用IP的上层协议需要自己做数据确认,超时重传等可靠传输机制。

IPv4头部结构:

图一:

IPv4头部结构包含20个字节。另外最多包含40个选项字节。

  • 4位版本号:指定IP协议的版本
  • 4位头部长度:标识有多少个四字节。
  • 8位服务类型(TOS):包括一个3位的优先权字段(现在已经被忽律),4位TOS字段(最小延时,最大吞吐量,最高可靠性,最小费用),1位保留字段。以上信息决定了IP协议的可弹性。
  • 16位总长度(字节数):整个IP数据报的长度。就是说IP数据报的最大程度就是2^16-1。因为MTU的限制。最大传输不可能达到这个值。

======分片传输实现原理=========

  • 16位标识别:唯一标识主机发送的每一个数据报。初始值有系统随机生成。每发送一个数据报,该值就+1.因此同一个数据报的分片都具有相同的标识值
  • 3位标志:

    (1)第一位是有保留的

    (2)第二位表示禁止分片(如果对这位进行了设置,IP模块将不会对数据报进行分片,所以可以想象一下我们刚才提到的,如果这个数据报的长度超过MTU,这段数据报就会被丢弃,返回ICMP差错报文)

    (3)第三位表示等多分片(除了IP数据报的最后一个分片外,其他分片都设置为1)。

  • 13位偏移:是分片相对原始IP数据报开始处的偏移。

这三个字段协同工作行形成了IP分段的功能。

=======================

  • 8位生存时间(TTL):它是数据报到达目的地前允许经过的路由跳数。在发送过程中,每经过一个路由,该值就减1.当TTL位0时,路由器会丢弃这个数据报,返回ICMP差错报文。它可以防止数据陷入路由循环。
  • 8位协议涌来区分上层协议。ICMP位1,TCP为6,UDP位17
  • 16位头部校验和:它是由发送端进行填充。接收端对其进行CRC校验算法,来检验头信息在传输过程中是否被损坏。
  • 32位原端IP:表示发送端IP
  • 32位目的IP:表示接受端IP
  • IPv4头部可变长的选项部分,最多包含401个字节,可选的IP选项包括:(1)纪录路由,(2)时间戳,(3)松散源路由选择,(4)严格路由选择 (这些的介绍会在以后进行分享)

IP协议是TCP协议栈中的核心协议,也是网络编程的基础之一。

我们接着在IP协议解读(一)继续学习

网络层作用

IP分片:

  • IP数据报的长度超过帧的MTU时,将会被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,并且可能在传输过程中被多次分片。最终会在接收器上被IP模块重新组装。
  • IP协议解读(一)中讲述了16位数据报标识、3位的标识,13位的片偏移给分片和重组提供了足够的信息。一个IP数据报的每个分片都具有自己的头部。他们具有相同的标识值,但具有不同的片偏移。
  • 以太网的MTU位1500字节,因此它能携带的最大字节量位1480字节,因为IP头部包含20个字节。假如我们使用以太网帧传输用IP数据报封装的1481个字节的ICMP数据报。这个时候>1480字节,所以就会出现分片现象

    那么1481个字节的数据+20字节的IP头部=1501字节的IP数据报=IP分片(1500字节)+IP分片(21字节)

    结构如图所示:

从以上的图片我可以分析出来,ICMP头部的8个字节被分配到第一个分片中,其中1472字节的ICMP的数据也被分配到第一个分片中,这样IP头+ICMP头部结构+部分ICMP数据组成了最大的IP分片(1500字节),剩下的一个个字节的ICMP数据被分配到第二个IP分片中(21字节)

下面我们用实例演示:

我们使用ping命令指定每次发送的大小位1473个字节

ping www.baidu.com -s 1473

我们使用tcpdump命令抓取ping过程中的icmp数据包

tcpdump -ntv -i eth0 icmp

===============查看分析抓去结果=====================

结果如图所示:

从图片中我们可以看出,前两个数据报的ip分片id(标识值)都是27300,说明这两个是同一个分片,第一个分片的offset(偏移值)为0,第二个分片的offset(偏移值)为0位1480.根据信息显示,第一个ICMP占1480个字节,第二个长度为21.

IP路由选择机制:

路由选择是IP协议的核心任务,指定了发送数据报到目标路径的途径

  • 当IP模块接受到来自网络驱动程序发来的IP数据报时,首先对头部进行CRC校验,确定这个数据包在传输过程中没有被损坏。
  • 如果发现IP头部信息中带有源站选路选项,那么IP模块调用数据报转发子模块处理这个数据报。
  • 如果这个IP数据报头部结构中目标IP地址是本机的IP地址或是广播地址,就是说明这个数据报是发送给本机的IP模块就必须根据数据报的头部结构协议字段将它发给哪个上层应用。
  • 如果IP模块发现这个数据报不是发送给本机的,同样也掉中转发子模块处理这个数据报,转发子模块首先需要检验这个数据报是否被允许转发。不允许的话这个数据报就会被丢弃。允许的话数据报转发子模块将对这个数据报进行一系列的操作,然后将它交给IP数据报输出子模块。
  • 其实呢,IP数据报应该发送到哪一个吓一跳路由,经过哪个网卡来发送,是计算吓一跳路由这个模块完成的。
  • IP模块实现数据报路由的核心数据结构就是路由表,这个表是按照目的IP进行分类。
  • IP输出队列中是所有等待发出的数据报。
  • 虚线箭头是整个路由表的更新过程

IP路由选择过程:

  • 查找完全匹配的主机地址,如果找到就是用该路由项,如果未找到,进入下一个步骤
  • 查找相同网络ID的网络IP地址,如果找到就是用该路由项,如果未找到,进入下第三个步骤
  • 选择默认路由项,这意味着下一跳的路由地址是网关

IP转发过程:

路由器转发模块的执行过程如下:

  • 检查数据报头部的TTL值(TTL为0丢弃这个数据报)。
  • 查看数据包的严格源路由的选择选项,如果被设置,检测数据报的目的IP地址是否和本机的某个IP地址相同,如果不是,发送一个ICMP差错报文。
  • 给源端发送一个ICMP重定向报文(下一个文章分享)。
  • 将TTL值减1
  • 处理IP头部选项
  • 如果有必要,执行IP分片操作

路由表更新:

路由表必须具备更新,反应网络中的连接的变化,这样IP模块才能准确,高效的转发数据报。

进行实例演示。

Linux下使用明route命令查看当前主机下的路由表信息。

第一行表示子系统下的默认路由

使用route命令添加路由表

删除对应项

删除默认路由项,这样做的后果就是无法访问因特网。

今天我们来介绍网络层中的ICMP协议

ICMP报文格式

图一:

从图片上我们可以分析出,前三位的字段都是固定的,8位类型字段,8位代码字段,16位校验和字段。其他字段因ICMP报文类型不同而不同。8位类型和8位代码一起决定了报文的类型。

ICMP查询格式

ICMP查询报文共有4种

  • 回送请求和回答:由主机和路由器向一个特定的主机和路由器发送询问,收到请求的主机必须给源主机发送回送应答报文,用来测试目标主机是否可达以及了解其他状态
  • 时间戳请求和回答:它允许系统向另一个系统查询当前的时间,该ICMP的好处是他提供了毫秒级的分辨率。
  • 掩码地址请求和回答:主机使用ICMP地址掩码地址请求报文可以向子网掩码服务器得到某个接口的地址掩码。系统广播他的ICMP请求报文。
  • 路由器询问和通过报文:主机使用ICMP路由器询问连接在本网络上的路由器是否正常工作。

ICMP差错报文

ICMP差错报文共有5种:

  • 终点不可达:网络不可达,主机不可达,协议不可达,端口不可达,源路由失败
  • 源站抑制:当路由器或主机因为拥塞丢弃数据包时,就向源站发送源站抑制报文,使源站知道应当将发送数据报的速度放慢。
  • 时间超过:路由器收到生存时间为0的数据报时,除丢弃该数据报外还要向源站发送时间超时报文
  • 参数问题差:当路由器的目的主机收到的数据报首部中的字段不正确的时候,丢弃该数据报,同时向源地址发送ICMP参数问题报文。
  • 重定向报文:路由器将改变路由报文,将发送给主机,让主机知道,下一次的数据报应该发送给另一个路由器。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 00:11:48

IP协议的那些事(总结)的相关文章

从HTTP 2.0想到的关于传输层协议的一些事

0.HTTP协议的历史 我也不知道... 1.关于HTTP 2.0 收到了订阅的邮件,头版是说HTTP 2.0的内容,我本人不是很关注HTTP这一块儿,但是闲得无聊时也会瞟两眼的.HTTP 2.0的最大改进我觉得有两点:第一:新增了帧层帧层的好处在于重新分发流信息,服务器处理顺序可以不再依赖用户提交请求的顺序了.另外就是不必一定用TCP传输HTTP了,实际上规范一开始就是这么说的.第二:HTTP头的内容可以增量交互了很 多的HTTP头里面的信息都是参数的协商,每次都要携带,如key/value的

戏说西游||TCP/IP协议的由来(灵感来自“码农翻身”微信公众号)

引子 话说唐僧师徒四人西行取经,终于来到了西方极乐世界,取得真经,然而如何运回真经成了大问题,故事就这样展开了: 大唐王朝贞观八十一年,某日清晨 "悟空,为师带领你们终于取得真经,可是奈何如何将真经运回东土大唐呢?" "师傅,不用担心,俺老孙在筋斗云的基础上开发出了运输真经的法术--'TCP协议',只要严格学习俺法术的口诀,严格遵守俺定制的规则,只需要不断的往筋斗云上放经文,筋斗云就会自动往返运输真经,俺可保真经运回大唐!" "不愧是悟空,既然如此,悟能,

(转)TCP/IP协议与UDP/IP协议的区别

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议, 也就是说,在收发数据前,必须和对方建立可靠的连接. 一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程: A ---> B //主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话: A <--- B //主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作) //的数据包:“可以

TCP/IP协议-IP协议

A contented mind is a perpetual feast. "知足长乐" 参考资料:TCP/IP入门经典 (第五版) TCP/IP详解 卷一:协议 一.简介 IP协议(Internet协议,网际协议),是TCP/IP协议族中最核心的协议,位于协议栈的网络层 既然位于网络层,所以IP协议最主要的功能就是 提供独立于硬件的逻辑寻址 和 支持网间数据传递的路由选择,我们将在后面的部分介绍这两个功能,下面先来分析一下IP首部 二.IP首部 我们在 TCP/IP协议-入门 中说

IP 协议简介

网络层 -IP 协议属于网络协议栈的网络层.这一层的功能目标是将数据包从网络的一个位置传送到另一个位置,算是处理端到端传输的最底层.传输过程中间会经过许多跳(hop)中间路由器,因此路由算法是其设计的核心任务.(但很可惜不是本篇的核心任务) 隧道 -当两个相同的网络被一个不同的网络隔开时,隧道就是一种跨协议通信的便利方法.即把 A 网络的数据包整个包成一个 B 网络的数据包,然后在 B 网络中传输,到达目的地后再取出来得到一个 A 网络数据包. 这种构建于基础网络上的一个新网络就称为覆盖(ove

与TCP/IP协议的初次见面(一)

引言 最近LZ有了一点时间,于是便拿出TCP/IP的书本开始啃.开始的时候,啃起来枯燥无味,现在好不容易有点开窍,于是赶忙记录一下,生怕自己一转眼就给忘了.不过计算机系统原理就有点可惜了,最近一直没时间看,选来选去,还是觉得TCP更加重要一些,或者说现阶段更加重要一些. 好了,废话不多说,我们开始记录吧. TCP/IP是什么 要讨论tcp/ip,就必须知道它究竟是什么东西.这是开始逐渐深入一个东西的前提,tcp/ip也不例外. LZ用自己的话回答一下这个问题,tcp/ip是什么? 简单的说,tc

TCP/IP 协议工作原理与Linux系统下调优

TCP/IP建立连接的三次握手过程: 建立TCP连接共需要三个packet Client--> syn=1,ack=0,fin=0 -->  Server Client<--  syn=1,ack=1,fin=0 <--  Server Client-->  syn=0,ack=1,fin=0 -->  Server TCP/IP关闭连接的四个过程: 关闭TCP连接需要四个packet: Client-->  FIN  -->  Server Client&

TCP / IP协议 --- 计算机层面

一.概述 1.1 五层模型 互联网的实现,分成好几层.每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持. 用户接触到的,只是最上面的一层,根本没有感觉到下面的层.要理解互联网,必须从最下层开始,自下而上理解每一层的功能. 如何分层有不同的模型,有的模型分七层,有的分四层.我觉得,把互联网分成五层,比较容易解释. 如上图所示,最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做"应用层"(Application Layer),中间的三

TCP/IP协议分析(推荐)

一;前言 学习过TCP/IP协议的人多有一种感觉,这东西太抽象了,没有什么数据实例,看完不久就忘了.本文将介绍一种直观的学习方法,利用协议分析工具学习TCP/IP,在学习的过程中能直观的看到数据的具体传输过程. 为了初学者更容易理解,本文将搭建一个最简单的网络环境,不包含子网. 二.试验环境 1.网络环境  如图1所示 图1 为了表述方便,下文中208号机即指地址为192.168.113.208的计算机,1号机指地址为192.168.113.1的计算机. 2.操作系统 两台机器都为Windows