TCP-IP-Protocol

图解计算机网络(TCP/IP网络模型)

网络分层

  1. 尽力尽力尽力尽力力**传输到对应目标的对应层
  2. 抽象抽象**的功能
  3. 每层负责不同的功能,网络通信中主要问题是
    1. 差错控制:确保发送者-接收者得到相同的信息
    2. 流量控制:中间节点或者端节点处理能力使得系统陷入bottleneck,导致拥塞
    3. 分段/分段重组:大数据包需要拆分成不同段,每一段送到接收者顺序不一定确定
    4. 复用连接,多个上层通信应用通过一个信道传输数据(信道抢占)
    5. 建立/释放连接
  4. 网络分层
    1. 应用层
    2. 运输层(TCP/UDP)
    3. 网络层(IP)
    4. 数据链路层
    5. 物理层
  5. 每层依赖下一层提供的接口实现本层的功能

应用层

需要解决的问题

  1. 定义应用层数据传输的格式HTML,FTP
  2. 和另一个和另一个*主机上的进程主机上的进程程**如何通信的问题

传输层(内核)

  1. TCP采取机制保证数据包可靠传输给对方
  2. UDP只负责发送
  3. MSS:TCP最大报文段,TCP receiver需要将乱序报文段重组为完整应用层数据
  4. **进程**的数据传输

网络层(内核,路由器)

  1. 端到端到端**的传输,按照最大传输长度MTU限制划分IP报文
  2. 如何区分不同端设备?$IP$地址=网络号+主机号,子网掩码标记了网络号长度
  3. 路径路径路径径**,路由器根据网络号转发数据包

链路层

  1. IP报文基础上添加MAC Head,封装成Data Frame
  2. MAC Head包含sender和receiver的MAC地址,通过ARP获得MAC地址

How Linux receive a Network package

同样采取分层结构,每层功能为

  1. 应用层:提供应用程序(线程)
  2. 传输层:提供端到端的通讯
  3. 网络层:每个网络包封装、分片、路由转发
  4. 网络接口:网络包在物理网络中传播(差错检测,MAC寻址)

Receive a package From OS perspective

  1. 触发中断:设备触发中断告知操作系统

  2. 避免中断导致的开销:NAPI机制(中断+轮询),外设将数据包写入内存,随后触发硬件中断,调用中断处理程序

    1. 网络接口层检查报文合法性,去掉head后调用对应的网络层协议处理函数

    2. 网络层负责判断数据包应该交给上层协议(端设备)还是转发(路由器)

    3. 传输层分析head,得到数据包的

      1. 源地址
      2. 源端口号
      3. 目的地址
      4. 目的端口号

      并找到目的端口号对应的socket线程,拷贝数据到socket缓冲区,发送给等待数据线程一个信号(将其从sleep队列中唤醒)

    4. 应用层将数据从socket缓冲区拷贝到应用层缓冲区

Send a package From OS perspective几乎和上面相反,创建socket同时内核会分配一块空间,拷贝待发送的数据到内核空间,交给传输层

使用UDP和TCP区别在于,TCP中存在重传机制,导致需要实现保存内核区域的一个副本(因为其之后可能被释放),UDP则不用

From Memory Copy Perspective1

  1. 用户内存拷贝到内核内存
  2. TCP保存内核副本
  3. IP层发现数据需要分割成多个packet,将会再次拷贝为多个小的packet
本站访客数人次