美文网首页
网络协议补完计划--UDP协议

网络协议补完计划--UDP协议

作者: kirito_song | 来源:发表于2018-06-25 18:05 被阅读242次

    目录

    • 前言
    • UDP协议概述
    • 套接字
    • 多路复用
    • 多路分解
    • UDP数据包格式
    • UDP校验和的计算
    • UDP工作流程
    • 标准UDP端口

    前言

    参照清华大学出版社-罗军周主编的《TCP/IP协议及网络编程技术》进行学习。
    本篇主要参考第八章:《UDP协议》


    UDP协议概述

    • 传输层协议

      • 位于应用层之下、为不同设备上的应用提供逻辑通讯的功能。进程之间使用该逻辑彼此发送报文、而不需要考虑物理层的差异。
      • 网络层只负责主机与主机之间的传输、而传输层则将网络层(IP协议)接收/发送的数据、正确定向到相应的应用层。
    • UDP协议为应用程序提供不可靠的无连接的服务

    即UDP协议数据包可能会出现丢包、失序等、且不处理重发。这一点和IP协议一样、所以需要使用UDP协议的程序自己处理重发、顺序重组等。
    但这种模式相比可靠的传输服务、效率更高、没有拥塞控制、首部更简洁、对应用负担也更小。

    • 常见的应用
      流式多媒体、DNS等。

    套接字

    从网络向某进程传递数据、或者从进程向网络传递数据的门户。
    传输层和应用进程通过套接字来传递数据。
    主机上的套接字可以有很多个、每个套接字都有唯一的标识符。

    应用层通过传输层进行数据通信时、传输层会遇到同时为多个应用程序进程提供并发服务的问题。
    多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。
    为了区别不同的应用程序进程和连接、许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口、区分不同应用程序进程间的网络通信和连接。

    主要有3个参数:
    • 通信的目的IP地址
    • 使用的传输 层协议(TCP或UDP)
    • 使用的端口号(像房间号一样对应到每一个程序)。

    Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输 层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

    工作原理

    报文到达目标主机时、传输层会检查报文中的目的端口号、并且发送到相应含有套接字的软件中。报文端的数据将通过套接字进入到应用层对应的进程。

    一个简单的例子:

    百度在同一个IP地址(域名)下、可能有多种应用。比如APP(baidu:80)、百度贴吧(baidu:81)、百度金融(baidu:82)。80、81、82代表端口号。
    这个时候、我想要访问百度金融。就需要将对应的套接字(端口号为82)交给百度的主网、再由其根据百度金融的端口号、交给百度金融的应用服务器(监听这baidu:82)。


    多路复用

    针对发送主机

    离散状态信息的汇聚

    同时给多目标发送数据。不同的进程有不同的套接字、从不同的软件中收集数据、再给每一个数据块加上头部、生成报文交给网络层发送。


    多路分解

    针对接收主机

    汇聚状态信息的拆分

    同时接收到多来源发送的数据。将报文段中的数据交付到正确的套接字(将报文定向到正确的进程)。


    UDP数据包格式

    UDP数据包格式

    每行4字节、每个字节8位。

    • 源端口
      可选

    • 目的端口
      目标主机端口

    • UDP包长
      整个UDP包长度、包括头部和数据。
      最小值为8(不包含数据的情况下其余共4*2字节)。IP数据包为20字节

    • UDP校验和
      可选


    UDP校验和的计算

    UDP校验和的计算不仅包括数据包中所有的数据、还包含一个成为伪头部的结构和、会用通过补0的方式来将UDP数据包补足16位的整数倍。
    计算校验和时、UDP协议会先构造该数据包的伪头部结构、然后将UDP数据包的校验和字段设置为0、并将其追加到伪头部末尾。

    UDP伪头部格式

    UDP伪头部格式

    UDP的协议代码为17

    UDP伪头部的意义

    包含了源端口和目的端口
    原始的UDP数据包中没有包含源IP地址和目的IP地址、以便让数据包的接收者确定数据包是来自正确的源地址以及确实是发送给目的主机。


    UDP工作流程

    • 接收方主机
      程序A需要申请一个UDP端口号、例如P
    • 发送方主机
      应用程序准备好数据后、会交给UDP协议进行数据封装、目标端口号字段置位P后交给IP协议在此封装发送。
    • 接收方主机
      IP协议发现协议字段为17、就将IP数据包的数据区交给UDP协议处理。UDP协议发现端口号为P、就将UDP数据包的数据区放置在端口P的队列中。程序A从该队列中将数据依次取出进行处理。


    标准UDP端口

    标准UDP端口-1
    标准UDP端口-2

    一个应用程序如何才能知道该将数据发往那个目标端口?

    • 可以双方提前约定
    • 可以根据不同业务类型使用标准端口(比如http就是80)

    相关文章

      网友评论

          本文标题:网络协议补完计划--UDP协议

          本文链接:https://www.haomeiwen.com/subject/qmxcyftx.html