计算机网络Day7-数据转发过程

LAN

对于LAN最通俗易懂的了解就是:网段相同的一片区域。

计算机近距离构成的小型网络 叫局域网, 简称LAN。局域网能小到是同一个房间里的两台机器,或大到校园里的上千台机器。LAN技术中最为典型的就是“以太网”。


CSMA/CD

多台电脑共享一个传输媒介, 这种方法叫 “载波侦听多路访问” 简称”CSMA”。而这种共享载体式网络有一个弊端:一个共享网段中,多个主机不能同时传输数据,其会发生冲突,导致丢包等现象。

解决办法是,每一台计算机都监听电线中的信号检测这些冲突,当检测到冲突时,就停止传输,等待网络空闲, 然后再试一遍。其等待的时间使用“指数退避”算法进行计算,这样,每台计算机都有机会传输数据了。

因此,CSMA/CD 全程就叫做 : 载波侦听多路访问 / 冲突检测

虽然CSMA/CD能够一定程度上的解决问题,但是,当主机数量多起来之后,意味着传输速率大大减少,我们使用交换机进行分割为多个“冲突域”,身处不同冲突域的主机传输互不影响。



传输数据的方式:

电路交换:

连接两台相隔遥远的计算机或网路,最简单的办法是分配一条专用的通信线路,这就叫电路交换。这种方法虽然能用,但是不灵活而且价格昂贵,因为总有闲置的线路,好处是:如果有一条专属于自己的线路你可以最大限度地随意使用,无需共享。


报文交换:

“报文交换” 就像邮政系统一样,每个站点都知道下一站发哪里, 因为站点有“表格”,记录到各个目的地,信件该怎么传等等信息。报文交换的好处是 可以用不同路由,灵活性、可靠性大大提高。

而这个过程中,每个站点就是一个路由器,消息沿着路由跳转的次数叫”跳数”,记录跳数很有用,因为可以分辨出路由问题,有利于网络工作人员的差错排查。

报文交换的缺点之一是有时候报文比较大,会堵塞网络,因为要把整个报文从一站传到下一站后才能继续传递其他报文,设想一下,如果你现在有一个非常大的文件在传输,整条路都堵塞了。即便你只有一个1KB的小文件要传输也只能等大文件传完,或是选另一条效率稍低的路线。

因此,分组交换出现了…


分组交换:

将大报文分成很多小块,叫”数据包”,就像报文交换 每个数据包都有目标地址,因此路由器知道发到哪里。报文具体格式由”互联网协议”定义,简称“IP协议”。将数据拆分成多个小数据包,然后通过灵活的路由传递,非常高效且可容错,如今互联网就是这么运行的。

有了上面大概的介绍,让我们看看,我们是如何实现上网的~



分布式网络

计算机首先要连到局域网(例如WIFI,也可能是4G),局域网再连到 WAN。WAN 的路由器一般属于你的”互联网服务提供商”,简称 ISP。就这么层层叠加,最终到达了互联网主干(互联网主干由一群超大型、带宽超高路由器组成)。

例如 我们现在在网络上请求了一个资源,数据包(packet)要先到互联网主干,沿着主干到达有对应文件的 服务器,最后拿到资源并返回,其过程跨越了多个路由器交换机。

在路由器交换机中传递的数据包依据 IP头部中的“信息”进行传递,最终使用传输层协议控制,你的计算机内核就拿到了数据。



数据转发过程:

接下来我们谈谈… 数据转发的底层实现(前面几篇的汇总)

  1. 假设两台主机已经建立了TCP连接。主机对应用数据(Data)压缩加密 ,然后基于传输层协议封装数据 填充源端口跟目的端口(源端口一般是随机端口号),初始序列号和确认序列号字段、标识位、窗口字段等等信息。
  1. 随后进行网络层封装 ,一般使用IP封装时,需要源目IP地址,还有其他元数据:

    • 如果IP报文大于MTU (最大传输单元) 则会被分片。
    • 接着,封装生命周期TTL值(每经过一个三层设备这个值将减一 默认值是255 如果三层设备发送报文时 TTL值减为0 将丢弃数据包 这样就形成了防环机制 )
    • 协议字段标识了传输层所使用的协议,例如上层是TCP,所以该字段的填充值为0x06 (若是UDP 则0x017 ICMP是0x01)
  1. 接下来,数据包被封装成数据帧,需填充源目MAC地址字段。主机首先会查询ARP缓存表,如果有相应MAC地址,则直接封装,如果没有,则发送ARP请求:
  • 不同网段通信时,发送ARP查询 :如果ARP回应不在同一个网段,主机则封装网关的mac地址,对网关进行ARP请求(源MAC是本机,目的MAC是广播地址), 路由器网关设备收到广播数据帧后 ,将源Mac地址记录到本地Mac缓存表中,并进行ARP回复。
  • 如果ARP回应在同一个网段,那么直接使用ARP对目标主机发出请求
  1. 这时, 主机便有了目的网段的物理地址 。主机在链路层封装数据帧时,会遵循一般为以太二型帧标准 (其中的帧头的Type字段为0x0800 表明上层是IP ,ARP是0x0806 )
  1. 途经中途的设备时,他们会做以下操作:

    ① 进行FCS校验 如果不通过就丢弃

    ②对于通过的帧 设备会检查帧中的目的MAC地址 ,若与本地MAC地址不同 ,将进行丢弃 。

    ③经过上面筛选,应该是合格的数据帧 ,这时,将帧头帧尾剥去(解封装),剩下数据报文会根据帧头的Type字段来送到上层对应协议模块去处理。

  1. 网络层的处理 :

    ① 检查IP头部的校验和字段 ,看ip数据报文头部是否完整 ,然后根据目的IP地址查看路由表 ,确定是否能够将数据包转发给目的端

    ② 设备在转发出去之前,会对TTL值进行处理,另外报文大小也不能超过MTU值 否则将分片,网络层处理完成后 报文将被送到数据链路层进行重新封装 ,添加新的源目MAC地址,但是源目IP地址则不会改变。

  1. 通过路由交换的选路和跳转,目的端最终收到数据包,执行以上步骤,接着查看Protocol字段,送往传输层进行处理。传输层会查看数据段头部信息的端口号 ,将数据段头部剥离后,依据其传输层的特性,将剩下的应用数据发送socket这个API接口处理。

  2. 运行于应用层协议的程序(也就是进程)从操作系统的内核态提取或发送数据,最终实现软件的通信。



这个就是数据转发过程中发生的事情,其中省略了物理层、应用层等具体实现。不过计算机网络主要关注的是网络层、传输层,所以有所侧重。

计算机网络系列更新完结啦~ 撒花撒花!! 这里贴出几篇之前写的计算机网络的文章: