categories: network
计网常识
1 网络基础知识讲解
OSI 七层模型
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
讲了一下各个层的功能,可以重点听一下,把握重点
并不是标准、只是一个概念框架
TCP/IP
2 TCP的三次握手_1
说说 TCP 的三次握手
IP 数据包是不可靠的,需要其上层来进行保证
TCP 有以下简单的特点
- 面向连接的、可靠的、基于字节流的传输层通信协议
- 将应用层的数据流分割成报文段并发送给目标节点的 TCP 层
- 数据包都有序号,对方收到则发送 ACK 确认,未收到则重传
- 使用校验和来检验数据在传输过程中是否有误
TCP 报文头需要自己看一下,大概了解其内容
TCP Flags
- URG:紧急指针标志
- ACK:确认序号标志
- PSH:push 标志
- RST:重置连接标志
- SYN:同步序号,用于建立连接过程
- FIN:finish 标志,用于释放连接
3 TCP的三次握手_2
“握手”是为了建立连接,TCP 三次握手的流程如下
在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送 SYN 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认
第二次握手:服务器收到 SYN 包,必须确认客户的SYN (ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手
为什么需要三次握手才能建立其连接
为了初始化 Sequence Number 的初始值,保证用来发送和接受的数据都能够有序,拼装时也不会因为网络质量不好等原因,发生别的意外
首次握手的隐患—-SYN 超时
- Server 收到 Client 的 SYN,回复 SYN+ACK 后未收到 ACK 确认(处于中间状态)
- Server 端不断重试直至超时,Linux 默认等待 63 秒才断开连接
针对 SYN Flood 的防护措施
- SYN 队列满后,通过 tcp_syncookies 参数回发 SYN Cookie
- 若为正常连接则 Client 会回发 SYN Cookies ,直接建立连接
保活机制
- 向对方发送保活探测报文,如果未收到响应则继续发送
- 尝试次数达到保活探测数仍未收到响应则中断连接