网络模型
OSI网络模型
物理层,数据链路层,网络层,传输层,会话层,表示层,应用层;
5层网络模型
物理层,数据链路层,网络层,传输层,应用层
TCP协议
Tcp报文格式
URG:紧急标志。紧急标志为"1"表明该位有效。
ACK:确认标志。表明确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
PSH:推标志。
RST:复位标志。用于复位相应的TCP连接。
SYN:同步标志。
FIN:结束标志。
TCP 建立连接的三次握手
1.由Client 发起建立连接请求,发送报文中SYN标记位为1,seq=K(随机值)
2.Server端接收到Client的请求,发送SYN标记位为1,ACK标记位为1,seq=J(随机值),ack number=K+1
3.Client接收到Server发来的请求,验证ACK标记位是否为1,验证ack number是否为K+1,验证通过后发送ACK标记位为1,ack number=J+1
SYN攻击
当Server收到Client的连接请求进入Send-RCVD 状态时,称为半连接,需要Server发送ACK,SYN到Client确认才会建立完整的连接;
那么,如果大量Client模拟了不存在的IP地址向Server请求建立连接,当Server发送ACK,SYN时无法找到对应的IP,就会进行重试;
由于大量的虚假Client占用了资源可能导致正常的Client无法建立连接造成网络堵塞甚至系统瘫痪!
TCP断开连接四次挥手
(发送FIN,表示没有数据要发送了,但是还能继续接收)
- Client 发送FIN标记位为1, seq=j(随机值)
- Server 发送ACK标记位为1,seq=k(随机值),ack=j+1
- Server 端发送数据完毕后,发送FIN标记位为1,ACK标记位为1 seq=k,ack=j+1
- Client 收到Server的FIN后,验证ack==j+1? 验证通过后,发送ACK标记位为1,ack=k+1
- Server收到ACK验证通过后关闭连接, Client等待2ML时间后关闭连接;
为什么建立连接需要3次握手,断开连接需要4次挥手?
建立连接时,Server端收到SYN(连接请求)后 可以将SYN与ACK报文一起发送给Client;
断开连接时,可能还存在需要发送的数据,不能直接关闭连接; 所以先发送ACK,等待数据发送完毕后 再发送FIN报文; 就是4次挥手
为什么要等待2ML的时间?
避免网络不稳定带来的问题, 假如在最后发送ACK请求后直接关闭, 此时由于网络原因Server端没收到, Server就会重试FIN请求 但是此时连接已经关闭了,Server端将无法正常发送报文 或者 发送到错误的地方;