前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C|计算机网络|Network Layer-路由层

C|计算机网络|Network Layer-路由层

作者头像
朝闻君
发布2021-11-22 11:32:07
2920
发布2021-11-22 11:32:07
举报

All from CSE course in IPADS SE SJTU

Background

Network(Router): IP address

负责next hop。每个路由有route table,根据路由协议(防止呈环),逐渐找到正确的地址。

Feature

  • Discard Packet

IP地址是best-effort网络(尽力),因此如果无法dispatch,会丢包。

另一种是store-and-forward network(Guaranteed-delivery),这种网络追踪所有的消息并进行出错处理,以确保消息没有丢失(一般是一整条消息,而不是某个包)

后者一般在更高的层次进行处理,而IP地址只保证尽力。

  • Duplicate Packet

超时重发,这导致用户必须处理多次重复的request和response,根据实际情况决定如何处理

Network Layer

Router

当包进来时,路由器根据路由表,决定包的下一个网口出口。路由表通常放在cache里,以确保查表的效率。

由于网络的多变,不能使用静态的Route Table。路由器需要计算资源进行下面这些事,从而实现适应性的路由。

  • 计算最佳路径
  • 链接改变时重新计算表
  • 链接失败时重新计算表
  • 堵塞时进行适配

可以把路由的职责分为两部分。读表称为Data-plane,根据规则决定数据如何转发。写表称为Control-plane,决定如何建立路由表,定义规则。

Data Plane - packet forwarding

API

代码语言:javascript
复制
struct packet {
 bit_string source //起点
 bit_string destination //终点
 bit_string end_protocol //上层协议
 bit_string payload //包
};

NETWORK_SEND (segment_buffer, destnation, network_protocol, end_layer_protocol){
packet instance outgoing_packet 
outgoing_packet.payload ← segment_buffer 
outgoing_packet.end_protocol ← end_protocol 
outgoing_packet.source ← MY_NETWORK_ADDRES 
outgoing_packet.destination ← destination 
NETWORK_HANDLE (outgoing_packet, net_protocol)
}

NETWORK_HANDLE (packet, network_protocol){
packet instance net_packet 
    if net_packet.destination != MY_NETWORK_ADDRESS then
        next_hop ← LOOKUP (net_packet.destination, forwarding_table)
        LINK_SEND (net_packet, next_hop, link_protocol, net_protocol)
    else
        GIVE_TO_END_LAYER (net_packet.payload, 
                          net_packet.end_protocol, net_packet.source)
}

这里的send会调用handle,因为handle本身也存在着转发的职责,相当于handle处理了本地机器让你发出的信息、其他路由让你转发的信息、给本地机器的信息。

如果路由是终点,那么就GIVE_TO_END_LAYER,由上层进行处理(如TDP)。

否则先LOOKUP next hop(找不到就丢包),更新TTL(为0丢包)和header的checksum,再通过网口交由Link Layer进行转发。

NAT(Network Address Translation)

对于私有网络,公开的路由无法进行内网的路由,导致丢包。

如下图,Send时,NAT可以把原始的地址+端口翻译成临时的公网地址(端口to端口的映射),由路由器记住这种对应关系,Receive时再翻译回去。

缺陷

  • 某些e2e协议在payload放了IP(解包后就尴尬了hhh)
  • 翻译可能是瓶颈(端口数有限塞不下)
  • 多个私网无法合并
  • 违背了分层原则(暴露了port给network层)

INTERNET/ETHERNET MAPPING

以太网使用MAC物理地址,目前作为局域网

经典的以太网使用CSMA/CD监听信道冲突。

Hub

线上只能同时发一个包,发包前需要监听信道,确认空闲后才能发包。

ETHERNET_SEND

直接把包发到Hub上

ETHERNET_HANDLE

私播(地址单个)/组播(多个MAC组成一个组)/广播(所有设备均可接受,特定的ID)

在以太网之间可以直接进行RPC。如果要发到其他以太网(比如E),那么以太网地址应该为Router(19),再由Router通过IP网络发出去。所以跨以太网发包时,包中的MAC地址会经常发生变化。

ARP (Address Resolution Protocol)

主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

如果在同一局域网下,可以不经由路由直接通过以太网通信。 NETWORK_SEND (data, length, RPC, INTERNET, N)

NETWORK_SEND (data, length, RPC, ENET, 18)

RARP则是反过来,由MAC映射到IP。

ARP Spoofing

但是,ARP协议的前提是同一局域网下,所有的主机之间都是可信的,完全信任其他主机发出的包。如果Hacker连入以太网,伪造ARP响应,污染A和B的ARP cache,从而使得他们对A/B的包都变为给C,这样C成为了A,B间的路由,从而可以随意劫持包。(Man-in-the-Middle Attack)。

一种防御方式是:使用静态的ARP条目。

另一种防御方式则是检测行为模式,发掘可疑行为。

Control Plane - routing protocol

路由器的职责在于,建立一个routing table,寻找到目的IP的最小开销路径(通常latency)。

  1. 先通过Hello Protocol获得邻居路由器
  2. 通过广告获得其他可达的路由器
  3. 计算已知的最短路径

两种小范围协议

P1: Link-state

所有路由广告自己和邻居路由的通信延迟。使用Dijkstra最短路径算法。

P2:Distance-vector

邻居路由广告自己和认识路由的通信延迟。使用Bellman-Ford最短路径算法

P1要求所有路由都了解整个拓扑结构,scalability是很大的难题。

P2则认为路由并不需要知道全局,只需要知道next hop(也就是传给哪个邻居)。但是由于不知道拓扑结构,错误处理很难。

P2迭代过程

X接受邻居Y的广告, 为dst:Ycost键值对。 XY为XY间的latency。Ycost,Xcost为到dst的latency。

X如果正在使用Y到达dst,那么更新Xcost为Ycost + XY。

X如果没有使用Y到达dst,那么更新Xcost为min(Xcost , Ycost+XY),并根据路径更新到dst的next hop。

本来应该由B通信C,但是因为BC发生了一次丢包,B试图通过A通信C,形成了死循环

Advance

Path-vector Routing

广播中加入路径,防止呈环

Hierarchy of Routing

一组Router作为一个region,内部使用小范围协议,外部使用Path-vector Routing

Topological Addressing

连续的IP作为一个region,CIDR Notation(CIDR: Classless Inter Domain Routing)

例如18.0.0.0/24子网掩码,代表只关注前24位,其后的IP可以随意改变。直接把整个子网掩码放在routing table里节约空间。

BGP(Border Gateway Protocol)

现在的路由协议一般为BGP,分为多Tier,上层的Region之间寻址极快(10-15个),而下层的Region向上层支付费用。T1之间互为Peer。

Customer/provider

customer向provider支付path的费用

Peer

peer之间共享customer

上层的Region的很大一部分盈利用于购买其他的Region的通行费,最终所有Region基本能互联。

这个协议在抽象角度很简单,但是由于彼此的广告和本地的路由表没有办法验证,事实上并不安全。例如某个路由作为其他路由的中间路径的话,可以对于这些流量进行劫持、读取(一般是misconfiguration)。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Background
  • Network Layer
  • Data Plane - packet forwarding
  • Control Plane - routing protocol
  • BGP(Border Gateway Protocol)
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档