iptables

作者: shuff1e | 来源:发表于2020-10-18 13:55 被阅读0次

iptables

三次握手,四次挥手

SYN cookies 算法

SYN Cookies算法wiki可以解决上面的第1个问题以及第2个问题的一部分

我们知道,TCP连接建立时,双方的起始报文序号是可以任意的。SYN cookies利用这一点,按照以下规则构造初始序列号:

  • t为一个缓慢增长的时间戳(典型实现是每64s递增一次)
  • m为客户端发送的SYN报文中的MSS选项值
  • s是连接的元组信息(源IP,目的IP,源端口,目的端口)和t经过密码学运算后的Hash值,即s = hash(sip,dip,sport,dport,t)s的结果取低 24

则初始序列号n为:

  • 5 位为t mod 32
  • 接下来3位为m的编码值
  • 24 位为s

当客户端收到此SYN+ACK报文后,根据TCP标准,它会回复ACK报文,且报文中ack = n + 1,那么在服务器收到它时,将ack - 1就可以拿回当初发送的SYN+ACK报文中的序号了!服务器巧妙地通过这种方式间接保存了一部分SYN报文的信息。

接下来,服务器需要对ack - 1这个序号进行检查:

  • 将高 5 位表示的t与当前之间比较,看其到达地时间是否能接受。
  • 根据t和连接元组重新计算s,看是否和低 24 一致,若不一致,说明这个报文是被伪造的。
  • 解码序号中隐藏的mss信息

到此,连接就可以顺利建立了。

tcp和udp的区别

tcp是

  • 面向连接

  • 可靠

  • 全双工

  • 流量控制,拥塞控制

  • 面向字节流

  • 停等协议(超时重传,自动重传请求)
    udp是

  • 无连接

  • 最大努力交付

  • 没有拥塞控制

  • 面向报文,由IP分片,因此应用进程必须选择合适大小的报文

  • 多播(一对一,一对多,多对一,多对多)

端口不可达,发送ICMP差错报文

tcp的拥塞控制,以及bbr

为什么需要udp

IP是
尽力而为交付
不确保报文段交付
不保证报文段按序交付
不保证报文段中数据完整性
UDP是
进程到进程的数据交付
并且有差错检查

ping和traceroute的原理

使用的是ICMP协议,
差错报告报文:终点不可达,参数问题,改变路由
询问报文:回送请求

ping命令的功能
(1)能验证网络的连通性
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
那么如何验证的呢?
(1)ping命令会先发送一个 ICMP Echo Request给对端
(2)对端接收到之后, 会返回一个ICMP Echo Reply
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

问题:
telnet是23端口,ssh是22端口,那么ping是什么端口?
答:ping命令是基于ICMP,是在网络层。
而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。

  • Traceroute程序
    Traceroute是ICMP协议的另一个重要应用,主要用来侦测源主机到目的主机之间所经过的路由的情况。
    Traceroute使用ICMP报文和IP首部中的TTL字段,其原理很简单,
    开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据报,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,
    最终到达目的主机后,由于ICMP选择了一个不可能的值作为UDP端口(大于30000)。这样目的主机就会发送一个端口不可达的ICMP差错报文。
  • https://tonydeng.github.io/sdn-handbook/basic/icmp.html

cookie & session

HTTP 2.0

websocket

相关文章

网友评论

      本文标题:iptables

      本文链接:https://www.haomeiwen.com/subject/labvyktx.html