tco/iP协议族——IP工作原理及实例详解(下)



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命令可以修改路由表,举例如下:

[email protected]:~$ sudo route add -host 192.168.73.130dev eth0

[email protected]:~$ sudo route del -net 192.168.73.0netmask 255.255.255.0

[email protected]:~$ sudo route del default

[email protected]:~$ sudo route add default gw192.168.73.130

第一行添加主机192.168.73.130对应的路由项,这样设置之后,所有从chen123发送li123的数据报将通过网卡eth0直接发送到目标机器的接收网卡。第二行表示删除网络192.168.70.0对应的路由项。第三行删除默认路由项,这样做的后果是无法访问因特网。第四行表示重新设置默认路由项,不过这次其网关li123。经过修改,其输出如下

[email protected]:~$ 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身份执行

[email protected]:/home/li123# sudoecho 1 > /proc/sys/net/ipv4/ip_forward

在上面命令执行前,在chen123上执行如下命令

[email protected]:/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分片操作

重定向

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高性能服务器编程

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

tco/iP协议族——IP工作原理及实例详解(下)

时间: 2024-08-09 06:35:09

tco/iP协议族——IP工作原理及实例详解(下)的相关文章

TCP/IP协议族——ARP、DNS工作原理及实例详解

 测试网络: 通过VMware创建了两个虚拟机,并利用桥接方式联网以此模拟两台主机连接一台路由器的情况.测试网络图如下: ARP协议工作原理 ARP协议能实现任意网络地址到任意物理地址的转换,这里仅讨论IP地址到以太网地址(MAC地址)的转换.其工作原理是:主机向自己所在网络广播一个ARP请求,该请求包含目标机器的网络地址.此网络上的其他机器都将接收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址. 以太网ARP请求/应答报文 以太网ARP请求/应答报文格式如下

TCP/IP协议族——IP工作原理及实例详解(上)

 IP协议详解 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址.目的端IP地址,知道IP分片和重组. IP数据报的路由和转发:IP数据报的路由和转发发生在出目标机器之外的所有主机和路由器上.他们决定数据报是否应该转发以及如何转发. IP服务的特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的

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

?? IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个IP数据报中,用于指定IP通信的源端IP地址.目的端IP地址,指导IP分片和重组. IP数据报的路由和转发:IP数据报的路由和转发发生在出目标机器之外的全部主机和路由器上.他们决定数据报是否应该转发以及怎样转发. IP服务的特点 IP协议是TCP/IP协议族的动力.它为上层协议提供无状态.无连接.不

光耦继电器工作原理与参数详解

光耦继电器(Optronics Relay)属于固态继电器,一般电磁继电器靠电流通过线圈使铁芯变成有磁性的磁铁吸合衔铁,从而使相关的触点动作控制负载的通断,而光耦继电器没有触点,其工作原理与光耦有点类似,基本结构如下图的所示: 发光二极管用来向光电元件放射光线,光电元件接受光线并控制输出场效应管导通或截止.光耦继电器还有另一种可控硅整流管(SCR)输出,它的负载电流比场效应管更大,后者可达到数安培,而前者可达到几十安培. 相对于电磁继电器,光耦继电器由于没有触点引起的磨损,使用寿命是无限的,同时

ansible工作原理以及使用详解

内容: 1.ansible的作用以及工作结构 2.ansible的安装以及使用 3.ansible的playbook使用 一.ansible的作用以及工作结构 1.ansible简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,

ftp服务工作原理及配置详解终极篇

VSFTPD使用指南final篇 基本配置 1. 匿名服务器的连接(独立的服务器)在/etc/vsftpd.conf(或在/etc/vsftpd/vsftpd.conf)配置文件中添加如下几项:Anonymous_enable=yes            (允许匿名登陆)Dirmessage_enable=yes             (切换目录时,显示目录下.message的内容)Local_umask=022                      (FTP上本地的文件权限,默认是07

Nginx的工作原理和配置详解

一.Nginx简介 Nginx (pronounced engine-x) is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. Igor Sysoev started development of Nginx in 2002, with the first public release in 2004. Nginx now hos

Varnish工作原理及配置详解

1.基本概念 在当前主流的Web架构中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server.严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器.同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在

jsonp原理和实例详解

1.一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面.动态网页.web服务.WCF,只要是跨域请求,一律不准:2.不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如<script>.<img>.<iframe>):3.于是可以判断,当前阶段如果想通过纯web端(ActiveX控件.服务端代理.属于未来的HTML5之Websoc