学习笔记:高级信息网络Ch3.The Internet
(来源:notes of course Advanced IT Network. Ch3.The Internet)

这一章会深度讲解有关Internet Layer的内容。
Router(路由器):
- devices that can transfer data packets between different networks
- use IP protocol for communicating with each other
回到上一章:
IT Network Ch2.Communication Systems Modeling
在分层的理论里有提到过三层的结构如下图所示:

中间的Internet&Transport Layer其实还可以分层
也就是:
- Internet Layer
- Transport Layer
先看位于下层的**Internet Layer。*我们会发现,在其他层,或多或少有很多协议的选择,例如Transport Layer可以有UDP、TCP。而Internet这一层有且只有一种协议,也就是IP协议可以选择,于是在MIT的课程中,把这一层称为The Slim Part of the Model。*Router也是属于这一层的范畴。

再看一下位于上层的Transport Layer。实际上,Transport Layer和上层的应用层之间的连接靠的是不同的port,每一个port对应一种应用层(可以理解成接口?)。
To select the applications involved in communications, the transport layer adds its own set of addresses,called Port Number
两种关于Internet Layer的规定:
OSI:(死板,也严格,需要大量改造已有的网络)

IP:(灵活,最差的网都能满足)

于是,显而易见,IP赢了,所以接下来就开始讲解IP协议。
IP protocol:
- Connectionless
- Fragmentation when required
- Routing through the entire Internet
- Elimination of lost datagram
IP addresses:
- one part to define a network
- one part to define a computer connected to the network
概念看完了,课上给出了一个例子:

#路由器已经编写了程序,知道去哪里应该走哪条路最好
从1.5到5.5:
- 一开始,1.5处于网络1,网络1把信息通过1.1传送给了路由器
- 此时路由器说,你想去1、2、3,可以直接去,想去4,得走3.1,想去5,得走2.2
- 于是走了2.2,到了新的路由器,路由器说,你想去2、5,可以直接走
- 直接走到了5,传送到了5.5
好,我们现在来研究一下,怎么编写这个走那条路最好的程序:)
Routing:
先定义一种图,叫Routing Table,如下图所示:

之后可以介绍有关算法了
先来介绍分散型的算法(Distributed Routing Algorithm)
- Distance Vector Routing
- Link State Routing
Distance Vector Routing:
- 路由器问周围的路由器,去XX从你那走得多远?自己再算一下到各路由器的距离,和刚才问的加一下,选一个最短的走。
做个小练习:

很容易做出来E的最短距离是8,但是出现了问题,D和A发现自己之前报的距离太远了,于是也进行修改,变成从E走的距离。

看起来非常科学的样子,但是如果出现断路,麻烦可就大了!

看上面的图,A想到B只能走那一条路,如果A和B之间突然因为物理原因变长了,B就会回头看C,然后改成到C的距离。
B改了,C也会随着改,两个家伙就一直改,直到改成到A的距离。而后面的一堆只会跟着C改,也会最终到达正确的距离。
这种效应叫做Count to Infinity。
第二种方法叫做Link State Routing。
- 每个路由器广播自己到周围路由器的距离
- 当距离发生改变时,也要立即广播声明

- 得到距离之后,就有了一张如上图的地图,可以用Dijkstra算法得到最短距离
之后开始介绍IPv4和IPv6协议。
IPv4:
在介绍前,先介绍一下IP地址,在刚才讲过。
IP addresses:
one part to define a network
one part to define a computer connected to the network
使用bits来描述IP地址,也就是010101的序列,可以把他转化为十进制

问题就来了,在同一个局域网下的两个设备,并不需要通过Internet进行交流,有什么方法可以让他们便捷的认清对方,并建立本地连接呢?
IPv4提供了一个特性:MASK(子网掩码),也是由32bits构成的序列,1处代表该部分处于同一局域网,0处代表不处于。
IP地址:192.168.1.1
子网掩码:11111111.11111111.11111111.00000000 代表最后一个四分位无论怎么变化,都处于同一局域网中
当然子网掩码也可以写作十进制,上方即为255.255.255.0,也就表示IP地址有254个subnet
又因为子网掩码全是1和0,可以直接写作多少个1,也能表示。
上面的例子就变成了192.168.1.1/24
IP datagram(IP数据包):
- IP通过传送数据包进行交流
下面是数据包的格式:

Header:32bits long
下面直接截图ppt说明各个部分的用途:





Network Address Translation:
因为根据定义,IP地址是有限的,所以早晚会有用完的那一天。那么可以把内网(Intranet)的地址重新定义,在外部只表现为1个IP地址,这样就能大大减少IP地址的数量。
NAT(Network Address Translation):
- 对内表现为router
- 对外表现为host
- 负责对内对外的翻译工作(互联网产品经理既视感)
IPv6:
increase the IP addresses to 128 bit!
8 group of 4 hex digits
结构如下图所示:

Unicast VS Anycast:
- Unicast 是点对点传播
- Anycast是有用一个地址源可以指向一组地址:大大提高了效率
Header:



IPv4和IPv6都是好协议,目前是共存的,但是大家正在努力转变到6代协议,这里痛斥了一下美国,美国就是不转变,就像大家都用了公制单位米,而美国还在用英尺一样。
喜闻乐见系列(VPN)
在osi协议中的应用层,可以把IP数据包加密,然后再进行传播,就可以 认为他不在公网传播,而是自己在tunnal里传播,到了目的地址,再由当地的VPN进行解密就可以。
Edge Server:
大家都用公网进行数据访问,网络压力很大,于是,当地的服务运营商可以把最常见的访问数据存储在当地的服务器(Edge Server)。这就能大大提高访问的速度和效率。
TCP/UDP:
都是在前面加Header。
TCP:


UDP:
Service offered to application layer:
Application port identification
Connectionless
Error detection, no correction
Service required from network layer:
Connectionless network service
