TCP和UDP报文详解
一、先说说端口号
TCP和UDP都是位于传输层的协议,传输层负责将数据从发送端传输到接收端。
端口号(Port)标识了一台主机上正在进行通信的一个具体的应用程序,在TCP/IP协议中,使用源IP、源端口号、目的IP、目的端口号、协议号
的五元组来标识一个通信,即我们只要标注出这五个数据,就能唯一确定一条通信线路。
端口号的范围划分是:
- 0~1023:知名端口号,其中HTTP、FTP、SSH等这些广泛使用的应用层协议,端口号都固定在前1024个端口号之中。
- 1024~65535:操作系统动态分配的端口号,客户端程序的端口号,会由操作系统在这个范围内进行分配。
其中知名端口号是为了方便使用,给某些服务器固定分配的端口号:
- SSH服务器:使用22端口
- FTP服务器:使用21端口
- Telnet服务器:使用23端口
- HTTP服务器:使用80端口
- HTTPS服务器:使用443端口
因此用户在写自己的程序使用端口号的时候,应该避免这些知名端口号。
一个进程可以和多个端口号绑定,即这个进程可以通过这些端口号分别建立连接,实现通信,但是一个端口号只能绑定一个进程,假如绑定多个进程,这个端口号在通信时无法判断应该将数据具体交给哪个进程!
二、Linux下查看网络状态的命令netstat
netstat是一个用来查看网络状态的重要工具,如果在Linux服务器的命令行上输入netstat显示没有该命令,则需要通过yum进行安装。
netstat [-nlptua]
命令行参数解释:
- n:拒绝显示别名,能以数字显示的全部转化为数字
- l:仅列出在Listen(监听)的服务状态
- p:显示建立相关链接的程序名
- t:仅显示TCP相关的选项
- u:仅显示UDP相关的选项
- a:(all)显示所有选项,默认不显示Listen相关
三、UDP协议
UDP协议格式:
前两行是UDP的首部,也可以叫做UDP的报头,报头