zoukankan      html  css  js  c++  java
  • 数据包在发送端局域网中的传输

    本章是‘网络是怎么连接的--读后感’第二章

    前言

      本章是系列博客的第三章;第一章讲数据发送的场景;第二章主要讲叙消息是如何发送出去的.;本章主要阐述数据包在客户端局域网中的传输。

    实现需求

    本章讲数据在客户端局域网中传输时;数据会经历哪些操作;需要使用哪些设备:

    • 数据在网线和集线器中的传输
    • 数据传输中交换机的包转发操作
    • 数据传输中路由器的包转发操作
    • 补充:路由器的其他功能

    正文

    第二章讲了数据包从终端发送出来;包发送出来之后在发送端局域网中的流向如下:

    补充:集线器在家庭网络中很少见,家庭一般装的是路由器;这是因为现在的路由器一般是具有集线器和交换机的功能。但是在大型商用网络中集线器交换机还是存在的。

    一、数据在网线和集线器中的传输

      由上图可知数据在流出终端后首先流经的是集线器(也有可能是交换机,交换机被称为交换式集线器);是在网卡的PHY模块的rj45接口作为电信号流出的;最开始信号传输其实不是通过网线的,后来为了降低信号衰减(主要是减少感应电流对电信号传输的影响),通过使用双绞线(网线每个端口都是有两个线绞在一起)来实现;集线器/交换机接收包的操作和终端类似;因为集线器也是通过网卡来实现该操作的;确定目的地集线器则是在终端上通过arp协议来实现的,上一章讲了。

      集线器收到数据包后会通过广播的方式将包传输给连接该集线器的所有设备,数据输入设备除外;也就是通过网卡将数据发送给连接它的交换机,路由器的网卡接口(rj45接口);这也就是数据传输为何要用网线的一个原因。接收设备则会通过网卡将接收到的包转为数据包;在提取包的头部信息来确认包是否是发给自己的,如果不是就丢弃,是的话还会通过mac模块来查看以太包的fcs尾部是否正常,如果不正确代表数据失真超出了允许范围,则会将包丢弃;由于丢弃后不会向发送端响应ack确认包,因此一段时间后tcp就会重新发包。

    二、数据传输中交换机的包转发操作

      数据传输到交换机后的操作,和正常网卡中收发有点区别;首先数据通过rj45接口流入网卡的PHY,在PHY中将数据转换为通用电信号,在通过mac模块将电信号转为数字信号,在对以太包的尾部fcs进行检查;注意在交换机中MAC模块本身不具有mac地址,因此在以太网中交换机连接的终端或集线器将包转发过来时,它是没有确认机制的(只要有包发给它,它都会接收)。

      接收到包后,通过交换机内置的MAC表来确认包转发给哪个端口,实现方式是:

    1. 由于收到的以太包的MAC头部是含下一个目的地的mac地址的;
    2. 交换机的mac表又含有这个mac地址(也就是接收设备)和其对应的交换机发送端的端口;
    3. 因此根据端口对应的设备就能将数据包发送到该目的地,发送的方式和网卡完全一致;
    4. 交换机的mac表中的数据在包转发过来时,会将发送端的mac和端口记录在该表中;因此在arp协议广播时就记录了接收方的mac和端口(本质是一个数据中转环节);
    5. 补充:交换机的全双工模式可以同时发送和接收信号;

    三、数据传输中路由器的包转发操作

      数据从集线器/交换机流出后会传输到路由器;和交换机的可有可无不同,如果设备需要接入互联网那么路由器是必不可少的;网络中存在众多路由器时,如何确认信号传输的目的路由器呢?在终端通过路由表中的IP地址来确定下一个目的路由设备,知道下一站的路由器IP后通过arp协议就能获取到该路由器的mac地址;根据以太网协议就能将数据包传输到该路由器了。

      数据传输到该路由器后通过网卡来讲电信号转为数字信号;在通过mac模块检查包失真情况;正常则通过IP来进行包的转发,转发实现如下:

    1. 通过查询该路由器的路由表(表中含有包目的地址,子网掩码,网关,接口,跃点等信息);
    2. 注意子网掩码是用来确认目的地址的网络号和主机号的;子网掩码一般是(255.255.255.0形式,255对应的IP位数是IP地址的网络号,0对应的主机号);
    3. 因此根据目标地址,子网掩码,和网关地址(下一个路由器的IP地址);就能确定传输的下一个目标,以及传输的路径;注意接口是指端口,通过路由表中的IP能确认数据输出的端口。
    4. 知道下一个目标的IP和发送的端口就能通过arp协议获取下一个路由的mac地址;通过这些信息来构建以太网包然后通过网卡的对应端口将包传输出去。
    5. 下一个路由器接收到包后则先通过PHY和mac模块将信息重电信号转为数字信号,然后比对以太网包的mac地址和fcs确认包是否是合法的,如果还有路由的话就在进行转发;
    6. 注意在互联网中路由器将数据传给下一个路由设备一般不是通过网线的;这在第四章讲互联网时会阐述;
    7. 补充:当路由器的子网掩码是0.0.0.0时,代表包会传输到默认网关(可能是互联网的接入路由器上);
    8. 补充:包是有有效期的;这是为了避免包在传输过程中陷于死循环而长期占有带宽,通过在包的IP头部加入ttl字段(一般默认设定值为64/128),每经过一个路由器值减1;最后为0,则丢弃包;
    9. 路由器端口连接的不一定是路由器,还有可能是其他线路(比如接入路由器bas连接电话网),不同的网络传输协议可能不同,所能允许的包长度也不一样,因此有时候需要讲包切分;根据协议允许的最大传输长度MTU,将以太包视为一个完整的数据包来进行拆分。
    10. 路由器和交换机关系:路由器是基于IP协议的,交换机是基于以太网协议的;而IP本身是不具有传输包的能力;因此路由器实际是负责将包送达到通信对象这一完整过程;而实际将包传给下一个路由器是由路由器中的交换机模块负责的。

    四、补充:路由器的其他功能

    • 路由器的地址转换
    • 包过滤功能

    ①地址转换

    应用场景:不同公司内网地址和家庭地址等往往有重复地址,比如192.168.0.125这个地址全球就可能有很多人在用;而IP在互联网中又不能重复,那是如何实现的呢?如下:

    • 全球的运营商/isp(网络服务提供商),为解决网络用户过多,IP不足的问题;通常会拿出一些地址作为私有地址(这些地址是固定的,且一般可重复)。
    • 在私有地址的用户向互联网发起请求时,数据包一般会先流入路由器,路由器中含有地址转换的模块;
    • 地址转换模块管理着地址转换表,通过表里面预先设定的记录会将含有私有地址的数据包的IP头部中的IP地址转为设定的公有地址,在将数据传输到以太网中;
    • 注意地址转换表中一般记录了‘公有地址IP,公有地址端口,已经对应的私有地址IP和私有地址端口’;不同的私有地址可能对应相同IP的公有地址,但对应的端口一般不同(这是为了区分私有地址而设计的,不同的地址通过同一IP的不同端口传输数据)
    • 接收互联网的响应和发送正好相反;公有地址路由器通过收到响应数据的端口来确定数据是发给哪个私有地址,通过地址转换模块将包IP转为私有地址IP进而来发送响应数据

    ②包过滤功能

      包过滤功能正是基于地址转换的设计来实现的;通过上方的地址转换可以看出互联网是无法直接访问局域网中的设备的(因为在不知道私有地址情况下无法通过地址转换);同时还可以在路由器上根据包的mac地址,IP地址,tcp头部信息通过防火墙类软件来配置过滤信息来控制包的收发。

  • 相关阅读:
    Spring 09 : AOP实例
    Spring08 AOP概念
    Spring 07 : 动态代理
    Spring06 Spring+Junit
    Spring05 : 基于注解的IOC
    Spring03 : 依赖注入
    jupyter修改python核(使用不同的python虚拟环境)
    线性代数的本质——引入几何视角
    图像的去雾与加雾
    从MATLAB看一个IDE应该具有的素质
  • 原文地址:https://www.cnblogs.com/1009gavin/p/9254922.html
Copyright © 2011-2022 走看看