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

2018-06-25  本文已影响242人  kirito_song

目录


前言

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


UDP协议概述

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


套接字

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

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

主要有3个参数:

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

工作原理

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

一个简单的例子:

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


多路复用

针对发送主机

离散状态信息的汇聚

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


多路分解

针对接收主机

汇聚状态信息的拆分

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


UDP数据包格式

UDP数据包格式

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


UDP校验和的计算

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

UDP伪头部格式

UDP伪头部格式

UDP的协议代码为17

UDP伪头部的意义

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


UDP工作流程


标准UDP端口

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

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

上一篇下一篇

猜你喜欢

热点阅读