【lwip】11-UDP协议&源码分析

目录

  • 前言
  • 11.1 传输层说明
  • 11.2 UDP协议简介
  • 11.3 UDP特点
  • 11.4 UDP端口号
  • 11.5 UDP报文
  • 11.6 UDP伪首部和校验和
  • 11.7 wireshark报文分析
  • 11.8 UDP数据结构
    • 11.8.1 UDP首部
  • 11.9 UDP控制块
  • 11.10 端口号相关
    • 11.10.1 端口号范围
    • 11.10.2 端口号初始值
    • 11.10.3 udp_new_port()端口号申请
  • 11.11 UDP控制块操作函数
    • 11.11.1 udp_new():新建UDP控制块
    • 11.11.2 udp_remove():删除UDP控制块
    • 11.11.3 udp_bind():绑定控制块
    • 11.11.4 udp_bind_netif():绑定网卡
    • 11.11.5 udp_connect():连接控制
    • 11.11.6 udp_disconnect():断开连接
    • 11.11.7 udp_recv():控制块注册接收函数
    • 11.11.8 udp_netif_ip_addr_changed():更新UDP控制块本地IP
  • 11.12 UDP发送数据
    • 11.12.1 udp_sendto_if_src():UDP发送数据基函数
    • 11.12.2 udp_send():UDP发送数据函数
  • 11.13 UDP接收数据
  • 11.14 UDP RAW接口编程
  • 11.15 个人博客
前言主要分析源码实现 。
源码部分 , 本章节也只分析协议实现部分和最原始的南北接口 。
北向协议栈接口和套接字接口的封装后面有独立章节分析 。
即是UDP RAW接口 。
友链:
  • 李柱明博客园https://www.cnblogs.com/lizhuming/p/16880148.html
11.1 传输层说明IP协议只能完成数据报在互联网主机之间的传递 , 交付 。
而传输层主要负责向两个主机中进程之间的通信提供服务 。
传输层的几个重要的任务:
  1. 为两个通信的进程提供连接机制 。即是传输层需要识别两个正在通信的进程 。
  2. 传输层应该提供数据传输服务 。在数据发送端 , 传输层将用户数据进行组装递交给IP层发送出去 。在接收端 , 等待属于同一应用程序的所有数据单元到达 , 然后解析转交给用户 。
  3. 为了提供可靠的传输服务 , 传输层还可以提供流量控制、数据确认等 , 保证两个主机的应用程序之间数据的有效性 。
11.2 UDP协议简介UDP 是 User Datagram Protocol 的简称 , 中文名是用户数据报协议 。
11.3 UDP特点UDP特点:
  1. 无连接、不可靠 。
  2. 尽可能提供交付数据服务 , 出现差错直接丢弃 , 无反馈 。
  3. 面向报文 , 发送方的 UDP 拿到上层数据直接添加个 UDP 首部 , 然后进行校验后就递交给IP 层 , 而接收的一方在接收到 UDP 报文后简单进行校验 , 然后直接去除数据递交给上层应用 。
  4. 支持一对一 , 一对多 , 多对一 , 多对多的交互通信 。
  5. 速度快 , UDP 没有 TCP 的握手、确认、窗口、重传、拥塞控制等机制 , UDP 是一个无状态的传输协议 , 所以它在传递数据时非常快 , 即使在网络拥塞的时候 UDP 也不会降低发送的数据 。
11.4 UDP端口号UDP 报文协议根据对应的端口号传递到目标主机的应用线程的 。
传输层到应用层的唯一标识是通过端口号决定的 , 两个线程之间进行通信必须用端口号进行识别 。
使用“IP 地址 + 端口号”来区分主机不同的线程 。
范围:[0,65535] , 因为只有2字节:
  1. 端口号小于256的定义为常用端口 , 服务器一般都是通过常用端口号来识别的 。任何TCP/IP实现所提供的服务都用[1 , 1023]之间的端口号 , 是由ICANN来管理的;
  2. 端口号从[1024, 49151]是被注册的端口 , 也成为“用户端口” , 被IANA指定为特殊服务使用 。

    经验总结扩展阅读