目录
[一. 传输层](#一. 传输层)
[1. 端口号](#1. 端口号)
[2. 查询命令](#2. 查询命令)
[二. UDP协议](#二. UDP协议)
[1. UDP协议端格式](#1. UDP协议端格式)
[2. UDP特点](#2. UDP特点)
[3. 面向数据报](#3. 面向数据报)
[4. UDP缓冲区](#4. UDP缓冲区)
[5. UDP常用处](#5. UDP常用处)
一. 传输层
1. 端口号
在我们的电脑中运行着许多的程序,计算机会为每一个程序配备一个端口号。主机从网络中接收到数据时,会先自下而上的进行传输传输层处理数据时通过识别端口号来判断数据是传送给哪个程序的。

传输的五大元素由,源端口,源IP,目的端口,目的IP,协议号组成。源IP目的IP确定了需要传输的两台主机,源端口目的端口确定了哪两个程序之间的数据传递,协议号决定了传输协议是采用UDP还是TCP处理数据。
端口号划分
端口号长度是16位,因此端口号的范围就是 0~2^16
0 - 1023:知名端口号,HTTP,FTP等这些广为使用的应用层协议,它们的端口号是固定的。
ssh服务器,22端口
ftp服务器,21端口
telnet服务器,23端口
http服务器,80端口
https服务器,443端口
1024 - 65535:操作系统动态分配的端口号,客户端程序的端口号
一个进程是否可以bind多个端口号
一个进程往往包含许多的功能,需要进行多份协议的传输,因此一个进程可以bind多个端口号。一个进程可以打开多个文件描述符,每个文件描述符都对应一个端口号。
2. 查询命令
cat /etc/services
可以查看文件知名端口号
我们使用端口号时要避开这些端口号
netstat
查看网络状态
n:拒绝显示别名,能显示数字的全部转化成数字
l:仅列出有在listen的服务状态
t:仅显示tcp选项
u:仅显示udp相关选项
a:显示所有选项
p:显示建立连接的相关程序名
pidof
查看服务器进程id
语法:pidof 进程名
二. UDP协议
1. UDP协议端格式
UDP协议是传输层协议,系统通过网络套接字将应用层和传输层进行连接,socket规定传输层传输格式,随后进行bind绑定端口和IP

我们先前学习了应用层,应用层主要是处理实际的数据进行打包,完成打包之后到了传输层会制定相应的传输形式,此处我们介绍面向数据报的UDP协议。
16位源端口号:确定了数据发送的起始端口
16位目的端口号:确定了数据发送的终点端口
16位UDP长度:定义了整个UDP数据报的长度(首部+数据)
16为UDP检验和:判断传输过程中是否发生错误
UDP如何将报头与有效载荷分离
UDP报头固定8字节,在每次读取的时候读取8字节即可,剩下的就是有效载荷,这样就完成了报头与有效载荷分离
UDP数据封装
传输层在接受到应用层的数据后(应用层数据),对应用层数据添加报头进行封装(8字节报头),最终形成数据报(报头+应用层数据)
2. UDP特点
无连接:不需要建立连接,只需要知道目的端口和IP就可以传输
不可靠:没有确认机制,不会进行握手操作,若数据丢失,也没有重传机制
面向数据报:发送只能以一份一份数据报进行发送,接收只能一份一份数据报进行接收,且有最大受限大小。
3. 面向数据报
面向数据报形式不可拆分合并数据。发送方一次性sendto 100个字节的数据,那么接收放也需要一次性接收100 字节的数据
4. UDP缓冲区
UDP没有发送缓冲区,只有接收缓冲区。缓冲区接收发送方数据,不能保证接收的顺序和发送的顺序一致,若缓冲区满了会自动丢弃数据。因此通常会给数据添加编号,进行编号排序,接收到数据后重新编排。
5. UDP常用处
UDP是一种数据量小,数据传输快,传输成本低的协议。通常使用在直播,游戏数据实时传输这类可以允许少量数据损失,对速度要求快的场景

