“OSPF协议报文是直接封装在IP报文里的,而RIP则是封装在UDP报文里”,有两点疑惑?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“OSPF协议报文是直接封装在IP报文里的,而RIP则是封装在UDP报文里”,有两点疑惑?相关的知识,希望对你有一定的参考价值。

1)UDP报文不是都封装在IP报文内么,为什么要说ospf包在IP里,而RIP包在UDP报文里?我的理解是数据要么封装在UDP报文里,要么封装在TCP报文里,而UDP和TCP报文都封装在IP报文里,换句话说,IP包里的数据部分就是UDP或者TCP报文的数据部分。
2)为何有的协议是应用层协议,有的协议是网络层协议呢?我的理解是不同的协议只是告诉应用层收到协议数据包后如何识别处理,所有的协议都工作在应用层。
3)请解释清楚收到一个OSPF报文后如何解封装?谢谢!

个人理解,下层是上层的必要不充分条件。比如,有4层的内容,那你必须有1、2、3层的东西。但有低层的内容,不一定就有高层的东西。我一个ip包,不一定有应用层的内容。
rip是udp发送,有端口号。ospf就是ip数据包,到网络层,没有更高层的内容。
udp当然也是ip包,有更细致的描述,就用,没有,那没办法。所以说“ospf包在IP里,而RIP包在UDP报文里”。
解封装确实就是拆包,拆到3层,发现这个组播地址归ospf管,就给它了。。。。。。。。
参考技术A

个人理解,下层是上层的必要不充分条件。比如,有4层的内容,那你必须有1、2、3层的东西。但有低层的内容,不一定就有高层的东西。我一个ip包,不一定有应用层的内容。
rip是udp发送,有端口号。ospf就是ip数据包,到网络层,没有更高层的内容。
udp当然也是ip包,有更细致的描述,就用,没有,那没办法。所以说“ospf包在IP里,而RIP包在UDP报文里”。
解封装确实就是拆包,拆到3层,发现这个组播地址归ospf管,就给它了。

参考技术B 1.你想想RIP有协议号吗?OSPF的协议号是多少?看看RIP和OSPF的数据包封装格式有什么区别.
2. OSPF runs directly over the Internet Protocol's network layer. RFC2328
3.解封装就是一层层读取包头,没什么好说的.
记住RIP,BGP都是工作在应用层,OSPF,EIGRP工作在网络层.如果是网络工程师了解到此就可以了.如果是搞程序,系统之类的可以继续钻研..网络工程师学习的时候重点关注下面4层就行了.
其实一台电脑从开机到打开网页,设计到各个层的技术,但是术业有专攻,有时候学到技术的交界处内容时,只要记住就行,不用继续深究了.
比如物理层,网络工程师要了解的是接口,线缆的速率型号......至于光电信号怎么做转换的不是考虑的范围.
参考技术C 不对的。每一层都有自己相应的协议,路由协议有在网络层的,也有在传送层的。

为啥我们必须输入 vim ~/.vimrc 而为啥不只输入 vim ~.vimrc? [关闭]

【中文标题】为啥我们必须输入 vim ~/.vimrc 而为啥不只输入 vim ~.vimrc? [关闭]【英文标题】:Why must we type vim ~/.vimrc and why not just vim ~.vimrc? [closed]为什么我们必须输入 vim ~/.vimrc 而为什么不只输入 vim ~.vimrc? [关闭] 【发布时间】:2016-01-07 02:42:03 【问题描述】:

我知道后者不起作用并且前者是正确的,但是是否存在导致第二种方法错误的句法问题?

cd ~ 将我带到我的主目录,那么为什么 vim ~.vimrc 不起作用? 为什么需要“/”?

【问题讨论】:

这是题外话,但你为什么不需要需要一个斜线?如果你有一个名为 "foo" 的目录包含一个名为 "bar.txt" 的文件,你会期望 "vim foobar.txt" 工作吗? 它不在目录中,Juhana。 你的主目录不是目录? 在你家,你家就是一个目录。 另外,cd ~ 不会把我带到根目录,而是把我带到我的主目录。 【参考方案1】:

因为~foo 在 Vim 看到它之前就被你的 shell 扩展了,你的 shell 扩展了 ~foo 到用户 foo 的主目录。特别是,~ 只是~<yourusername> 的快捷方式。这些是 shell 约定,它们与 Vim 没有任何关系。

【讨论】:

我认为问题不在于“vim”,而在于找到选择此约定的合理理由。它是“只是”一种选择还是有它的优势? @Mathiou 那么这个问题就更没有意义了。大约 40 年前,PDP-11 机器上的本机操作系统是 CP/M,这是一种原始的 MS-DOS。 UNIX 试图在 PDP-11 上实现一个有用的操作系统,它最初是一个(残酷地)剥离了 MULTICS。特别是外壳的概念是从 MULTICS 继承的。要理解为什么 ~foo 在 MULTICS 上比“foo 的主目录”和“foo 在我家”更有意义,你必须熟悉 MULTICS 的思想圈。祝你在 2015 年好运。 @geoyws 你因为没有花时间理解 shell 和其他所有东西之间的关系而赢得了我的反对。这确实是一个基本概念。不能评论其他人投反对票的原因。 还有其他人可以从这个问题中受益,但既然你对我们的学习不感兴趣,那么我想你可以继续投反对票。你不推荐阅读,你说的任何东西都没有任何证据。是什么让你认为你是这件事的权威? 我取消了你的回答。没有证据。【参考方案2】:

由于您的文件系统是分层的,因此您需要一种在移动时表达父子关系的方法。

最简单的方法是使用/ (unix) 或\ (windows) 之类的路径分隔符:左侧是父级,右侧是子级。

在 linux 上,你的主目录的路径是:

/home/username/

vimrc 的路径是:

/home/username/.vimrc

其中.vimrcusername/ 的子代,本身是home/ 的子代,本身是/ 的子代。

在类 unix 系统上,~ 是您的主目录的快捷方式,因此 ~/.vimrc/home/username/.vimrc 相同。

孩子。家长。路径分隔符。很简单。

【讨论】:

【参考方案3】:

语法必须是可解析的,这样 shell 才能理解如何扩展你给它的内容。

在 Linux 系统上试试这个:

sudo useradd -m .vimrc
vim ~.vimrc

Vim 将打开,但它会查看目录 /home/.vimrc/

这是您在现实世界中很少/永远不会看到的病态案例吗?是的。它是否说明了为什么您传递的参数的语法需要保持一致并使用路径分隔符之类的东西?海事组织,是的。

如果我告诉我的 shell vim ~dan 那么它应该做什么?它应该尝试打开/home/dan/ 吗?还是/home/dan/dan

如果我告诉我的 shell vim ~dan/foo 那么它应该怎么做?它应该尝试打开/home/dan/foo 还是/home/dan/dan/foo

如果我将我的帐单记录保存在$HOME/bill/ 中的0001.txt 之类的文件中,如果我说vim ~bill/0001.txt 应该可以吗?如果我想要/home/bill/0001.txt,我该怎么说(以可移植的方式)?我不想解析 /etc/passwd 来查找 homedirs,假设操作系统甚至将用户数据存储在该文件中。

我认为这类似于这样的陈述:

b = a++;

程序员对这条语句的行为感到困惑是很常见的,因为在您了解发生的事件顺序之前,您可能会认为 b 将被分配一个比 @987654336 大 1 的值@。您甚至可能期望a 不会改变。但这些都不是真的。

Shell 就像任何编程语言一样:清晰很重要。

【讨论】:

【参考方案4】:

如果你有一个名为 '~.vimrc' 的文件怎么办? 我认为唯一的区别是它避免了文件名以〜开头的歧义,但我可能错了。

【讨论】:

如果您有一个名为~.vimrc 的文件,您必须执行vim \~.vimrcvim '~.vimrc' 之类的操作来编辑它,以防止shell 扩展~。这与外壳有关,与 Vim 无关。 对我来说'vim ~.vimrc' 工作正常。我没有说它与 Vim 有关系,我也可以使用 'more' 或 'head' 命令,结果是一样的。 对我来说 vim ~.vimrc 不起作用。它会打开一个新文件。它不会命中 .vimrc 文件。也许是 OSX。 不,我的意思是如果您创建这样的文件,它就会“工作”。它不会打开 '.vimrc' 文件,而是打开你当前所在目录中的 '~.vimrc' 文件。 我的 .vimrc 文件位于主目录(我当前所在的目录)中,这是 cd ~ 将获取您的位置,而 vim ~.vimrc 不会打开它。它创建一个新文件

以上是关于“OSPF协议报文是直接封装在IP报文里的,而RIP则是封装在UDP报文里”,有两点疑惑?的主要内容,如果未能解决你的问题,请参考以下文章