网络编程(11):三次握手和四次挥手部分细节(后续补充)

  • 关于listen

服务器如果不listen,TCP协议栈就无法从CLOSED状态变成LISTEN状态,客户端发起连接,TCP协议栈会直接返回RST报文,从而导致客户端连接失败

  • 关于accept

accept发送在三次握手完成之后,从全连接队列中取出一个节点分配sock文件句柄,如果没有accept还是可以完成三次握手,这些都是协议栈完成,accept是在用户空间中发起的系统调用,其中连接队列里面的节点是TCB控制块

  • 四次挥手变三次挥手

当没有数数据要发送,且开启了TCP延迟确认机制(默认开启),第二次挥手和第三次挥手会合并

  • 开启syncookies的缺点

虽然可以避免syn flood攻击,但是没有在半连接队列上挂载连接信息,编码解码cookies消耗cpu资源,且如果发送丢包,服务器不会重发第二次挥手

  • 当客户端和服务端同时调用close

TCP状态里面有个CLOSING状态,当TCP处于FIN_WAIT1的时候接收到了FIN,就会进入closing状态,在等待对方的ACK就可以进入TIME_WAIT状态了

  • 客户端出现大量FIN_WAIT2状态

等价于服务端出现大量CLOSE_WAIT状态,就是服务端可能没有及时close,发送FIN报文,这是编码逻辑有问题导致的,但是也没有直接从FIN_WAIT2进入CLOSED的状态,所以需要kill掉进程

你可能感兴趣的:(网络编程,网络)