一些关于计算机网络的基础知识。
ISO/OSI模型
应用层(http):固定长度的消息头固定组成。
表示层:解决不同系统之间的语法问题。
会话层:建立和管理应用程序间的通信。
传输层(TCP/UDP):解决了主机之间数据传输和质量问题。
网络层(IP):将网络地址翻译成物理地址,数据由发送方路由到接收方。
数据链路层:控制纠错,访问。
物理层:物理机之间的信号传输(比特流)。
TCP三次握手
1、源主机向目标主机发送SYN=1同步信号,seq=x序列号。
2、目标主机向源主机返回ACK=1确认信号,seq=x+1序列号。
3、源主机向目标主机发送ACK=1确认信号,双方进入“ESTABLISHED”状态。
为什么需要三次握手
初始化Number sequence的值。保证应用层接收到的数据不会因为网络传输问题而乱序。
首次握手的隐患
SYN超时。
起因:Server受到Client的SYN,回复SYN-ACK时没有收到ACK确认。
针对SYNFlood的防护
SYN队列满了之后,通过tcp-syncookies参数(目标短裤,源端口,时间戳)回发SYN Cookies。
若为正常,则Client会回发SYN Cookies,直至建立连接。
建立连接后Client故障
保活机制:
向对方发送保活探测报文,尝试次数达到保活探测数仍未收到响应则中断连接。
TCP四次挥手
1、Client发送FIN,关闭Client到Server的数据传送。
2、Server发送ACK。
3、Server发送FIN,关闭Server到Client的数据传送。
4、Client发送ACK。
TIME_WAIT状态
确保有足够的时间收到ACK包。
避免新旧连接混淆。
服务器大量CLOSE_WAIT状态
原因:未及时关闭。
解决方法:检查释放资源的代码。
检查处理请求的线程配置。
Linux命令
netstat:查看系统端口使用情况。
awk:行处理器。