计算机网络知识点总结——网络层
一、IP分片和重组(fragmentation &reassembly)
(一)分片****fragmentation
1.MTU:链路层的一个概念,表示一个链路可以传输的最大数据包大小。
2.分片可以发生在端系统,也可以发生在路由器中。而具体在哪里分片取决于链路的MTU——** 如果数据包大小超过了链路的**** MTU**** ,就需要分片才能传输;如果没超,就可以直接传输**
3.分片后的每个分组都会获得(见下图)
(1)头部:如果没有头部,只有第一个分组可以被路由器识别,其他的分组不能被识别要去哪里
(2)相同的ID:表明他们来自同一个分组
(3)不同的偏移量:以“1”当“8个byte”->切片的时候必须8个字节8个字节地切
(4)fragflag——如果是1,代表后面还有分组;如果是0,代表这是最后一个分组。

(二)重组****assembly
重组只发生在目标主机,在中间路由器并不会发生重组
当有分组到达时,目标主机打开定时器,到时间时如果有任何一个分组没有到达目标主机,那么目标主机就会丢掉和它有相同ID的所有分组(∵少了一个分组,就不能显示信息了啊,那其他分组也就没用了)
——————————二、IP地址———————————
【注】IP地址不是表示主机的,而是表示网络设备(包括主机)的网络接口(即网络设备与物理链路的连接处)的,即** IP**** 地址和每一个接口关联** 。
∴路由器一定有2个或2个以上的IP地址,而主机可以有1个或多个IP地址。
1.IP地址是32位的,高位表示子网号,低位表示主机号
2.特殊的IP地址:(用于通信)
(1)子网部分全0——本网络
(2)主机部分全0——本主机
(3)主机部分全1——广播地址,这个网络中的所有主机

3.内网/专用IP地址(private/static IP address)
(1)地址空间的一部分供专用地址使用
(2)内网IP地址永远不会被当做公用地址来分配,不会与公用地址重复。即内网IP地址只在局部网络中有意义,用于区分不同的设备
(3)路由器不对目标地址是专用IP地址的分组进行转发
e.g.192.168.0.1
—————————三、子网subnet——————————
1.什么是子网?
①一个子网内的节点的ip地址高位部分(就是前三段)相同
②子网内的个主机无需经过路由器(但可以经过交换机)就可以在物理上直接传送分组。
2.如何判断子网?
将每个接口从网路设备处(主机或路由器)断开,每一个孤岛都可以被称作是一个子网。
例:在下面这个图中,有3个子网。

3.子网掩码 :32位的二进制数,“1”表示网络部分,“0”表示主机部分。比如子网掩码255.255.255.0表示这个子网中的IP地址的前24位表示网络部分,后8位表示主机部分。
—————————四、IP编址:CIDR—————————
无类域间路由(** CIDR**** ,**** classless interdomain routing**** )**
之前是有A类、B类、C类、D类、E类地址的格式的,但是因为相邻两者之间跨度太大,导致某一类的IP地址要么不够用,要么用不完浪费,∴才有了无类域间路由,即IP地址可以划分任意长度的地址作为子网号,余下的低位作为主机号。
那么问题又来了,之前使用A类、B类、C类、D类、E类的IP地址地址,路由器可以很好的知道哪些bit是子网号(∵路由转发的时候看的是子网号,并不会关心主机号,路由只负责将分组转发到目标地址所在的子网~~分组的转发是以子网网络为单位的,而不是以主机为单位,然后该子网中的交换机转发到目标主机)。但是现在子网长度任意,路由器要怎么确定哪些bit是子网号呢?
这个时候就要用到子网掩码——1表示子网部分,0表示主机部分。将子网掩码与目标IP地址(地址格式:a.b.c.d/x,其中,x表示子网号的长度)进行“与”操作,可以很好地滤去主机号(都变成了0),从而剩下子网号。(这里你可能会疑惑,路由器怎么知道拿哪一个子

网掩码与目标IP地址进行与操作?请看下面的转发表,当分组从某个网络接口到达路由器时,路由器会拿该分组的目标IP地址和转发表中的子网掩码逐一进行与操作,如果与出来的目标子网号与转发表中的目标子网号一致,那就将该分组按照这一行对应的接口转发到这一行对应的Next hop,即下一跳;否则就继续与下一行的子网掩码进行与操作,如果都没有找到,则使用默认表项~默认网关转发数据报)
五、如何获得一个IP地址
Ⅰ**.一台设备怎么获得一个IP****地址**
(一)系统管理员将地址配置在一个文件中
(二)** DHCP**** (**** dynamic host configuration protocol**** )动态主机配置协议**
【小结】** DHCP**** 使用**** UDP**
1.允许主机在加入网络时,动态地从服务器中动态获得一个IP地址:
~可以更新对主机在用IP地址的租用期-租期快到了
~重新启动时,允许重新使用以前用过的IP地址
~支持移动用户加入到该网络(短期在网)
e.g.服务器有200个IP地址可以分配,但是它可以支持400个以及更多的用户,∵有可能这400用户不会同时使用这个服务器,∴它可以在用户加入网络时候才给他动态的分配一个空闲的IP地址。
2.DHCP工作概况:
在用户到达网络的时候(∵这个时候这个主机还没有IP地址,∴用全0表示本主机),向网络内的所有主机广播“我到了”(通过全1的IP地址广播),然后服务器就会回应该客户空闲的IP地址(∵有可能不止一台服务器回复了空闲的IP地址,∴客户要决定用哪一个IP地址),于是客户要再给服务器发报文指明它要哪个IP地址,然后DHCP服务器就将这个IP地址、第一跳路由器的IP地址和DNS域名服务器的IP地址分配给这个客户,并回复ACK。



Ⅱ**.一个机构怎么获得IP****地址——层次编址**
1.从ISP的地址块中分配一个小地址块e.g.华工的网络地址是200.23.16.0/20,代表前20位是网络号,后面12位是主机号;那么如果要为8个系分配子网号的话,那就可以拿出后12位中的高3位,与前面的20位合在一起表示子网的网络号,e.g.200.23.16.0/23或200.23.18.0/23等。
2.那ISP如何获得IP地址呢?ICANN(Internet corporation for assigned names and numbers)
3.在下图中,左侧是上面提到的8个子网,每个子网的子网号都是23位的,然后每个子网通告他的下一跳路由器它的子网号,(e.g.第一个子网通告路由器子网号是200.23.16.0/23的分组发给“我”);然后中间网络中的路由器聚集来自8个子网的子网号,发现他们的前20位是一样的,∴这个时候该路由器将他们的子网号聚集成200.23.16.0/20,通告它的下一跳路由器子网号是200.23.16/20的分组发给“我”。
(变式1)如果这个时候左侧子网只有7个,就是说少了1个,那中间路由器也能将他们的子网号聚集成200.23.16.0/20(路由选择协议可以弥补这个空洞)。
(变式2)如果这个时候左侧多了一个子网的IP地址是199.31.0.0/16,那中间路由器就不能将他们聚集成一个子网地址了,而是聚集成两个——200.23.16/20和199.31.0.0/16

(扩展)这种情况下,如果有一个IP地址为200.23.18.7的分组到达Internet,那么这个时候Internet会将其与路由表中的子网掩码逐一“与”直至发现与目标地址子网号一样的表项(在这里是转发到IPx),然后IPx再重复上述操作,将该分组转发到Organization1.

————六、NAT(network address translation)————
1.实现内网地址的转换,e.g.在下图中,10.0.0.1等是这些主机在内网中的地址,如果他们拿这个地址进行回转,路由器是识别不出来的。∴在他们想往外发分组的时候,需要进行地址转换,即将内网地址转化为外网地址,在这里所有数据报的IP地址都会换成138.76.29.7(但是具有不同的端口号)。
为什么有内网地址?∵IPv4地址不够用,∴通过在每个内网中复用这些内网地址来减少对地址数量的要求。——地址短缺问题可以用IPv6解决
2.为什么使用NAT?使得本地网络中只有一个有效IP地址:
(1)不需要从ISP分配一块地址,可用一个IP地址用于所有的(局域网)设备——省钱
(2)可以在局域网改变设备地址的情况下无须通知外界
(3)可以改变ISP(地址变化)而不需要改变内部的设备地址
(4)局域网内部的设备没有明确的地址,对外是不可见的——安全
3.NAT的实现:(见下图)把外出数据包的源IP地址和源端口号替换成NAT IP地址和新的端口号(NAT IP地址就是这个网络唯一有效的IP地址,~~内网中所有设备发出去的包的源IP地址都被替换成这个;;新的端口号就是看NAT转换表中还有哪些端口号没有用,然后选一个),然后NAT转换表会记住每个转换替换对。注:目标IP和目标端口号不变哦!然后当响应数据报到达时,会根据NAT转换表将目标IP(这里的目标主机是我们内网中的主机)和端口号,然后转发给对应的主机。
4.NAT带来的问题:

(1)内网中的设备主动发出数据报是可以的,但如果是外部设备像内网中的某设备发送分组呢?即外网机器无法主动连接到内网机器上——穿越问题
~穿越问题的解决方案:
~~方案1:静态配置NAT
~~方案2:UPnP(universal plug and play)/IGD(Internet gateway device):自动化静态配置NAT:允许内网中的设备查看NAT转换表,并增/删端口映射,比如我现在有一个主机10.0.0.1要从80端口发/收分组,那这个时候我的主机就可以去查看NAT转换表中80端口有没有被分配出去,如果没有那就在NAT转换表中添加80号端口的映射。
~~方案3:中继(relay)(used in Skype)
当内网中的设备开机时会与中继建立连接,这个时候外网设备就可以通过中继与内网设备进行数据交换了;但是如果我的内网设备没有打开,就不会与中继建立连接,那么外网设备就无法通过中继与内网设备进行数据交换。

(2)路由器处理是网络层的,而端口号是链路层的,在NAT中路由器对端口号进行了处理——违反了end-to-end原则
**七、**IPv6
IPv6 数据报格式:
①固定的40字节头部;
②** 数据报传输过程中,不允许分片。即路由器不进行分片** ,如果分组太大,路由器会丢掉这个分组,然后向主机返回ICMP,让主机分片后重传,也就是说在IPv6中,分片工作由主机完成,路由器不负责分片(这样就将功能集中到了端,使得网络核心只进行简单的分组转发功能)
~ICMP(Internet control message protocol):用于在网络设备之间传递控制消息
①IPv4数据报格式:

②IPv6数据报格式:

整理不易,亲亲点个赞呗~~
