总结
StandardSocketOptions是一个final类,定义了标准socket选项
Socket套接字选项
选项名 | 作用 |
---|
SO_BROADCAST | 启用表示允许传输广播数据报,指的是允许使用IPv4的广播地址发送数据报,默认是禁用 |
SO_KEEPALIVE | 启用表示保持连接活跃,即持久连接,在连接空闲时操作系统可以使用保持活动机制定期探测连接的另一端,一般时空闲2小时后,发送第一个探测分组,如果没收到回应每隔75秒发送一个探测分组,最多重复发送9次,即当空闲后7875s才会真正断开连接,默认是禁用 |
SO_SNDBUF | 套接字发送缓冲区的大小,单位是字节,如果是使用UDP,发送缓冲区可能会限制UDP的发送的数据报大小,缓冲区的默认值和绑定套接字后能否修改缓冲区都取决于操作系统,绑定套接字之前可以修改 |
SO_RCVBUF | 套接字接收缓冲区的大小,单位是字节,如果是使用UDP,接收缓冲区可能会限制UDP的接收的数据报大小,缓冲区的默认值和绑定套接字后能否修改缓冲区都取决于操作系统,绑定套接字之前可以修改,如果是TCP/IP协议,当向远程对等方公布TCP接收窗口的大小时,可以使用套接字接收缓冲区的大小 |
SO_REUSEADDR | 启用重复使用地址,启用后表示当使用该套接字地址的前一个连接处于TIME_WAIT状态时,此时套接字也能绑定到该套接字地址,就是消除两MSL(Maximum Segment Live 最大报文段生存时间)的等待时间 |
SO_REUSEPORT | 启用重复使用端口,对于面向流(TCP/IP)的套接字,此套接字选项通常允许将多个侦听套接字绑定到同一地址和同一端口。对于面向数据报(UDP)的套接字,套接字选项通常允许将多个UDP套接字绑定到同一地址和端口。 |
SO_LINGER | 启用表示如果存在数据,则在关闭时停留,指的是调用close()方法后操作系统尝试传输未发送的数据或确定无法传输数据时阻塞的超时时间,如果设置值小于0,调用close()方法后不会等待未发送的数据被发送,此选项只用在BIO阻塞套接字的情况下 |
Socket套接字选项(IP相关)
选项名 | 作用 |
---|
IP_TOS | 设置Internet协议(即)头部中的服务类型(ToS)八位,表示该数据报所需的服务类型,如果是视频、语言流则要求低时延,如果是文本、文件流则要求无误差,但时延可以大点 |
IP_MULTICAST_IF | 设置IP协议多播(也称为组播)数据报的网络接口 |
IP_MULTICAST_TTL | 设置IP协议多播数据报的生存时间 |
IP_MULTICAST_LOOP | 设置IP协议多播数据报的环回,环回,就是在发送到网卡后,网卡再发回给自己,发送一个多播包,接受回环包,然后获取发送包的IP地址等,这样就得到了本地的IP地址 |
Socket套接字选项(TCP相关)
选项名 | 作用 |
---|
TCP_NODELAY | 禁用Nagle算法,Nagle算法是通过合并短段并提高网络效率,当我们只要发送1字节的数据,却需要40字节的TCP/IP头部时,浪费会非常大 |
Nagle算法的规则
- 如果包长度达到MSS(Maximum Segment Size 1460字节),则允许发送
- 如果该包含有FIN,则允许发送
- 设置了TCP_NODELAY选项,则允许发送
- 未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
- 上述条件都未满足,但发生了超时(一般为200ms),则立即发送