【计算机网络】Udp详解

前言

上几文章我们讲解了应用层协议Http和Https,要知道应用层协议有很多,这些都是程序员自己定制的,而真正要传输的时候,是要在操作系统的传输层进行的,今天我们就来学习一下传输层协议Udp的

标识一个通信

要进行跨网络通信,就要标识一个网络通信的唯一性

通常需要:源IP、目的IP、协议号、源端口号、目的端口号这五个信息来标识一个网络通信。

端口划分

  • 0-1023
    属于知名端口号,Http、FTP、SSH等广为使用的应用层协议,端口号是固定的。

    • SSH,使用22端口
    • FTP,使用21端口
    • telnet,使用23端口
    • Http,使用80端口
    • Https,使用443端口

可以使用以下命令查看知名端口号:

cat /etc/services
  • 1024-65535
    操作系统动态分配对策端口号,客户端程序的端口号就是从这里面随机分配的。

我们设计端口的时候,要避开这些知名端口。

netstat

是一个查看网络状态的工具

选项:
- n,拒绝显示别名,能够数字化就全数字化
- l ,只列出在监听状态(listen)的服务状态
- p,显示建立相关链接的程序名
- t ,只显示tcp相关
- u,只显示udp相关
- a,显示所有选项,默认不显示listen相关

pidof

通过进程名查看进程id

Udp协议端格式

在这里插入图片描述

可以看到,Udp报头长度总共八个字节,其中,十六位Udp长度表示数据报的报头+报文总共的大小,十六位校验和出错会直接将数据报丢弃。

而且由于十六位Udp长度的限制,TCP能传输的大小是有限的。一个Udp能传输的数据最大长度是64k,超过就需要在应用层手动分包多次传送,并在接收端手动拼装。

Udp特点

  • 无连接,不需要建立连接,知道ip和端口号就能传输
  • 不可靠,没有确认传传机制,udp不反回任何错误信息
  • 面向数据报,不能灵活控制读写数据的次数和数量
  • 简单。

面向数据报

应用层交给Udp多长的报文,Udp就要直接发送,不能拆分和并,例如:

发送端调用sendto,发送100字节,那么接收端必须调用一次recvfrom100字节,不能循环调用recvfrom,每次10字节

Udp缓冲区

Udp没有真正的发送缓冲区,调用sendto会直接将要发送的数据交给内核,由内核将数据传输给网络并进行后续动作

Udp具有接收缓冲区,但是这个缓冲区不保证Udp数据报的顺序,如果缓冲区满了,照样会被丢弃

也因此,Udp socket 既可以写也可以读,是全双工的。

基于Udp的协议

  • NFS,网络文件系统
  • TFTP,简单文件传输协议
  • DHCP,动态主机配置协议
  • BOOTP,启动协议
  • DNS,域名解析协议

猜你喜欢

转载自blog.csdn.net/m0_73209194/article/details/132273831