草庐IT

计网笔记 网络层(端到端的服务)

卑微小钟 2025-04-16 原文

第三章 网络层(端到端的服务)

**TCP/IP体系中网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。**网路层不提供服务质量的承诺,不保证分组交付的时限,所传送的分组可能出错、丢失、重复和失序。进程之间通信的可靠性由运输层负责。

IP网是虚拟的,因为从网络层上看,IP网络是一个统一的、抽象的网络(实际上是异构的)。IP层抽象的互联网屏蔽了下层网络复杂的细节,使我们能够使用统一的、抽象的IP地址处理主机之间的通信问题。

互联网上的交付主机的方式有两种:

(1)在本网络上的直接交付(不经过路由器)

(2)到其他网络间接的交付(经过至少一个路由器,但最后一次一定是直接交付)。

一个IP地址在整个互联网范围内是唯一的。早期使用的是分类的IP地址,包括A类、B类和C类地址(单播地址),以及D类地址(多播地址)。E类地址未使用。

分类的IP地址由网络号字段(指明网络)和主机号字段(指明主机)组成。网络号字段最前面的类别位指明IP地址的类别。

目前已广泛使用无分类域间路由选择CIDR记法把IP地址后加上斜线**“\”,斜线后的前缀位数。前缀(或网络前缀)指明网络,后缀指明主机。前缀相同的连续IP地址构成“CIRD地址块”**。

CIDR的32位地址掩码(或子网掩码)由一串1和一串0组成,其中1的个数是前缀的长度。只要把IP地址和地址掩码按位进行AND运算,即可以得出网络地址。

IP地址是一种分等级的地址结构。IP地址管理机构在分配IP地址时只分配网络前缀(网络号),而主机号则由得到该网络前缀的单位自行分配。路由器仅根据目标的主机所连接的网络前缀(网络号)来转发分组。

IP地址标志一台主机(或路由器)和一个链路的接口。多归属主机同时连接到两个或更多的网路上。这样的路由器同时具有两个或更多的IP地址,其网络前缀必须是不同的。由于一个路由器至少应当连到两个网络,因此一个路由器至少应当有两个不同的IP地址。

按照互联网的观点,用转发器或网桥连接起来的若干个局域网仍为一个网络。所有分配到网络前缀的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。

MAC地址(即硬件地址或物理地址)是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址(用软件实现的),在数据链路层看不见数据报的IP地址。

IP数据数据报分为首部和数据两部分。首部的前一部分是固定长度,共20字节,是所有IP数据报必需具有的(源地址、目标地址、总长度等重要字段都在固定首部中)。一些长度可变的可选字段放在固定首部后面。

IP首部中的生存时间字段给出了IP数据报在互联网中所能经过的最大路由数,可以防止IP数据报在互联网中无限制地兜圈子。

地址解析协议ARP把IP地址解析为MAC地址,它解决了同一个局域网中的主机或路由器的IP地址和MAC地址映射问题。ARP的高速缓存可以大大减少网络上的通信量。

在互联网中,我们无法仅根据MAC地址寻找到某个网络上的某台主机。因此,从IP地址到MAC地址的解析是非常必要的。

路由聚合(把许多前缀相同的地址用同一个来代替)有利于减少路由表中的项目,减少路由器之间的路由选择信息交换,从而提高了整个互联网的性能。

“转发”和“路由选择”是不同的概念。“转发”是单个路由器的动作。“路由选择”是许多路由器共同协作的过程,这些路由器相互交换信息,目的是生成路由表,再从路由器导出转发表。若采用自适应路由选择算法,则当网络拓扑结构变化时,路由器表和转发都能够自动更新。在许多情况下可以不考虑转发表和路由表的区别,而都使用路由表这一名词。

自治系统(AS)就是在单一的技术管理下的一组路由器。一个自治系统对其他自治系统表现出的是一个单一的和一致的路由选择策略。

路由选择协议有两类:

(1)内部网关协议(或自治系统之间的路由选择协议),如RIP和OSPF。

(2)外部网关协议(或自治系统之间的路由选择协议),如BGP-4。

RIP是分布式的基于距离向量的路由选择协议,只适用于小型互联网。RIP按固定是时间间隔与相邻路由器交换信息。交换的信息是自己当前的路由表,即到达本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器。
OSPF是分布式的链路状态协议,适用于大型互联网。OSPF只在链路状态发生变化时,才向本自治系统的中所有路由器,用洪泛法发送与本路由器相邻的所有路由器的链路状态信息。“链路状态”指明本路由器都和哪些路由器相邻,以及该链路的“度量”。“度量”可以表示费用、距离、时延、带宽等,可以统称“代价”。所有的路由器最终可以建立一个全网的拓扑结构图。

协议BGP-4简称为BGP,是一种路径向量路由选择协议,用于在不同在不同自治系统AS之间的路由选择。BGP力求在AS之间,找出一条能到达目的网络前缀且较好的路由(不是最佳路由,但不能兜圈子)。各种BGP报文是在AS之间的BGP连接(即eBGP)和AS内部BGP连接(即iBGP)上传送的。BGP路由指出,从那个路由器,经过哪些AS,就可以到达哪个网络前缀。

网际控制报文协议ICMP是IP层的协议,ICMP报文作为IP数据报的数据,加上首部后组成IP数据报发送出去。使用ICMP并非为了实现可靠传输。ICMP允许主机或路由器报告差错情况和提供有关异常的情况的报告。ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。

ICMP的一个重要应用就是分组网间探测PING,用来测试两台主机之间的连通性。PING使用了ICMP回送请求与回答报文。

要解决IP地址耗尽问题,最根本的方法是采用具有更大空间的新版本的协议IP,即IPv6。

IPv6所带来的主要变化是:

(1)更大的地址空间(采用138位的地址)

(2)灵活的首部格式

(3)改进的选项

(4)支持即插即用

(5)支持资源预分配

(6)IPv6首部改成8字节对齐

有关计网笔记 网络层(端到端的服务)的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  8. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  9. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  10. ruby - Rails 开发服务器、PDFKit 和多线程 - 2

    我有一个使用PDFKit呈现网页的pdf版本的Rails应用程序。我使用Thin作为开发服务器。问题是当我处于开发模式时。当我使用“bundleexecrailss”启动我的服务器并尝试呈现任何PDF时,整个过程会陷入僵局,因为当您呈现PDF时,会向服务器请求一些额外的资源,如图像和css,看起来只有一个线程.如何配置Rails开发服务器以运行多个工作线程?非常感谢。 最佳答案 我找到的最简单的解决方案是unicorn.geminstallunicorn创建一个unicorn.conf:worker_processes3然后使用它:

随机推荐