文章目录
- 一、传输层
- 二、再识端口号
-
- 1、五元组标识一条通信
- [2、 端口号范围划分](#2、 端口号范围划分)
- 3、两个常见问题
- [三、UDP 协议](#三、UDP 协议)
-
- [1、UDP 协议头(固定 8 字节)](#1、UDP 协议头(固定 8 字节))
- [2、UDP 特点(像寄信)](#2、UDP 特点(像寄信))
- [3、UDP 缓冲区](#3、UDP 缓冲区)
- 4、注意事项
- [5、基于 UDP 的常见协议](#5、基于 UDP 的常见协议)
一、传输层
- 作用: 端到端通信,让数据从发送端的进程,准确送到接收端的对应进程。
- 核心: 端口号,用来区分同一主机上的不同应用。
- 两个核心协议:
- UDP:无连接、不可靠、面向数据报,像寄信。
- TCP:面向连接、可靠、面向字节流,像打电话。
总结: 传输层就是用 端口号 + 协议,把数据从 "哪个进程来" 送到 "哪个进程去"
二、再识端口号
端口号(Port)用来区分同一台主机上不同的应用程序,和 IP 一起决定数据发给谁。
1、五元组标识一条通信
源IP + 源端口 + 目的IP + 目的端口 + 协议号 (用 netstat -n 可以查看)

2、 端口号范围划分
- 0-1023:知名端口 ,固定给常用服务:
- SSH:22
- FTP:21
- HTTP:80
- HTTPS:443
- 1024-65535:动态端口,客户端程序由系统自动分配。
可以用指令查看端口号:cat /etc/services

3、两个常见问题
- 一个进程可以绑定多个端口号。
- 一个端口号不能被多个进程同时绑定。
三、UDP 协议
1、UDP 协议头(固定 8 字节)

- 16 位源端口号: 标识发送方进程,数据从哪个端口来。
- 16 位目的端口号: 标识接收方进程,数据要发到哪个端口去。
- 16 位 UDP 长度: 表示整个 UDP 报文(首部 + 数据)的字节数,因此单个 UDP 报文最大只能是 64KB。
- 16 位校验和: 对 UDP 首部和数据进行校验,校验失败的报文会被直接丢弃。
2、UDP 特点(像寄信)
- 无连接: 知道 IP + 端口直接发,不用握手
- 不可靠: 没有确认、重传,丢包也不通知应用层
- 面向数据报: 应用层发多少,UDP 就发多少,不拆包、不合并
- 全双工: 同一个 socket 可以同时读和写
3、UDP 缓冲区
- 无发送缓冲区:调用
sendto直接交给内核 - 有接收缓冲区:但不保证顺序,缓冲区满了会丢包
4、注意事项
- 单个 UDP 报文最大长度 64KB(含首部)
- 传输超过 64KB 的数据,需要应用层手动分包、拼装
5、基于 UDP 的常见协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议
- DHCP: 动态主机配置协议
- BOOTP: 启动协议(用于无盘设备启动)
- DNS: 域名解析协议