IP协议具体解释

上一篇文章文章主要介绍了IP服务的特点,IPv4头部结构IP分片。并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程。本文主要介绍IP路由,IP转发,重定向和IPv6头部结构。

IP路由

IP协议的一个核心任务是数据报的路由,即决定发送数据报到目标机器的路径。为了理解IP路由过程。我们先简要分析IP模块的基本流程。

IP模块工作流程

从右往左分析上图。它首先对该数据报的头部做CRC校验,确认无误之后就分析其头部的详细信息。

假设该IP数据报的头部设置了源站选路选项,则IP模块调用数据报来转发子模块来处理该数据包。假设该IP数据报的头部目标IP地址是本地的某个IP地址,或者是广播地址,即该数据是发送给本机的,则IP模块就依据数据报头部中的协议字段来决定将它派发给哪个上层应用(分用)。假设IP模块发现这个数据报不是发送给本机的,则也调用数据报转发子模块来处理该数据报。

数据报转发子模块将首先检測系统是否同意转发。假设不同意,IP模块就将数据报丢弃。

假设同意,数据报转发子模块将对该数据报运行一些操作,然后将它交给IP数据报输出子模块。

IP数据报应该发送至哪一下一跳路由,以及经过哪个网卡来发送,就是IP路由过程,即图中“计算下一跳路由”子模块。

IP模块实现数据报路由的核心数据结构是路由表。

这个表依照数据报的目标IP地址分类,同一类型的IP数据报将被发往同样的下一跳路由器。

IP输出队列中存放的是全部等待发送的IP数据报。当中除了须要转发的IP数据报之外,还包含封装了本机上层数据(ICMP报文,TCP报文和UDP报文)的IP数据报。

图中的虚线箭头显示了路由表更新的过程。

这一过程是指通过路由协议或者route命令调整路由表。使之更新最新的网络拓扑结构,成为IP路由策略。

路由机制

我们能够使用route命令或netstat命令查看路由表。在chen123上运行route命令,输出内容例如以下:

Kernel IP routing table

Destination    Gateway        Genmask        Flags Metric Ref   Use Iface

default        192.168.73.2   0.0.0.0        UG   0     0       0
eth0

192.168.73.0   *              255.255.255.0  U    1     0       0
eth0

该路由表包括两项。每一项都包括8个字段。

第一项的目标地址是default,即所谓的默认路由项。该项包括一个“G”标志,说明路由下一跳目标是网管,其地址是192.168.73.2。还有一个路由项的目标地址是192.168.73.0,它指的是本地局域网。

该路游项的网管地址为*,说明不须要路由中转。能够直接发送给目标机器。

IP路由机制分为三个步骤:

  1. 查找路由表中和数据报的目标IP地址全然匹配的主机IP地址。假设找到。就是用该路由项,没找到则转步骤2.

  2. 查找路由表中和数据报的目标IP地址具有同样网路IP的网络IP地址。假设找到。就使用该路由项(即上面路由表中的第二项)。没找到转步骤3.

  3. 选择默认路由选项。这通常意味着数据报的下一跳路由是网关。

路由表更新

route命令能够改动路由表。举比例如以下:

chen123@ubuntu:~$ sudo route add -host 192.168.73.130dev eth0

chen123@ubuntu:~$ sudo route del -net 192.168.73.0netmask 255.255.255.0

chen123@ubuntu:~$ sudo route del default

chen123@ubuntu:~$ sudo route add default gw192.168.73.130

第一行加入主机192.168.73.130相应的路由项,这样设置之后,全部从chen123发送li123的数据报将通过网卡eth0直接发送到目标机器的接收网卡。第二行表示删除网络192.168.70.0相应的路由项。第三行删除默认路由项,这样做的后果是无法訪问因特网。

第四行表示又一次设置默认路由项。只是这次其网关li123。

经过改动,其输出例如以下

chen123@ubuntu:~$ route

Kernel IP routingtable

Destination    Gateway        Genmask      Flags Metric Ref      UseIface

default        192.168.73.130  0.0.0.0         UG   0     0       0
eth0

192.168.73.130 *              255.255.255.255 UH   0     0       0 eth0

这个路由表中,第一个路由项是主机路由项,所以他被设置了“H”标志。

通过route或其它工具手动改动路由表是静态的路由更改方式。对于大型的路由器,通常通过BGP、RIP、OSPF等协议来发现路径,并更新自己的路由表,这样的方式是动态的。自己主动的。

IP转发

主机一般仅仅发送和接收数据报。这是由于主机/proc/sys/net/ipv4/ip_forward内核參数默认被设置为0,我们能够通过改动它来使主机有数据转发功能。举比例如以下:

在li123上以root身份运行

root@ubuntu:/home/li123# sudoecho 1 > /proc/sys/net/ipv4/ip_forward

在上面命令运行前,在chen123上运行例如以下命令

root@ubuntu:/home/chen123# pingwww.baidu.com

输出

ping: unknownhostwww.baidu.com

改动ip_forward后,结果输出

PING www.a.shifen.com (115.239.211.110) 56(84) bytesof data.

From 192.168.73.130: icmp_seq=1 Redirect Host(Newnexthop: 192.168.73.130)

64 bytes from 192.168.73.130: icmp_seq=1 ttl=128time=12.4 ms

64 bytes from 192.168.73.130: icmp_seq=2 ttl=128time=21.7 ms

64 bytes from 192.168.73.130: icmp_seq=3 ttl=128time=23.7 ms对于IP数据报转发的系统(主机或路由器),数据报转发子模块对期望转发恩德数据报运行例如以下操作:

  1. 检查数据报头部的TTL值。假设TTL值已经是0,则丢弃该数据报

  2. 查看数据报的严格源路由选择选项。假设该选项被设置。则检測数据报的目标地址是否是本机的某个IP地址。

    假设不是,则发送一个ICMP源站选路失败报文给发送端。

  3. 假设有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器

  4. 将TTL值减1

  5. 处理IP头部选项

  6. 假设有必要。则运行IP分片操作

重定向

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2Fsa2Vya2Fscg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">

ICMP重定向报文的数据部分含义非常明白,它给接收方提供了例如以下两个信息:

1.引起重定向的IP数据报的源端IP地址

2.应发使用的路由器的IP地址

接收主机依据这两个信息就能够判定引起重定向的IP数据报应该使用哪个路由器来转发。而且以此更新路由表。

/proc/sys/net/ipv4/conf/all/accept_redirects内核參数指定是否同意发送ICMP重定向报文,而/proc/sys/net/ipv4/conf/all/send_redirects内核參数指定是否同意接收ICMP重定向报文。

IPv6头部结构

IPv6用128位来表示IP地址,是的IP地址总量达到了2的128次方个。IPv6地址用十六进制字符串表示。如FE80:0000:0000:0000:1234:5678:0000:0012

參考Linux高性能server编程

转载请注明出处,谢谢~~

tcp/iP协议族——IP工作原理及实例具体解释(下)的更多相关文章

  1. TCP/IP协议族——IP工作原理及实例具体解释(上)

     IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...

  2. TCP/IP协议原理与应用笔记10:TCP/IP协议族

    1. 协议族视图如下:(这里我们列举重要的,并不是所有的) (1)网络接入层(数据链路层 和 物理层): 通过接入的物理网络的 功能 和 覆盖范围 进行分析划分为: •LANs :局域网(Local ...

  3. <TCP/IP原理> (二) OSI模型和TCP/IP协议族

    1.OSI参考模型 1)作用 2)各层的名称和功能 2.对分层网络协议体系的理解 1)不同节点:层次组成不同,作用不同 2)横向理解:虚通信.对等实体.协议.PDU 3)纵向理解:封装与解封.服务.接 ...

  4. iOS的TCP/IP协议族剖析&&Socket

    原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...

  5. 服务器编程入门(1)TCP/IP协议族

    问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络 ...

  6. Linux 高性能服务器编程——TCP/IP协议族

    1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输.     常用协议:ARP协议(地址解析协议),RARP协议 ...

  7. 第一章 了解TCP/IP协议族

    第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...

  8. 深入浅出--iOS的TCP/IP协议族剖析&&Socket

    深入浅出--iOS的TCP/IP协议族剖析&&Socket   简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久! ...

  9. linux高性能服务器编程 (一) --Tcp/Ip协议族

    前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉. ...

随机推荐

  1. Solr学习、安装与Quick Start

    之前用Lucene进行了一些简单的例子,现在安装Solr学习一下. 在mac下,貌似可以直接brew install solr来进行安装.尝试一下. 貌似安装成功了: ==> Summary

  2. java源码阅读Hashtable

    1类签名与注释 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, C ...

  3. Hive中日期函数总结

    --Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...

  4. Spark Streaming on Kafka解析和安装实战

    本课分2部分讲解: 第一部分,讲解Kafka的概念.架构和用例场景: 第二部分,讲解Kafka的安装和实战. 由于时间关系,今天的课程只讲到如何用官网的例子验证Kafka的安装是否成功.后续课程会接着 ...

  5. Java 关于容器集合等数据结构详情图解,一目了然

    建议把图片下载下来保存之,网页展示不开... watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3NtX3F6/font/5a6L5L2T/fontsize/ ...

  6. zoj 1100 - Mondriaan&#39;s Dream

    题目:在m*n的地板上铺上同样的1*2的地板砖,问有多少种铺法. 分析:dp,组合,计数.经典dp问题,状态压缩. 状态:设f(i,j)为前i-1行铺满,第i行铺的状态的位表示为j时的铺砖种类数: 转 ...

  7. 关于 -webkit-line-clamp 详解

    最近需要做个商品列表,在手机屏幕不太一样的市场里,如何做到列表中刚刚好显示2行,偶然间发现淘宝的手机版有用到-webkit-line-clamp来实现这种效果 限制在一个块元素显示的文本的行数. -w ...

  8. 解决Odoo访问fonts.googleapis.com导致速度慢的问题

    Odoo中有些css文件引用了谷歌字体,但因为谷歌服务器被墙,导致部分页面加载受影响. 解决方法如下: 360网站卫士常用前端公共库CDN服务把谷歌字体库都存到它的CDN上了,因此我们只需把样式表中谷 ...

  9. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  10. scrollTop()--返回或设置匹配元素的滚动条的垂直位置

    scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置. scroll top offset 指的是滚动条相对于其顶部的偏移. 如果该方法未设置参数,则返回以像素计的相对滚动条顶部的偏移. ...