文章目录
功能
- 向下:分片,向链路层交付数据报(datagram)
- 向上:重组,向传输层交付数据段(segment)
转发:路由器将一个输入端口的数据报转发至某输出端口 依据:转发表(Address:Port)
路由:跨局域网的通信方式,确定分组从源到目的地的路径 路由算法
传输前建立主机间的虚拟连接,传输层面的连接是进程间的。
无连接服务:不确定的传输路径,每个分组独立传输
有连接服务:建立连接(路径)- 统一传输
虚电路和数据报
虚电路是一条逻辑上的信道。这个信道物理上不存在,和路径相比更关心两个端点的联系。在网络层中,通过三次握手建立连接。这是一个有连接服务。
数据报是以分组为基本单位的传输方式。一个节点接收到一个数据报后,根据数据报中的地址信息和节点所存储的路由信息,找出一个合适的出路,把数据报原样地发送到下一个节点。 当端系统要发迭一个报文时,将报文拆成若干个带有序号和地址信息的数据报,依次发给网络节点。此后,各个数据报所走的路径就可能不同了,因为各个节点在随时根据网络的流量、故障等情况选择路由。由于各行其道,各数据报不能保证按顺序到达目的节点,有些数据报甚至还可能在途中丢失。在整个传送过程中,不必建立虚电路,但要为每个数据报作路由选择。
虚电路使得端系统无需考虑数据的到达顺序,但效率较低,因为路径是固定的,不能根据实际情况切换开销更小的路径。数据报网络在数据可靠性上表现更差,由于每个分组都从不同路径传输,所以是无序的,还会出现丢包等。
IPV4 Protocol
IP 协议位于 TCP/IP 协议的第三层——网络层。与传输层协议相比,网络层的责任是提供点到点(hop by hop)的服务,而传输层(TCP/UDP)则提供端到端(end to end)的服务。
报文头格式
- 版本:4
- 首部长度:整个首部的长度(固定(20B)和可变字段总和)
- 总长度:数据头+数据的长度,单位为字节。
- 标识:counter。注意IP协议是无连接的,这个16位字段仅用于区分属于不同数据报的分组。当数据报大小超过了MTU时应当分片,此时标识用于表示几个分组属于同一个数据报。
- 标志:3位。中间位DF=0:允许分片。最低位MF=0:最后一片,MF=1:后面还有分片。
- 片偏移:13位,表示该分片在数据报中的偏移量。以8字节为偏移的基本单位
- 生存时间TTL:在路由中可经过的最大跳数。每次路由转发前TTL-1,=0时丢弃
- 协议名称:6=TCP,17=UDP
- 源地址/目标地址
- 可变字段:填充至32位(4字节)的整数倍
首部长度基本单位为4B,总长度为1B,片偏移为8B。
数据报分片
IP数据报向下封装成链路层数据报,而链路层的数据报存在MTU,所以需要限制单个分组的长度。当IP数据报的总长大于MTU时需要进行分片。
分片在发出端主机产生并在接收端主机重组。Dont Fragment/More Fragment表示分片情况。
计算需要注意的:
- 数据报包括20字节的头部和数据部分。
- 偏移以8字节为基本单位
- o f f s e t = ( M T U − 20 ) / 8 ∗ i offset=(MTU-20)/8*i offset=(MTU−20)/8∗i(偏移是0-style)
- 分片的标识部分维持原数据报的标识。
分组转发
从首部提取目的主机IP地址D,得到公网地址N,按照以下顺序检查转发流程:
- 路由和网络直连?直接交付:间接交付,到2;
- 路由表中有到D的直接路由?交付给指定的下一跳;
- 路由表中有到N的路由路径?交付给指定的下一跳;
- 有默认交付路由?发送给默认路由;
- 报错。
IP地址和子网划分
前几位标识地址类型
A类占第一个段,B类占前两个段,。。。
D类为多播地址,没有网络号和主机号的区分,标识头为1110
E类(剩余的地址)保留,标识为1111
- A类:(0*** ****).0
- B类:(10** ****).255.0
- C类:255.255.255.0
参考:
考虑到二级地址不够灵活,出现了子网号,即::三级结构。 - 子网划分对外界不透明,属于系统内部操作。
- 数据报的分发由子网的路由器完成。
子网掩码
用于界定子网号和主机号的范围。有子网掩码的情况下,路由转发时应该检查其真实的主机号转发。
CIDR
无固定边界的网络号/主机号适配方案。
组织分配一个地址块,在内部构建子网。这个地址块下的网络组织称为超网。
路由聚合:到两个子网的路由都是同一个下一跳,
实际指派地址数为
2
N
−
2
2^N-2
2N−2(排除主机号全0(网络号)全1(广播))
DHCP/NAT/ICMP
ARP
路由器将主机的Mac和IP绑定的协议。每台主机储存一个域内主机的ARP映射表。
ARP在网络层工作。
主机(或者路由)在向主机发报前,查询ARP表;如果没有记录,则使用MAC广播地址发送ARP查询报文。目标主机收到后发送响应分组。
ARP协议用到了IP地址,应当是网络层。就像NAT用到了端口,应该是传输层
DHCP
局域网下动态分配IP地址的协议。有主机需要联网时向路由广播发送请求,路由分配IP地址。
DHCP使用UDP,因为TCP不能广播,DHCP不知道IP地址也不能建立Socket。
ICMP
ICMP差错报告和ICMP询问报文(ping)
ICMP在网络层,ping是应用层,tracert是网络层。
IPV6 Protocol
- 更长的地址:16字节128位
- 不分片:超过MTU直接丢弃
- 分组头简化
路由算法
内部网关协议(IGP)/外部网关协议(EGP)
RIP
属于IGP。
应用层协议,使用UDP
每个路由维护一个自身到其他所有设备的距离(以跳数为单位)
优先选择跳数少的路径
任意两个路由之间每30s广播更新信息
RIP不支持子网掩码广播,RIP2支持基于CIDR的变长子网掩码。
最多允许15跳
- 仅和相邻路由交换信息
- 交换时给出全部路由表
- 交换时间间隔固定
- 网络规模小
- 故障时出现慢收敛
距离向量算法
每一个相邻路由器发送过来的路由表都要经过以下步骤:
- 对地址为X的 路由器发过来的路由表,先修改此路由表中的所有项目:把”下一跳”字段中的地址改为X,并把所有”距离”字段都加1。
- 对修改后的路由表中的每一个项目,进行以下步骤:
- 将X的路由表(修改过的),与S的路由表的目的网络进行对比。
- 若在X中出现,在S中没出现,则将X路由表中的这一条项目添加到S的路由表中。
- 对于目的网络在S和X路由表中都有的项目进行下面步骤
- 在S的路由表中,若下一跳地址是x,则直接用X路由表中这条项目替换S路由表中的项目。
- 在S的路由表中,若下一跳地址不是x,X路由表项目中的距离d小于S路由表中的距离,则进行更新。
- 若3分钟还没有收到相邻路由器的更新表,则把此相邻路由器记为不可到达路由器,即把距离设置为16
即:
4. 将广播获得的表的条目修改为以本机为起点,以广播机为下一跳的路由表;距离+1
5. 比较,如果没有该条目,则新建
6. 如果有该条目,如果距离更小,更新距离和下一跳
7. 没收到的距离更新为16(Unreachable)
OSPF(TBD)
IGP
OSPF是一种基于链路状态的路由协议,需要每个路由器向其同一管理域的所有其他路由器发送链路状态广播信息。
在OSPF的链路状态广播中包括所有接口信息、所有的量度和其他一些变量。利用OSPF的路由器首先必须收集有关的链路状态信息,并根据一定的算法计算出到每个节点的最短路径。
而基于距离向量的路由协议(RIP)仅向其邻接路由器发送有关路由更新信息。
每个路由器建立一个全网的路径拓扑,使用Dijkstra算法计算最优路径并存储下一跳路径
BGP
不同自治系统之间交换路由信息的协议。
由于网络规模过大,且不能完全掌握整个网络的拓扑信息,这里只要求找到一个较优路径。
BGP是基于TCP的应用层协议
- 每个自治系统选择一个路由作为Announcer
- 和其他Announcer建立TCP连接
- 交换路由信息
- 都连接之后就可以得出到达每个自治系统的较好路由
Conclusion
Via https://blog.csdn.net/aiaiai010101/article/details/83064444