《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法

1--Timewait状态

        对于服务器端/客户端,当一端结束连接时,会向另一端发送 FIN 消息;两端的在经过四次挥手过程后,其 Socket 不会马上消除,而是会处于一个 Time-wait 状态的阶段,此时 Socket 拥有的端口号并没有得到释放,因此不能使用相同的端口号

        只有先断开连接的(先发送 FIN 消息)的主机才会经过 Time-wait 状态

        通过 setsockopt() 函数来更改 SO_REUSEADDR 的状态(设置为TRUE)可以将处于 Time-wait 状态的 Socket 端口号重新分配给新的 Socket,具体代码参考:代码实例

2--Nagle算法

        Nagle 算法可以防止数据包过多而导致的网络过载问题,其应用于 TCP 层;

        Nagle 算法规定:只有收到前一数据的 ACK 消息时,Nagle 算法才会发送下一数据;

        一般情况下,不使用 Nagle 算法可以提高传输速度,当传输大文件时可以禁用 Nagle 算法,通过 setsockopt() 函数来设置 TCP_NODELAYTrue禁用 Nagle 算法

// 禁用 Nagle 算法
int opt_val = 1;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (void*)&opt_val, sizeof(opt_val));

// 查看 Nagle 状态
int opt_val;
socklen_t opt_len;
opt_len = sizeof(opt_val);
getsockopt(sock, IPPROTO_TCP, TCP_NPDELAY, (void*) &opt_val, &opt_len);

你可能感兴趣的:(网络编程笔记,tcp/ip)