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个字节

  1. ping www.baidu.com -s 1473

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

  1. 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命令加入路由表

删除相应项

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

IP协议解读(二)的更多相关文章

  1. TCP/IP协议(二)tcp/ip基础知识

    今天凌晨时候看书,突然想到一个问题:怎样做到持续学习?然后得出这样一个结论:放弃不必要的社交,控制欲望,克服懒惰... 然后又有了新的问题:学习效率时高时低,状态不好怎么解决?这也是我最近在思考的问题 ...

  2. TCP/IP协议学习(二) LWIP用户自定义配置文件解析

    LWIP协议支持用户配置,可以通过用户裁剪实现最优化配置,LWIP默认包含opts.h作为系统默认配置,不过通过添加lwipopts.h文件并包含在opts.h头文件之前就可以对lwip进行用户裁剪, ...

  3. TCP/IP协议族(二) HTTP报文头解析

    本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每 ...

  4. TCP/IP协议(二)

    2014-09-04 11:03:27   注:关于seq 和 ack 的理解,seq为发送的字节的第一个序号,一直累加,ack接收字节的最后一个序号+1,建立连接和结束连接时的SYN.FIN标志位占 ...

  5. IP协议解读(三)

    今天我们来介绍网络层中的ICMP协议 ICMP报文格式 图一: 从图片上我们能够分析出.前三位的字段都是固定的.8位类型字段,8位代码字段.16位校验和字段.其它字段因ICMP报文类型不同而不同.8位 ...

  6. OSI模型和TCP/IP协议族(二)

    OSI模型中的各层 物理层 物理层(physical layer)协调通过物理媒体传送比特流时所需要的各种功能.物理层涉及到接口和传输媒体的机械和电器规约.它还定义了这些物理设备即接口为了实现传输必须 ...

  7. 计算机网络通信TCP/IP协议浅析 网络发展简介(二)

    本文对计算机网络通信的原理进行简单的介绍 首先从网络协议分层的概念进行介绍,然后对TCP.IP协议族进行了概念讲解,然后对操作系统关于通信抽象模型进行了简单介绍,最后简单描述了socket   分层的 ...

  8. 二:熟悉 TCP/IP 协议

    一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层计算机网络体系结构分 ...

  9. TCP/IP知识总结(TCP/IP协议族读书笔记二)

    接下来,总结一下网络层的协议,IP,ARP,RARP,ICMP,IGMP.当我们在网络传输的过程中,把分组交付到主机或路由器需要两级地址:物理地址和逻辑地址.而且我们需要能够把物理地址映射成为相应的逻 ...

随机推荐

  1. java 获取计算机内存

    文章来源:https://www.cnblogs.com/hello-tl/p/9341900.html package com.boot.demo.springbootdemo.common.uti ...

  2. 入门人工智能的首选语言为什么会是Python?

    为何人工智能(AI)首选Python?当你读完这篇文章就会明白了.为何人工智能(AI)首选Python?读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python ...

  3. Codeforces Round #439 (Div. 2) B. The Eternal Immortality

    B. The Eternal Immortality 题目链接http://codeforces.com/contest/869/problem/B 解题心得:题意就是给出a,b,问(a!)/(b!) ...

  4. strcat strcpy 源代码,用指针去实现

    15. 指针实现 strcmp函数     •    int newStrcpy(char *p, char *q)     •    {     •        while(*p ==*q) { ...

  5. pycharm中脚本执行的3种模式(unittest框架、pytest框架、普通模式)

    背景知识,某次使用HTMLTestRunner的时候,发现一直都无法导出报告,后来查询资料发现了一些坑,现在整理一下来龙去脉. 一:pycharm默认的是pytest框架去执行unittest框架的测 ...

  6. centos 7 smplayer vlc播放器

    centos7安装多媒体播放器SMPlayer 2017-03-13 21:37:14 分类: LINUX 转自:https://wiki.centos.org/TipsAndTricks/Multi ...

  7. Leetcode 354.俄罗斯套娃信封问题

    俄罗斯套娃信封问题 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计 ...

  8. POJ-2002 Squares,哈希模板+数学公式!

                                                           Squares 题意:二维坐标轴给出n个点求有多少个正方形. 要是平时做比赛的话毫无疑问会 ...

  9. [luoguP2331] [SCOI2005]最大子矩阵(DP)

    传送门 orz不会做... 一个好理解的做法(n^3*k): 分n=1和n=2两种情况考虑. n=1时,预处理出前缀和sum[]. 设f[i][j]为到达第i格,已经放了j个子矩阵的最大和, 那么每次 ...

  10. POJ 1502 MPI Maelstrom【floyd】

    题目大意:求点1到所有点最短路径的最大值 思路:水题,单源最短路,网上解题清一色dijkstra,但是点数小于100显然floyd更简洁嘛 #include<cstdio> #includ ...