tcp/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路由机制分为三个步骤:
查找路由表中和数据报的目标IP地址全然匹配的主机IP地址。假设找到。就是用该路由项,没找到则转步骤2.
查找路由表中和数据报的目标IP地址具有同样网路IP的网络IP地址。假设找到。就使用该路由项(即上面路由表中的第二项)。没找到转步骤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数据报转发的系统(主机或路由器),数据报转发子模块对期望转发恩德数据报运行例如以下操作:
检查数据报头部的TTL值。假设TTL值已经是0,则丢弃该数据报
查看数据报的严格源路由选择选项。假设该选项被设置。则检測数据报的目标地址是否是本机的某个IP地址。
假设不是,则发送一个ICMP源站选路失败报文给发送端。
假设有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器
将TTL值减1
处理IP头部选项
假设有必要。则运行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工作原理及实例具体解释(下)的更多相关文章
- TCP/IP协议族——IP工作原理及实例具体解释(上)
IP协议具体解释 本文主要介绍了IP服务特点,头部结构,IP分片知识,并用tcpdump抓取数据包.来观察IP数据报传送过程中IP的格式,以及分片的过程. IP头部信息:IP头部信息出如今每一个 ...
- TCP/IP协议原理与应用笔记10:TCP/IP协议族
1. 协议族视图如下:(这里我们列举重要的,并不是所有的) (1)网络接入层(数据链路层 和 物理层): 通过接入的物理网络的 功能 和 覆盖范围 进行分析划分为: •LANs :局域网(Local ...
- <TCP/IP原理> (二) OSI模型和TCP/IP协议族
1.OSI参考模型 1)作用 2)各层的名称和功能 2.对分层网络协议体系的理解 1)不同节点:层次组成不同,作用不同 2)横向理解:虚通信.对等实体.协议.PDU 3)纵向理解:封装与解封.服务.接 ...
- iOS的TCP/IP协议族剖析&&Socket
原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有S ...
- 服务器编程入门(1)TCP/IP协议族
问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络 ...
- Linux 高性能服务器编程——TCP/IP协议族
1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输. 常用协议:ARP协议(地址解析协议),RARP协议 ...
- 第一章 了解TCP/IP协议族
第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...
- 深入浅出--iOS的TCP/IP协议族剖析&&Socket
深入浅出--iOS的TCP/IP协议族剖析&&Socket 简介 该篇文章主要回顾--TCP/IP协议族中的TCP/UDP.HTTP:还有Socket.(--该文很干,酝酿了许久! ...
- linux高性能服务器编程 (一) --Tcp/Ip协议族
前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉. ...
随机推荐
- 剪切Postscript图片中的多余边框
最近用plplot画图,其cairo ps库生成的ps图片总是不能合理地剪切掉多余的边框,于是乎自己写了一个小脚本epscrop,用修改ps图的BoundingBox. #!/bin/bash # c ...
- Python使用matplotlib绘制三维曲线
本文主要演示如何使用matplotlib绘制三维图形 代码如下: # -*- coding: UTF-8 -*- import matplotlib as mpl from mpl_toolkits. ...
- 打造你爱不释手的编辑器sublime3
首先去官网下载你的sublime3 让后安装好package control 去package control官网 安装好package control 安装emmet,和格式化工具 接着安装一个好主 ...
- Unity 编辑器扩展 场景视图内控制对象
http://blog.csdn.net/akof1314/article/details/38129031 假设有一个敌人生成器类,其中有个属性range用来表示敌人生成的范围区域大小,那么可以用O ...
- UGUI 实现界面 渐隐渐现 FadeIn/Out 效果
孙广东 2015.7.10 事实上熟悉NGUI的人,应该知道 实现渐隐渐现 FadeIn/Out 效果是非常方便的,由于父对象 的 改变会自己主动影响到子对象. 比方 UIWidget.UIPan ...
- puppeteer 相关知识
page.waitForNavigation: 但我们通过代码执行到页面跳转时,我们需要等待跳转完成再作其他事情.使用page.waitForNavigation会等待跳转完成.(一般作用在点击链接或 ...
- git 命令使用速查手册( 个人版)
1. 克隆远程库 git clone repository_address 通过 git clone 获取的git库只是远程库中的当前工作分支,如果想获取其它分支信息,可参考下面. 2. 查看远程 ...
- Mac和Windows上Android Studio经常使用的快捷键
小编整理了一些Mac和Windows上超有用的Android Studio经常使用的快捷键. Ctrl(Command)+Y 删除行 Ctrl(Command)+Z 倒退 Ctrl(Command)+ ...
- JDK1.9环境变量配置
JAVA_HOME C:\Program Files\Java\jdk-9.0.1 JRE_HOME C:\Program Files\Java\jre-9.0.1 PATH .;%JAVA_HOME ...
- Angular 2 组件之间如何通信?
组件之间的共享可以有好几种方式 http://learnangular2.com/outputs/ 实例参考https://angular.io/docs/ts/latest/cookbook/com ...