一、UDP、linux基础介绍套接字:就是IP地址+端口号
IP地址:4字节 端口号:2字节,也就是说范围是0~65535 端口号分为:知名端口号、一些固定的端口号 知名端口号 0--1023:http,ssh,ftp,telnet等一些协议端口号都是固定的,对于操作系统来说是不能对其进行分配的
一些固定的端口号
ssh服务器,使用22端口 ftp服务器,使用21端口 telnet服务器,使用23端口 http服务器,使用80端口 https服务器,使用443端口 操作系统动态分配的端口号 客户端服务器的端口号,这个范围的端口号操作系统可以对其进行分配
查看端口号 less /etc/services //就可以查看Linux下所有的端口号了 IP地址的理解: IP地址用来标识一个主机 端口号的理解: 端口号就是用来告诉操作系统要对于那一个进程进行操作,也就是说端口号就是用来标识一个进程 一个端口号只可被一个进程所占用,但是一个进程可以拥有多个端口号,也就是进程和端口号是一对多的关系 当我们写一个程序使用端口号的时候,要避开这些知名端口号 【问题】 (1)一个进程是否可以bind多个端口号呢? 可以,因为一个进程可以打开多个文件描述符,而每一个文件描述符都对应着一个端口号,所以一个进程可以绑定多个端口号 (2)一个端口号是否可以被多个进程bind? 不可以 如果一个进程先绑定一个端口号,然后再fork一个子进程,这样的话就实现了多个进程绑定一个端口号,但是不同的进程绑定同一个端口号是不可以的 TIME_WAIT状态,服务器不能立即重启也说明不用进程不能同时绑定同一个端口号 (3)多个进程可以监听同一个端口号吗? 可以。监听之前要进行创建套接字->绑定ip::端口号->监听。我们可以在bind之前使用setsockopt函数,设置套接字选项,其中就包括REUSEADDR这个选项,表明多个进程可以复用bind函数中指定的地址和端口号 所以套接字就可以准确的标识一台主机上的一个进程,从而完成计算机之间的通信(主机A的某个进程与主机B上的另一个进程进行通信 ) 网络字节序转换: 对于数据在网络中传输的时候有着自己遵循的传输规则大端传输 对于主机上的数据的传输序列有着两种: 大端:即高位字节序放在低地址上 小端:即低位字节序放在低地址上 传输:均是先传输低地址上的数据然后是高地址上的数据 所以对于主机上的数据传输的时候传输到网络上的时候有可能导致数据错误(例如主机上是小端的时候,所以需要进行转换) 转换函数: uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16 hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);h:表示主机host namen:表示网络networkl:表示4字节longs:表示2字节short 地址转换函数: 字符串转化为in_addrin_addr_t inet_addr(const char* strptr)in_addr转化为字符串char* inet_ntoa(struct in_addr inaddr) 具有不可重入性,也就是不可多次调用,因为该函数自己在静态区开辟一块空间用来存放IP地址字符串的 UDP协议: UDP协议端格式 
- 16为UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度(64KB)
- 检验和:如果校验和出错,就会直接丢弃(检验的是把首部和数据部分一起都检验)
- 校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还要在重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检验是否出错。
- 源端口号:在对方回信是选用,不需要时可用全0
- 目的端口号:在终点交付报时必须要用到
- 长度:UDP用户数据报的长度,其最小值是8(仅有首部)
UDP的特点: - 无连接:直到对端的IP和端口号就直接进行传输,不需要建立连接
- 不可靠:没有确认机制,没有重传机制;因为没有网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息
- 面向数据报:不能够灵活的控制读写数据的次数和数量
- 控制选项较少,数据传输过程中延迟小,数据传输效率高
- 面向数据报
- 应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并
例:用UDP传输100个字节的数据 如果发送端调用一次sendto,发送100个字节。那么接收端也必须调用对应的一次recvfrom,接收100字节;而不能循环调用10次recvfrom,每次发送10个字节 UDP的缓存区 UDP没有发送缓存区,调用sendto之后会直接交给内核,由内核 下载地址: Spring Boot使用Docker分层打包的设置方法 Linux体检,了解你的Linux状态(网络IO,磁盘,CPU,内存) |