TCP/IP网络模型
ARP
地址解析协议(Address Resolution Protocol)是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求,广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。
TCP
- 序号(seq): 占四个字节,表示发送的数据字节流
- 确认号:占四个字节,发送方期待接收的下一序号,只有
ACK>=1
时才有效 - ACK:确认序号的标志,
ACK>=1
表示确认号有效,ACK=0
表示报文不含确认号信息 - SYN:连接请求序号标志,用于建立连接,
SYN=1
表示请求连接 - FIN:结束标志,用于释放连接,
FIN=1
表示关闭本方数据流
假设当前报文序号为101,且当前报文长度为200字节,那么下一个报文的序号应为301
TCP首部其长度最小可达到20字节,最长为60字节
UDP首部是4个字段(原端口,目标端口,长度,检验和),每个字段2字节,共8字节
三次握手与四次挥手
- Client发送一个连接请求的报文(SYN seq=x), Client此时状态为SYN_SENT
- Server收到Client连接请求报文之后对报文进行确认,并向Client发送报文(SYN seq=y ACK=x+1),Server此时的状态为SYN_RCVD
- Client收到Server的报文之后再次向Server发送报文(ACK=y+1),此时Client与Server的状态都为ESTABLISHED
若在握手过程中因为其他因素导致并未完成三次握手,Client会认为请求失效而重新发起一个请求并最终完成握手。
一段时间之后第一次请求滞留的报文到达Server,Server会误以为是一个新的请求从而响应Client并等待Client的回应,但Client收到请求之后发现请求已经超时便会忽略,这会导致Server一直等待Client的回应,从而造成资源浪费
- Client发送一个中断连接请求(FIN seq=x+2 ACK=y+1),此时Client状态为FIN_WAIT
- 此时Server可能会有数据没有发送完毕,因此先向Client发送一个ACK报文(ACK=x+3)表明收到FIN报文并继续发送剩余内容,此时Server的状态为CLOSE_WAIT
- 当Server确定数据已经发送完毕则向Client发送FIN报文(FIN seq=y+1),此时Server的状态为LAST_ACK
- Client收到FIN报文后向Server发送ACK报文(ACK=y+2),此时Client进入TIME_WAIT状态,如果Server没收到ACK报文则可以重传,如果Server收到ACK报文即可关闭连接。Client等待2MSL之后依然没有回复则证明Server已经正常关闭,Client也关闭连接
MSL(Maximum Segment Lifetime): MSL是一个固定的值,2MSL通常为2分钟。
TCP和UDP
- TCP:面向连接(需要确定双方已经连接)的数据报服务,会进行错误重传和拥塞控制,适用于可靠性高的场景
- 仅支持单播
- UDP:面向无连接的数据报服务,实现简单,适用于实时性高的场景
- 支持单播,多播,广播