《网络是怎样连接的》读书笔记 3

网络连接过程 套接字 协议栈 的一些理解3

  1. 包的基础知识

    TCP模块在执行连接,收发,断开各阶段的操作时,会委托IP模块将数据封装成包发送给通信对象。

    • 包的构成:头部 + 数据,往分层模型下走,每一层都对上一层打包,将上一层数据包作为数据,加上自己这层协议的头部

    • 包的传递:出了终端,发送端到接收端的过程是转发接力实现的,中转设备中有个表,按控制头信息中的目的地发往对应的设备,见下图:

      《网络是怎样连接的》读书笔记 3

      客户端内IP协议通过给到的服务器IP地址写入IP头部,IP协议通过这一地址查找到包的传输方向,从而找到下一个路由器R1,然后IP协议会委托以太网协议将包传输过去,操作是将R1的MAC地址写入MAC头部,以太网协议就知道下一目的地了。

      这里的以太网也可以替换成其他如无线局域网WLAN,ADSL,FTTH等其他通信技术,这里体现了分层上实现的解耦的灵活性。

  2. 包收发操作概览

    《网络是怎样连接的》读书笔记 3

    1. TCP模块会在数据块前面加上TCP的头,传递给IP模块,与此同时,TCP将目的地IP地址给到IP模块。

    2. IP模块接收委托后会将TCP模块的数据当作数据内容,再在前面添加IP头部(主要是起始目的地的IP地址)和MAC头部(主要是起始设备的MAC地址),这样包就封装好了。IP模块加了两个头。

    3. 再交给网卡,网卡转为电信号或光信号发送出去。

  3. IP模块的打包过程

    主要是起始地址的数据,IP头的起始IP地址,MAC头的起始MAC地址

    1. 通过本机的路由表,查到路由ip,拿到本地的出口网卡ip和出口网卡的MAC,IP头部就封装好了。

    2. 通过ARP,子网内通过路由ip查到路由MAC(当然有缓存就不用ARP,直接返回路由MAC),目的设备MAC就有了,把MAC头就封装好了。

      问题:怎么以太网的MAC头部也在IP模块封装?

      解释:如果在交给网卡之前就打好包,网卡就只要把包发出去就好了。网卡可以不管是IP包还是ARP包或是ICMP包,他只用执行发送操作。这样就实现了网卡可以支持各种类型的包

  4. 以太网的类型

    • 集线器:广播形式,消息来了整个子网都收到了,根据接收MAC头,不是自己的消息就丢弃了,是自己的消息就接收。
    • 交换机:消息只发送给目标MAC地址,其他设备不会收到此消息。
  5. IP包转为电信号

    1. 网卡驱动拿到IP模块封装的包,复制到网卡内的缓冲区,然后发送到MAC模块

    2. MAC模块将包从缓冲区取出,并在开头加上报头和起始帧分解符,在末尾加上帧校验序列码

      《网络是怎样连接的》读书笔记 3

      • 报头是为了确定包发送的信号频率
      • 起始帧分界符(SFD)即标记这后面是数据包了
      • 帧校验码(FCS)是为了检测数据是不是完整的,类似哈希算法,如果中间数据变了,计算出来的FCS与给的FCS对不上,表示数据错了。
    3. 将上面的数据从二进制转为电信号

      101010……这样的二进制转为电信号就是电压电流的变化了,发送端发出了一个电磁波,接收端接收一个电磁波。

      **问题:**面对一连串的01010111100的二进制转换而来的电信号,怎么确定每个比特间的界限。

      《网络是怎样连接的》读书笔记 3

      如上图a,现实中是没有分隔虚线和101011……这些标识的,只有一条电磁波曲线,怎么能确定一个波峰中有多少个1,这就是界限的问题。

      **解决:**就是发送时加了一条时钟信号(固定频率),如上图b。把这个界限按表中规则加了进去,得到了c。接收时,上面图2.24报头中记录的就是这段信号的时钟频率b,通过分析波形我们能得到b,所以通过 c 和 b,我们就能得到 a 了,再通过SFD,我们就拿到了数据包。再通过FCS就确定了数据包有没有损坏。