端口号
端口号的范围划分:
范围 | |
---|---|
0~1023 | 知名端口号:一些著名的协议,它们的端口号都是固定的. |
1024~65535 | 普通端口号:操作系统动态分配的端口号.例如:客户端程序的端口号,就是由操作系统从这个范围分配的 |
常见的著名端口号:
- ssh服务器:22号端口
- ftp服务器:21号端口
- telnet服务器:23号端口
- http服务器:80端口号
- https:443端口号
注意在我们编程过程中使用的端口号尽量不要使用知名端口号,因为可能其他的进程正在使用就会冲突.
查看网络状态的指令:
netstat + [选项]
常用选项:
- a(all)显示所有选项
- u(udp)仅显示与udp相关的选项
- t(tcp)仅显示与tcp相关的信息
- p显示建立相关链接的程序名
- l仅显示在Listen(监听)的服务状态
- n拒绝显示别名,把能显示的数字全部转化为数字
由进程名查看进程的方法:
语法:pidof[进程名]
功能:通过进程名查看进程ID
UDP协议 |
UDP协议端格式:如下图所示
图中:
在UDP首部中有一个16位的udp长度:表示UDP的首部+UDP的数据的最大长度(对于当今世界的互联网环境而言,64k是一个很小的数字.那么如果有一个很大的业务需要使用UDP协议时,就需要在应用层将业务手动分包,多次发送,并在接收端拼接).
16位UDP的校验和:在这儿只用的是CRC循环冗余校验法.(注意:在Linux操作系统中可以使用MD5sum来生成文件的校验和)
UDP协议的特点: 1.无连接:只要知道对端的IP和端口号就可以直接进行传输而不需要建立连接.(例如:生活中我们发短信,在发短信时,不管对方会不会收到直接发送短信) 2.不可靠:没有确认机制,没有重传机制;例如:如果因为网络故障而无法发送到达对方,但是UDP协议也不会给应用层发送任何错误的消息. 3.面向数据报:不能够灵活的控制读写的次数和数量.应用层交给UDP多长的报文,UDP会原样发送而不会做出任何合并和拆分. 4.全双工:UDP的socket既可以读也可以写. |
对于UDP协议的缓冲区:
其实UDP没有真正的缓冲区,调用sendto函数时会直接将数据交给内核,有内核将数据传送给网络层协议进行后续的传输.
但是UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP的顺序和发送UDP的顺序一致.如果UDP的接受缓冲区满了,那么就会将再收到的数据丢弃.
一些常见的基于UDP的应用层协议有:
- NFS:网络文件系统.
- TFTP:简单文件传输协议.
- DHCP:动态主机协议配置
- DNS:域名解析协议