目录
一.补充知识
1.1传输层
1.2端口号
1.3netstat
二.UDP
2.1UDP协议格式
2.2UDP如何将有效载荷上交给上层
2.3UDP如何将报头与有效载荷进行分离?
2.4理解报头
2.5.UDP协议特点
2.6UDP缓冲区
2.6基于UDP的应用层协议
一.补充知识
1.1传输层
之前介绍了应用层HTTP协议与HTTPS协议,表示如何对数据进行划分,进行处理,交给用户。其实应用层之后要把数给传输层。传输层负责可靠性传输,确保数据能够可靠地传送到目标地址(UDP不太可靠)
1.2端口号
端口号(Port) 标识了一个主机上进行通信的不同的应用程序 。当主机从网络中获取到数据后,需要自底向上进行数据的交付,数据上交给那个程序就由端口号来决定。在 TCP/IP 协议中 , 用 " 源 IP", " 源端口号 ", " 目的 IP", " 目的端口号 ", " 协议号 " 这样一个五元组来标识一个通信。
端口号范围划分:
0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的,端口号和进程是一一对应的。
1024 ~ 65535:操作系统动态分配的端口号。客户端程序的端口号就是由操作系统从这个范围分配的。
一些知名端口号:
- ssh服务器,使用22端口。
- ftp服务器,使用21端口。
- telnet服务器,使用23端口。
- http服务器,使用80端口。
- https服务器,使用443端口。
我们可以查看/etc/services
文件,该文件是记录网络服务名和它们对应使用的端口号及协议。
一个端口号只能绑定一个进程,但一个进程可以绑定多个端口号
1.3netstat
netstat是一个用来查看网络状态的重要工具 。
- n:拒绝显示别名,能显示数字的全部转换成数字。
- l:仅列出处于LISTEN(监听)状态的服务。
- p:显示建立相关链接的程序名。
- t(tcp):仅显示tcp相关的选项。
- u(udp):仅显示udp相关的选项。
- a(all):显示所有的选项,默认不显示LISTEN相关。
查看TCP相关的网络信息时,一般选择使用nltp
组合选项,例如:
补充:pidof
命令可以通过进程名,查看进程id,比较方便
二.UDP
2.1UDP协议格式
16位源端口号:自己的进程的端口号
16位目的端口号:要访问的目标进程的端口号16位UDP长度:表示整个数据报(UDP首部+UDP数据)的最大长度;就是为了让UDP成为数据报式,而不是流式的。
数据报:报文和报文之间有明显边界,因为有16位UDP长度。
注意:我们在进行网络套接字编程时,所用到的接口是在应用层与传输层之间的,是操作系统提供的。socket接口往下的传输层实际就是由操作系统管理的,因此UDP是属于内核管理的,是操作系统本身协议栈自带的,其代码不是由上层用户编写的,UDP的所有功能都是由操作系统完成,因此网络也是操作系统的一部分。
2.2UDP如何将有效载荷上交给上层
UDP上层有许多应用层协议,应用层的每一个网络进程都会绑定一个端口号,只需把数据上交给与目的端口号相同的进程即可。
2.3UDP如何将报头与有效载荷进行分离?
UDP的报头当中只包含四个字段,每个字段的长度都是16位,总共8字节。因此UDP采用的实际上是一种定长报头,UDP在读取报文时读取完前8个字节后,其余的就是有效载荷。
2.4理解报头
报头就是带有位段的结构体,添加报头时,本质就是将数据拷贝到对应内核的空间当中。
当应用层将数据交给传输层后,在传输层就会创建一个UDP报头类型的变量,然后填充报头当中的各个字段,此时就得到了一个UDP报头。
此时操作系统再在内核当中开辟一块空间,将UDP报头和有效载荷拷贝到一起,此时就形成了UDP报文。
2.5.UDP协议特点
无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;(不可靠可理解为:传输过程UDP报文丢失就真的丢失了。优点是:代码简单,维护简单,效率更高等)
面向数据报:当应用层交给UDP多长的报文,UDP就原样发送,既不会拆分,也不会合并,这就叫做面向数据报 ,不能够灵活的控制读写数据的次数和数量。
2.6UDP缓冲区
UDP没有真正意义上的 发送缓冲区.,会调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作,但它具有接受缓冲区。
原因:如果UDP收到一个报文后是因为上次收到的报文没有被上层读取,而被迫丢弃一个可能并没有错误的报文,这就浪费了资源。UDP的接收缓冲区的作用就是,将接收到的报文暂时的保存起来,供上层读取。但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致(即:UDP报文大概率乱序,因为UDP不保证可靠性); 如果缓冲区满了, 再到达的UDP数据还是会被丢弃。
2.6基于UDP的应用层协议
NFS: 网络文件系统
TFTP: 简单文件传输协议
DHCP: 动态主机配置协议
BOOTP: 启动协议 ( 用于无盘设备启动 )
DNS: 域名解析协议