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的更多相关文章

  1. Summary - SNMP Tutorial

    30.13 Summary Network management protocols allow a manager to monitor and control routers and hosts. ...

  2. [转]C语言SOCKET编程指南

    1.介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等 ...

  3. C++ 系列:socket 资料收集

    Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...

  4. 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 ...

  5. Example: Encoded SNMP Message - SNMP Tutorial

    30.11 Example Encoded SNMP Message The encoded form of ASN.1 uses variable-length fields to represen ...

  6. Simple Network Management Protocol - SNMP Tutorial

    30.9 Simple Network Management Protocol Network management protocols specify communication between t ...

  7. SNMP Message Format - SNMP Tutorial

    30.10 SNMP Message Format Unlike most TCP/IP protocols, SNMP messages do not have fixed fields. Inst ...

  8. 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 ...

  9. 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 ...

随机推荐

  1. Python:笔记1_字符串处理【转载】

    [转载自:https://www.cnblogs.com/houht/p/3308634.html] 1. 判断字符串str是否为空Approach 1:如果字符串长度为0,说明字符串为空,code如 ...

  2. windows共享文件夹权限设置

    权限设置及更改,最好在右键属性里面, 在计算机管理,共享文件夹->共享里面修改,有时候会不生效. windows的凭据修改,在用户注销后才会生效.

  3. Sql Server数据库之identity(自增)

    一.identity的基本用法 1.identity的含义: identity表示该字段的值会自动更新,通常情况下,不允许直接修改identity修饰的字段,否则编译会报错 2.基本语法 列名  数据 ...

  4. 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 ...

  5. faster rcnn源码阅读笔记1

    自己保存的源码阅读笔记哈 faster rcnn 的主要识别过程(粗略) (开始填坑了): 一张3通道,1600*1600图像输入中,经过特征提取网络,得到100*100*512的feature ma ...

  6. sessionStorage实现note的功能

    功能图如图所示: 文本域中输入点击保存后的结果如图所示: 点击读取后的结果图: 选择山羊对应的按钮进行修改并点击保存后的结果: 选择山羊养对应的单选按钮进行删除操作后的结果图: 点击清空后的结果: 源 ...

  7. 整数中1出现的次数(从1到n整数中1出现的次数)(python)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  8. Moment.js 基本用法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 663. Equal Tree Partition 能否把树均分为求和相等的两半

    [抄题]: Given a binary tree with n nodes, your task is to check if it's possible to partition the tree ...

  10. node.js中express框架的基本使用

    express是一个基于node.js平台的,快速,开放,极简的web开发框架. 一.安装 express npm install express --save 二.简单使用 express //引入 ...