Internetworking
1 Introduction
所谓的InternetWorking就是将很多网络连接起来,那么在这种连接的网络下我们该如何传送封包呢?
2 IP and Routers
1 IP Datagram Header Format
IP Address:目前IP地址均是32个bit,称为IPV4。未来会使用IPV6,128个bit。
Identification:Router本身将封包收下来,经过查表后,会将封包从某一个网络或者说port转发出去,但是Router周围的网络是不同的(例如从Ethernet丢到WIFI,或者从WIFI丢到Ethernet),注意每一个网络都有一个很重要的特性称为MTU(Maximal Transmission Unit),MTU规定了在这个网络上传输的封包的大小上限。如果Router收进来的封包太大,并且要进到MTU比较小的网络中时,那么,不可避免的要将封包进行切割,一个封包可能会被切割成好多个封包。封包经过切割之后,最终仍然要将其组合起来,那么这些经过切割的小片段最终进行组合的时候,怎么知道哪些小片段是经同一个封包切割出来的呢?这就是Identification的作用,Id相同则代表这些小片段原来隶属于同一个datagram。
Fragment Offset:datagram经IP(Internet Protocal)传送,只是best effort,因此datagram可能会不见,可能会out of order。因此,将datagram切割成小片段丢到网络中后,最终目的主机收到时,顺序就不见得一致。我们只知道收到的这几个片段是属于同一个IP Address的,而它们的位置(哪个在第一个?哪个在第二个?) 需要Fragment offset来确定,offset即为偏移的意思,记录了每一个小片段相对于Data中开始位置的偏移量。
Protocal:在网络的7层架构中,IP在第三层,而Protocal字段标记了上一层的Protocal是什么,是TCP?是UDP?
Time to Live:封包在Internet上可以存活的时间,设置该时间,避免在已经迷航的封包在Internet上绕了很久还是绕不出去。Router本身在帮助我们转送封包时,会根据网络的状态,随时调整路线,可能存在一个封包经由一个路由器转送出去后,之后又绕回来的情况,封包可能会发生迷路,被不断的转来转去,但是始终绕不出去。遇到这种情况该怎么办?我们不可能让此类封包永久的留存,以防这样的封包越来越多,最终将我们的Internet塞爆掉。假设将Time to Live的值设为128,那么每经过Router的一次转送,这个值就会减1,128就代表经过128个Router之后这个值就会减为0,减为0之后,Router就会将该封包丢掉。
Flags
DF:可以设置datagram在传送过程中不允许被切割。如果datagram要从一个Port送出去,可是这个datagram太大,而且又被告知不允许被切割,那怎么办?只有两条路,一是走另外一条路,二,如果找不到一条可以使datagram经过的网络,那么只能将该datagram丢掉。
MF:目的主机收到小片段后,如果标记为More Fragment,表示后面还有小片段。
Total length:封包的大小。
Header Checksum:header的范围如下图,红线圈起来的部分。
将header的内容做一次检查,避免出错,因为要做Routing。Router收到封包之后,会根据Destination IP Address做检查,避免出错,走错路。因此,header有错误,封包仍然需要丢掉。
version:标记IP的版本。现在全世界最流行的IP版本是第4版。
Type of Service:指出这个封包本身到底应该得到什么样的服务。来看下图:
Type of Service 本身是一个8个bit的栏位。
Precedence:重要性的意思。是一般data的封包?还是网络的控制封包?将封包本身的重要性做了一个设定。
Delay:服务的品质。这个封包传送是正常的延迟还是低延迟。IP封包进到Router之后,由于Router同时要处理的封包的量非常的大(可能是一秒钟几百万甚至几千万),即使经过查表后,确定从某个Port送出去,这个Port处理的封包量仍然很大,也需要Queue起来,一旦Queue起来,就会造成Delay,那么如果是Low Delay的封包,那么在Queue中可能会排在靠前的位置(可以说是有高优先权的意思)。
Throughput:High Throughput 往往与 Low Delay相对应。
Reliability:Router可以先丢掉Normal Reliability的封包。
2 IP Addresses
IP地址总共32位,因此有2^32个IP地址,大约40亿个。因为IP地址在分配的时候,网络有大有小,因此分成了3类:
Class A type:只有7个bit来代表Network,因此全球总共只有2^7 = 128种A类网络,那么一个A类网络有多大呢?2^24个(大型网络)。
Class B type:用14个bit来代表Network,全球共有2^14种B类网络,每个B类网络可以有2^16个Host(中型网络)。
Class C type:用21个bit来代表Network,全球共有2^21种C类网络,每个C类网络有2^8个Host(小型网络)。
3 How datagrams are delivered in an Internet ?
Router在处理封包时,到底封包走哪一条路径,是会根据网络状态实时变化的。Router与Router之间会定时或者不定时的交换网络的状况,因此Router的Forwarding Table会随时更新。同样的Source送到同样的Destination,由于Forwarding Table会变化,因此封包走的路径会不一样。
封包在传送的过程中可能会被切割,封包组合的工作将由Destination来做。
如果封包在传输过程中lost了(可能由于网络拥塞),那么Router会发一个message,告诉Source封包被丢弃的原因,但是Source不会重传。
Router本身在处理封包时,内部有两个重要的Table,一是Routing Table(也叫做Forwarding Table,上图上方中间靠左的Table),二是IP-MAC Table,是IP地址与MAC地址的对照表(上图上方中间靠右的Table)。
在上图中,中间的Router连接了3个网络,左边是LAN 1,右边是LAN 2,下方是LAN n。LAN 1有2个Station,一个是A,一个是HOST X,LAN 2也有2个Station,一个是B,一个是HOST Y。左下方的Router连接了LAN 1和LAN m。其中中间的Router接LAN 1的IP地址为140.114.77.65,接LAN 2的IP地址为140.114.78.66。
如果B要将一个封包丢给Y(注意,B和Y同时连接在LAN 2),封包该如何准备呢?首先,IP的datagram中,Source IP地址即为B的IP地址,Destination IP地址为Y的IP地址,因为B和Y在同一个网络上,因此传送该封包不用经过Router,直接传送给Y的MAC。如下图:
如果B要将一个封包丢给A,封包该如何准备?由于B跟A在不同网络中,因此传送封包必须经过Router。Source IP地址为B的IP地址,Destination IP地址为A的IP地址。这个封包是哪一个网卡送的呢?显然是MAC(B)。由于B和A不再同一网络,传送封包必须经过Router,因此Destina MAC地址填Router的网卡位置MAC(R)。如下图:
当B将这个封包丢到网络中后,Router就会收这个封包,因为填写了Router的MAC地址。Router将这个封包收起来后,接下来要做的事情是查表。由于目的IP是A的IP地址——140.114.77.60,在Routing Table中发现77这个网段是与Router直接相连的,因此可以直接送给A,但是要送给A,必须有A的MAC地址,这可以通过查找IP-MAC Table。Router将封包送给A,如下图:
两个例子总结如下:
如果两个Host在同一个网络,那么不用经过Router,就可以将封包直接送给目的地,否则要先丢给Router,再由Router转送,由最后一个Router丢给Destination。
4 example
再来看以下一个例子:
上图有4个网络:10.0.0.0、20.0.0.0、30.0.0.0以及40.0.0.0,由F、G、H三个Router连接。Routing Table针对G。
如果G要送封包到20.0.0.0,经查询为直接相连,说明20.0.0.0与Router G直接相连,那么Router G可以将封包直接送达(送到20.0.0.0这个网段上的Host)。同理,30.0.0.0也与Router G直接相连。
如果我们收到一个封包,其目的地是10.0.0.0这个网段,经查表为20.0.0.5,非直接相连,即需要丢给下一个Router,Router相应Port的IP地址为20.0.0.5。注意,并非一个Router一个IP地址,是Router的每一个Port对应一个IP地址。IP Address不是绑定电脑,是绑定Port。每一个Port都会有一个IP Address。例子中,Router F连接两个网络,左边Port的IP Address为10.0.0.5,右边Port的IP Address为20.0.0.5。
如果我们收到一个封包,其目的地是40.0.0.0这个网段,经查表为30.0.0.7,非直接相连,即需要丢给下一个Router,Router相应Port的IP地址为30.0.0.7。
那么怎么产生这样的Routing Table呢?Router之间平常会通过Routing Protocol进行信息交换。经过这样的交换,Router G就知道左边有一个F,右边有一个H…当有了Routing Table之后,封包进来就查表,如果直接相连,就直接送给Destination,如果不是直接相连,就送给Router。但是无论是送给目的Host,还是送给Router,都需要知道对方的MAC Address,因此Router本身还需要查一个表,就是IP Address与MAC Address的对照表。
5 小结
forwarding table maps network number into next hop:Forwarding Table即Routing Table,会告诉我们下一个网段或者说Router在哪里。
each host has a default router:每台Host必须设定一个default router,因此我们在操作笔电时,必须进入电脑,设定default router。通信的对象如果与我们在不同的网段,那么我们必须将封包丢给default router,从而丢给下一个Router。
3 IP Subnetting
通过上一小节的介绍,我们已经知道IP地址中,Class A的数量比较少,但是每一个Class A都是一个比较庞大的网络(拥有的主机号多);Class B是一个比较中型的网络,每一个Class B大致拥有6万多个主机号;而Class C分类比较多,但是每一个Class C的size比较小,只有256个IP Address的分配。像这样,只有Class A、Class B、Class C,弹性就不够,因为有时网络中的Host数量未必是这样的等级,可能会造成使用率不佳的状况。
所谓的IP Subnetting就是在原来Class A、Class B、Class C的架构之下,再加上另外一个level,称为子网络。
例如,每个Class B Type的IP Address有2^16 = 65536个IP Address可以用,通常用Subnet Mask的值来作为子网络的规模。如果其Subnet Mask为255.255.255.0,说明前24位均为1,后8位为0,那么子网络的大小只有8个bit,即有2^8=256个IP Address可用。如果Subnet Mask为255.255.255.128,说明前25位均为1,后7位为0,那么子网络的大小只有7个bit,即有2^7=128个IP Address可用。下面来看个例子:
左下角的无线网:Subnet mask为255.255.255.128即11111111 11111111 11111111 10000000,说明子网络的规模为2^7=128个host,也就是说这个子网络最多能有128个IP。显然,这个子网络的范围为128.96.34.0到128.96.34.127。
上方的Network 2:Subnet mask同样是255.255.255.128。这个子网络的范围为128.96.34.128到128.96.34.255。
右下角的Network 4:Subnet mask为255.255.255.0,说明子网络的规模是2^8=256个host。这个子网络的范围为128.96.33.0到128.96.33.255。
Internetworking的更多相关文章
- Summary - SNMP Tutorial
30.13 Summary Network management protocols allow a manager to monitor and control routers and hosts. ...
- [转]C语言SOCKET编程指南
1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...
- C++ 系列:socket 资料收集
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- New Features In SNMPv3 - SNMP Tutorial
30.12 New Features In SNMPv3 We said that version 3 of SNMP represents an evolution that follows and ...
- Example: Encoded SNMP Message - SNMP Tutorial
30.11 Example Encoded SNMP Message The encoded form of ASN.1 uses variable-length fields to represen ...
- Simple Network Management Protocol - SNMP Tutorial
30.9 Simple Network Management Protocol Network management protocols specify communication between t ...
- SNMP Message Format - SNMP Tutorial
30.10 SNMP Message Format Unlike most TCP/IP protocols, SNMP messages do not have fixed fields. Inst ...
- Formal Definitions Using ASN.1 - SNMP Tutorial
30.7 Formal Definitions Using ASN.1 The SMI standard specifies that all MIB variables must be define ...
- Structure And Representation Of MIB Object Names - SNMP Tutorial
30.8 Structure And Representation Of MIB Object Names We said that ASN.1 specifies how to represent ...
随机推荐
- Python:笔记1_字符串处理【转载】
[转载自:https://www.cnblogs.com/houht/p/3308634.html] 1. 判断字符串str是否为空Approach 1:如果字符串长度为0,说明字符串为空,code如 ...
- windows共享文件夹权限设置
权限设置及更改,最好在右键属性里面, 在计算机管理,共享文件夹->共享里面修改,有时候会不生效. windows的凭据修改,在用户注销后才会生效.
- Sql Server数据库之identity(自增)
一.identity的基本用法 1.identity的含义: identity表示该字段的值会自动更新,通常情况下,不允许直接修改identity修饰的字段,否则编译会报错 2.基本语法 列名 数据 ...
- tensorflow 1.9 ,bazel 0.15.0,源码编ERROR, Skipping, '//tensorflow/tools/pip_package:build_pip_package',error loading packageCuda Configuration Error, Cannot find libdevice.10.bc under /usr/local/cuda-8.0
最近在看tensorflow 移动端部署,需要编译源码才支持,所以又拾起来了编译这项老工作,其中遇到问题: bazel build --cxxopt="-D_GLIBCXX_USE_CXX1 ...
- faster rcnn源码阅读笔记1
自己保存的源码阅读笔记哈 faster rcnn 的主要识别过程(粗略) (开始填坑了): 一张3通道,1600*1600图像输入中,经过特征提取网络,得到100*100*512的feature ma ...
- sessionStorage实现note的功能
功能图如图所示: 文本域中输入点击保存后的结果如图所示: 点击读取后的结果图: 选择山羊对应的按钮进行修改并点击保存后的结果: 选择山羊养对应的单选按钮进行删除操作后的结果图: 点击清空后的结果: 源 ...
- 整数中1出现的次数(从1到n整数中1出现的次数)(python)
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...
- Moment.js 基本用法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 663. Equal Tree Partition 能否把树均分为求和相等的两半
[抄题]: Given a binary tree with n nodes, your task is to check if it's possible to partition the tree ...
- node.js中express框架的基本使用
express是一个基于node.js平台的,快速,开放,极简的web开发框架. 一.安装 express npm install express --save 二.简单使用 express //引入 ...