TCP协议_服务端

SYN:同步序列编号(Synchronize Sequence Numbers),仅在三次握手建立TCP连接时有效,表示一个新的TCP连接

ACK :确认编号 (Acknowledge Number),是对TCP请求的确认标志,同时提示对端系统已经成功接收了所有的数据。

Seq:   序列号(Sequence Number)

FIN:   结束标志 (Finish)

一般的服务器都是7*24小时提供服务,并且面向多个客户端,所以一般情况下建立和断开TCP连接都是由客户端发起的。服务器监听函数收到客户端请求,在完成三次握手之后将syn从listen队列放入accept队列,客户端可以和服务端互相发送数据

因为网络信号的发送需要时间,通常延时从几ms到几十ms不等,网络延时即为网络IO。服务端的监听和接收数据,以及客户端接收数据都为阻塞操作。

当客户端向服务端发送断开连接的请求时,此时可能两端还在传输数据,需要服务端确认后才能断开请求,所以需要服务端向客户端发送两次确认。首先发出FIN的一侧,如果给对侧的FIN响应了ACK,那么就会超时等待2*MSL时间,然后关闭连接。在这段超时等待时间内,本地的端口不能被新连接使用;避免延时的包的到达与随后的新连接相混淆。RFC793定义了MSL为2分钟,Linux设置成了30s。