OSI七层模型 | TCP/IP概念层模型 |
应用层(FTP、Telnet) | 应用层(FTP、Telnet) |
表示层 | |
会话层 | |
传输层(TCP、UDP) | 传输层(TCP、UDP、UGP) |
网络层(IP) | 网络层(IP、ICMP、ARP) |
数据链路层(ARP) | 链路层 |
物理层 |
source port:端口号【ip层的ip唯一标识主机,tcp协议和端口号唯一标识进程;;;ip+tcp协议+端口号(套接字)】
seq:4字节,报文的开始序号
ack:4字节,期望收到对方下一个报文段的第一个数据字节的序号(A,301-200;;;B,501)
TCP flags:
如上图所示,在TCP/IP协议中,TCP/IP协议提供可靠的连接服务,采用三次握手建立一个连接:
问题起因:在服务器发出SYN+ACK(第二次握手)后未收到ACK(第三次握手),服务器不断尝试重发,Linux默认等待63秒断开连接。
SYN Flood隐患:恶意程序对服务器发出SYN包便下线,让服务器不断尝试,耗费服务器的SYN队列,影响正常连接。
措施:客户端最后会通过tcp_tcp_syncookie参数回发SYN Cookie来标识是正常连接,服务器不管SYN队列是否满了,接收到SYN Cookie就会创建连接。
如上图所示,为TCP连接释放的四次挥手:
为什么会有CLOSE_WAIT:
服务器出现大量CLOSE_WAIT的原因:对方关闭socket连接,我方忙于读或写,没有及时关闭连接。
为了避免客户端的ACK(第四次挥手)没有被服务器成功接收。
MSL:最长报文段寿命,2MSL是因为一来一回。