出了网关,网络数据包的经历

出了网关,网络包的经历

数据包经过路由从局域网出去后,就变得复杂起来。数据包的传递会面临各种选择,比如最重要的路径选择

路径选择就是选择最短路径,也即最优路径来传递网络包到目的地。

在现在网络世界,个人发出的各种网络包的传递一般经过n多路由,每个路由就相当于关卡,有一些策略算法来保证网络包的正常传输。

所以这里涉及到路由的配置。路由拥有一张路由表。一张路由表中会有多条路由规则。每一条规则至少包含这三项信息:

  • 1.目的网络:这个包想去哪儿?
  • 2.出口设备:将包从哪个口扔出去?
  • 3.下一跳网关:下一个路由器的地址。

路由的配置有两种类型:静态配置和动态配置。

静态配置就是直接在配置文件里规定好路由的各个网口和ip的转发规则,负载均衡和默认路径等。

从中可以看到手工配置路由只适合在一些网络环境简单的,可控的网络中使用。不然在复杂的网络中,静态路由是不可取的。

动态路由路由器,可以根据路由协议算法生成动态路由表,随网络运行状况的变化而变化。

动态路由主要有两种算法:

  • 1. 距离矢量路由算法
  • 2. 链路状态路由算法

距离矢量路由算法

每个路由器都保存一个路由表,包含多行,每行对应网络中的一个路由器,每一行包含两部分信息,一个是要到目标路由器,另一个是到目标路由器的距离。

所以啊,使用距离矢量路由算法,每个路由都拥有整个自己能感知的网络的信息。每个路由都知道它能到达的路由的距离。所以,在更新的时候,相关联的路由就会根据相连的路由的距离和源地址路由的距离来推断出自己和源地址路由的距离,然后就会被源地址路由来计算出一条最优的路径。

距离矢量路由算法有个不好的地方,“好事传千里,坏事关起门来”的特点。当某个路由加入网络或更新信息时,就会发起一个广播,然后全局中的其他路由就会更新自己信息,主要是自己与其他路由的最终距离。

但是当某个路由挂掉时,挂了是不会发广播的,只能是通过全局所有路由“报告距离挂掉的路由的信息递增超过阈值“来发现挂掉,所以全局中其他路由更新这个信息的过程是缓慢的。

这个过程是这样的。当全局网络中的每个路由器发现原来的路径到不了这个路由器时,是发现不了它已经挂了,而会试图通过其他的路径访问,直到试过了所有的路径,才发现这个路由器是真的挂了。

针对距离矢量路由算法,每次更新信息都要发动一次全局更新,这样一来,网络大了,这个过程是缓慢,并且是效率低下的。因此,限制了其网网络规模。

链路状态路由算法

和距离矢量路由算法不同,链路状态路由算法的路由算法中,路由在启动时,会向相邻的路由询问距离,这个询问是发送一个echo,然后除以2来求出距离。然后把这个距离信息和地址信息一起广播到全局网络的路由。每个路由都会构建一个本地的全局地图。然后针对这个图使用 Dijkstra 算法,找到两点之间的最短路径。

链路状态路由算法和距离距离矢量路由算法不一样。后者在更新时会发送自己的整个路由表。而前者只广播更新的或改变的网络拓扑,这样更新信息更小,节省了带宽和 提高效率。当某个路由器挂了,它的邻居都会广播这个消息,可以使得坏消息迅速收敛。

原文地址:https://www.cnblogs.com/liangjf/p/9866610.html

时间: 2024-08-01 06:29:39

出了网关,网络数据包的经历的相关文章

Linux内核中网络数据包的接收-第一部分 概念和框架

与网络数据包的发送不同,网络收包是异步的的,因为你不确定谁会在什么时候突然发一个网络包给你,因此这个网络收包逻辑其实包含两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协议栈的两端,即网卡/协议栈边界以及协议栈/应用边界:网卡/协议栈边界:网卡通知数据包到来,中断协议栈收包:协议栈栈/应用边界:协议栈将数据包填充socket队列,通知应用程序有数据可读,应用程序负责接收数据.本文就来介绍一下关于这两个边界的这两件事是怎么一个细节,关乎网卡中断,NAPI,网卡poll,

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

LINUX下的远端主机登入 校园网络注册 网络数据包转发和捕获

第一部分:LINUX 下的远端主机登入和校园网注册 校园网内目的主机远程管理登入程序 本程序为校园网内远程登入,管理功能,该程序分服务器端和客户端两部分:服务器端为remote_server_udp.py 客户端分为单播客户端和广播客户端: 单播客户端client_unicast.py 广播客户端client_broadcast.py 1.单播客户端为根据net.info文件中的网络记录遍历目标网段中的所有IP,向其发送UDP封包. net.info中记录了目标网络中的一个样例IP和目标网段的子

一个最简单的通过WireShark破解SSL加密网络数据包的方法

原文地址: http://article.yeeyan.org/view/530101/444688 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的是用SSL/TLS等加密手段加密过的网络数据的时候,往往我们只能束手无策.在过去的话,如果我们拥有的该传输会话的私钥的话我们还是可以将它提供给WireShark来让其对这些加密数据包进行解密的 1. 简介 相信能访问到这篇文章的同行基本上都会用过流行的网络抓包工具WireShark,用它来抓取相应的

用C++实现网络编程,抓取网络数据包的实现方法和介绍

做过网管或协议分析的人一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各种应用层协议),敏感数据的捕捉等.下面我们就来看看在windows下如何实现数据包的捕获. 下面先对网络嗅探器的原理做简单介绍. 嗅探器设计原理 嗅探器作为一种网络通讯程序,也是通过对网卡的编程来实现网络通讯的,对网卡的编程也是使用通常的套接字(socket)方式来进行.但是,

发现新大陆:一个最简单的破解SSL加密网络数据包的方法

1. 简介 相信能访问到这篇文章的同行基本上都会用过流行的网络抓包工具WireShark,用它来抓取相应的网络数据包来进行问题分析或者其他你懂的之类的事情. 一般来说,我们用WireShark来抓取包进行分析是没有多大问题的.但这里有个问题是,如果你碰到的是用SSL/TLS等加密手段加密过的网络数据的时候,往往我们只能束手无策.在过去的话,如果我们拥有的该传输会话的私钥的话我们还是可以将它提供给WireShark来让其对这些加密数据包进行解密的,但这已经是想当年还用RSA进行网络数据加密的年代的

sk_buff封装和解封装网络数据包的过程详解

可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过<TCP/IP详解 卷2>的都知道),那么sk_buff是什么呢?       sk_buff就是网络数据包本身以及针对它的操作元数据.       想要理解sk_buff,最简单的方式就是凭着自己对网络协议栈的理解封装一个直到以太层的数据帧并且成功发送出去,个人认为这比看代码/看文档或者在网上搜资料强多了.当然,网上已经有了大量的这方面的

sk_buff封装和解封装网络数据包的过程详解(转载)

http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过<TCP/IP详解 卷2>的都知道),那么sk_buff是什么呢?       sk_buff就是网络数据包本身以及针对它的操作元数据.       想要理解sk_buff,最简单的方式就是凭着自己对网络协议栈的理解封装一个直到以太层的数据帧并且成功发

网络数据包分析 网卡Offload

http://blog.nsfocus.net/network-packets-analysis-nic-offload/ 对于网络安全来说,网络传输数据包的捕获和分析是个基础工作,绿盟科技研究员在日常工作中,经常会捕获到一些大小远大于MTU值的数据包,经过分析这些大包的特性,发现和网卡的offload特性有关,本文对网卡Offload技术做简要描述. 文章目录 网络分片技术 网卡offload机制 发送模式 接收模式 网卡offload模式的设置 Linux windows 网卡Offload