传输层协议——UDP

小明 2025-05-03 15:55:35 7

文章目录

  • 1. 认识知名端口号
  • 2. netstat
  • 3. pidof
  • 4. UDP协议
    • UDP协议端格式
    • UDP的特点
      • 面向数据报的理解
      • ���冲区理解

        1. 认识知名端口号

        ssh服务器, 使用22端口

        ftp服务器, 使用21端口

        telnet服务器,使用23端口

        http服务器, 使用80端口

        https服务器, 使用443端口


        0-1023: 知名端口号,HTTP、FTP、SSH应用层协议,端口号是固定的

        1024-65535 :操作系统动态分配的端口号,客户端程序的端口号,就由操作系统从这个分为分配的

        2. netstat

        netstat 是一个用来查看网络状态的重要工具

        输入 netstat -nltp

        n :拒绝显示别名,能显示数字的全都转化为数字


        若输入 ltp,则发现不会显示数字,而显示对应的别名

        l : 只查看 listen 状态


        输入 netstat -ntp

        t:只查TCP

        p:显示更多的进程信息


        若将p去掉,输入 netstat -nt

        就不显示对应的PID这一列的信息了


        若输入 netstat -np 即将系统中的协议基本上都查出来了


        输入 netstat -nup ,只查udp


        输入 netstat -naup ,显示所有udp服务

        a:显示所有的条目

        3. pidof

        在服务器查看服务器的进程id时,非常方便

        输入 pidof +进程 ,获取对应进程和子进程的PID

        4. UDP协议

        UDP协议端格式

        有效载荷一定是上层——应用层 给的,上层通过系统调用 把数据拷过来的

        UDP报头的宽度是0-31,表示报头所对应的字节数 (4字节)


        1. 报头和有效载荷如何分离?

        报头是固定长度 8字节,剩下的就是有效载荷

        通过16位UDP长度,整体 减去 8字节 即 有效载荷的长度


        2. 有效载荷如何做到向上交付的?

        UDP报头中包含16位目的端口号,将一个报文发送到主机上,根据目的端口号向上交付给应用层,绑定该端口号的进程


        报头(协议)的本质:结构化数据

        基于 struct 有两种数据类型,一种为结构体,另一种为位段

        struct udp_header 结构体 内部 包含 源端口号、目的端口号 、udp长度、校验和


        借助位段的方式,取整形int的4字节中的16个比特位


        将缓冲区数据从应用层拷贝给操作系统内部

        提供一段缓冲区,定义一个指针p,去指向缓冲区

        因为报头大小是固定长度8字节,让p向后移动8个单位

        再将应用层的数据拷贝到对应的位置中


        再将指针p,指向最开始位置,并将p强转成 struct udp_header类型 ,指向结构体中的源端口号、目的端口号 、udp长度、校验和


        该报文经过网络,经过协议栈被对方收到了

        再定义一个指针s,,让s+8,再次指向有效载荷


        将s强转成 struct udp_header类型 ,指向结构体中的源端口号、目的端口号 、udp长度、校验和

        UDP的特点

        无连接:知道 对端的IP和端口号 就直接传输,不需要连接

        不可靠:若网络故障段无法发送对方,UDP协议也不会给应用层返回任何错误信息

        面向数据报:不能够灵活的控制读写数据的次数和数量

        面向数据报的理解

        因为UDP有自己固定的报头长度8字节,所以UDP能够知道自己的有效载荷多长

        不靠上层,在底层就自动知道报文和有效载荷的长度

        所以就能保证向上交付的 一定是独立的、完整的 有效载荷

        不用自己处理,只要发的是完整的,收的就是完整的,对方发几次,收几次

        由底层交上来,独立的报文,称为面向数据报

        即应用层给UDP多长的报文,UDP原样发送,既不拆分,也不会合并

        缓冲区理解

        UDP对应数据一定是完整的,所以有数据直接交给下层

        所以UDP不需要 发送缓冲区

        收到一个保文,可上层来不及处理,就需要接收缓冲区

        该缓冲区 并不是用来保证可靠性,而是尽可能保证不要丢包,如果缓冲区满了,再达到的数据就会被丢弃

        如:在淘宝上买了五件商品,编号为1-5,先买的是1号商品,时间是不确定的,所以1-5号 谁先谁后到 是不确定的

        这种情况称为 接收报文出现乱序的情况

        乱序是不可靠的表现,所以UDP不考虑

        即UDP接收缓冲区,但不保证 接受报文是有序的

The End
微信