Fork me on GitHub

Note for Computer Network 4

包收发操作

副标题:阅读《网络是怎么连接的(户根勤)》读书笔记4

IP模块如何将包发给对方

通用流程

  1. 发送方的网络设备负责创建包,即生成含控制信息的头部,然后附上要发送的数据
  2. 接着,包被发往最近的网络转发设备
  3. 然后转发设备会根据头部信息判断接下来应该发往哪里,这个过程会用到一张表,按照头部记录的目的地址在表里查询,根据查到的信息判断接下来应该发往哪个方向
  4. 转发设备层层接力,最后到达接收方
  5. 发送方和接收方统称为终端节点,转发设备称为转发节点或中间节点

扩展流程——TCP/IP网络,用以太网规则传输包

  • 转发设备包括路由器和集线器两种
  • 路由器根据目标地址判断下一个路由器的位置,是按照IP规则传输包的设备
  • 集线器在子网中将网络包传递给下一个路由,是按照以太网规则传输包的设备
  • TCP/IP包包含MAC头部IP头部TCP头部和数据块,IP头部存入下一级路由器的IP地址,MAC头部存入下一级路由器的MAC地址(即以太网地址,是IP协议写入的,使用ARP广播的形式获取),MAC地址也叫物理地址(Physical Address)
  • 例:
    1. 客户端向服务器发包,先经集线器配合自己的一张表读取MAC头部获取下一个路由器甲的MAC地址,根据MAC地址,让以太网进行包的传输
    2. 包会到达下一个路由器甲,路由器有一张IP协议的表,再读取IP头部获取再下一个路由器乙的IP地址,为了将包发给再下一个路由器,就必须要下一个路由器乙的MAC地址,并记录到MAC头部

1

委托操作

  1. 包收发操作的起点:TCP模块委托IP模块发包,过程为TCP模块在数据块的前面加上TCP头部,然后整个传递给IP模块;
  2. 收到委托的IP模块,将包的内容当作一整块二进制数据,并不关心内容,在前面加上IP头部和MAC头部
  3. 封装好的包被交给网络硬件即网卡,网卡会将该数字信息转换成光信号或电信号,以此到达集线器、路由器等转发设备

以太网的3个性质

  1. 接收方的MAC地址代表目的地,并放在包的MAC头部
  2. 发送方的MAC地址用来识别发送方
  3. 使用以太类型识别包的内容

网卡做了啥

  • 网卡驱动从IP模块获取包,将其复制到网卡内的缓存区中,然后向MAC模块发出发送包的命令

  • 接着MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列FCS,如下图:

    2

  • 报头是一串101010…交替出现的规则序列,长度56比特,形成波形用来判断读取时机,加上8比特的起始帧,网卡可以将它作为包的起始位置

  • 另,报头可以用来测量时钟信号,向接收方发送时钟信号的变化周期

  • 数据信号如果连续为1或连续为0时,比特之间的界限就会消失,所以增加时钟信号有助于判断比特之间的界限,所以一般实际传输的信号都是:数据信号和时钟信号异或之后的结果,如下图:

    3

  • FCS用来检查包传输过程中因噪声导致的波形紊乱、数据错误,是通过一个公式对包中从头到尾的所有内容进行计算而得出来的

完整的包发出去

  1. 一种是使用集线器的半双工模式,另一种使用交换机的全双工模式(即可以并行收发)
  2. 半双工中,需要等待信号传输完毕再发送下一组信号:
    1. MAC模块从报头开始将数字信息转换成电信号,然后由PHY(或者MAU,速率100Mbit/s以下叫MAU)的信号收发模块发送出去,每秒将10Mbit的数字信息转换成 电信号发送出去,速率就是10Mbit/s
    2. PHY(MAU)模块将信号转换成可在 网线上传输的格式,并通过 网线发送出去,PHY另一职责是监控接收线路有没有信号进来,没有信号进入时才允许发送,但以太网不会确认对方有没有收到信号
    3. 但出现碰撞的可能性仍较高,因此 必须要让等待的时间相互错开,等待的时间是根据MAC地址生成一个随机数计算出来的
    4. 如果冲突,等待时间延长一倍,然后重试,以此类推,最多重试10次,如果还是不行就报告通信错误
  3. 收包的过程是发包的逆序,但有一些注意点:
    1. MAC模块完成收包工作后,需要使用中断通知计算机收到了一个包:网卡向扩展总线中的中断信号线发送信号,CPU挂起正在处理的任务,然后切换到操作系统的中中断处理程序,中断处理程序会调用网卡驱动,控制网卡执行相应的接收操作
    2. 接收操作一般是判断协议类型,再交给对应协议栈处理,比如TCP/IP协议栈,接着轮到IP模块开始工作,判断是否是发给自己的包,如果发生这样的错误,IP模块会通过ICMP消息将错误告知发送方
    3. 如果接收方IP地址正确,IP协议需要完成分片重组的功能,将多个小包还原成原始包
    4. 然后交给TCP模块,TCP模块查找套接字,找到对应的套接字后根据通信状态执行相应的操作,比如通知应用程序干嘛干嘛

UDP协议的收发操作

UDP协议使用场景

  1. 数据很短的场景,一般一个包就能装下,回复的数据就可以当作接收确认了,不再需要专门的接收确认包,也就没有窗口机制,比如DNS的查询操作
  2. 对实时性要求很高的场景,比如发送音频和视频数据,可以忍受少许丢帧,但不能忍受卡顿

完成全书第2章,334页

-------------The End-------------