一、端口号
1.什么是端口号
端口号(Port)标识了一个主机上进行通信的不同的应用程序;

在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);

服务器的同一个服务会使用多进程或者多线程的方式,对于不同的客户端请求同一个服务器的同一个端口号,此时服务端会根据IP地址进行辨别是哪一个客户端发起的请求,而对于同一个客户端(浏览器打开两个页面访问同一个服务)发起两个请求,此时会根据端口号来进行辨别。
2.端口号范围划分
0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.
1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的.
3.认识知名端口号(Well-Know Port Number)
有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些固定的端口号
ssh 服务器, 使用22端口
ftp 服务器, 使用21端口
telnet 服务器, 使用23端口
http 服务器, 使用80端口
https 服务器, 使用443
执行下面的命令, 可以看到知名端口号
cat/vim /etc/services
我们自己写一个程序使用端口号时, 要避开这些知名端口号
这里有两个问题:
1.一个进程是否可以bind多个端口号?
2.一个端口号是否可以被多个进程bind?
我们知道,数据是自底向上进行传输的,所以要保证端口号到进程的唯一性,所以一个端口号只能被一个进程bind,而一个进程可以bind多个端口号,比如bind两个端口号,一个用来传输数据,一个用来传输指令。
4.netstat
netstat是一个用来查看网络状态的重要工具
语法:netstat [选项]
功能:查看网络状态
n 拒绝显示别名,能显示数字的全部转化成数字
l 仅列出有在 Listen (监听) 的服務状态
p 显示建立相关链接的程序名
t (tcp)仅显示tcp相关选项
u (udp)仅显示udp相关选项
a (all)显示所有选项,默认不显示LISTEN相关
5.pidof
在查看服务器的进程id时非常方便.
语法:pidof [进程名]
功能:通过进程名, 查看进程id
二、UDP协议
1.UDP协议端格式

我们学习协议的时候,需要分出报头和有效载荷,回答如何进行解包(如何将报头和有效载荷进行分离)以及如何进行分用
UDP采用固定报头的方式,报头占用8个字节,剩下的都是有效载荷,比如我们在应用层发送的"你好"就会保存在UDP的数据中。
16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度;
如果校验和出错, 就会直接丢弃;
我们知道,Linux内核是用C语言写的,而报头是OS层面定制的协议,所以所谓的报头其实就是一种结构化数据对象。对于UDP的报头我们可以采用如如下的结构体或者位段进行表示(伪代码)
// 结构体
struct udp_hdr
{
uint16_t src_port;
uint16_t dsc_port;
uint16_t length;
uint16_t check;
};
// 位段
struct udp_hdr
{
unsigned int src_port:16;
unsigned int dsc_port:16;
unsigned int length:16;
unsigned int check:16;
};
对于数据的向下进行封装的过程我们可以采用如下伪代码进行表示:
char* hdr = malloc(XXXX);// 为报头开辟空间
char* message;//应用层传下来的数据
char* start = hdr + sizepf(udp_hdr);//指向有效载荷地址的开始
strcpy(start,message,strlen(message));//将数据拷贝到有效载荷的空间中
// 设置报头的属性
(struct udp_hdr)hdr->src_port = XXX;
(struct udp_hdr)hdr->dsc_port = YYY;
(struct udp_hdr)hdr->length = XXXX;
(struct udp_hdr)hdr->check = ZZZ;
这样就完成了数据从应用层但传输层的封装。
2.UDP的特点
UDP传输的过程类似于寄信.
无连接:
TCP与UDP协议详解及对比

本文详细介绍了计算机网络中的端口号、UDP协议和TCP协议。阐述了端口号的概念、范围划分及常用工具。分析了UDP协议的特点、缓冲区等,列举基于UDP的应用层协议。重点讲解TCP协议的段格式、确认应答、超时重传等机制,对比了TCP与UDP,并探讨了listen第二个参数对连接队列的影响。
最低0.47元/天 解锁文章
6824





