你是如何与网站建立连接的,以及如何阻断某个网站

你是如何与网站建立连接的?

1. 找到服务器的位置

如果你拿到一个别人家的小区名字,你需要先找到这个小区在哪。同理,服务器要想访问一个网站,首先需要找到网站服务器的 IP 地址。而充当“查找功能”的就是 DNS(域名解析系统),他会根据你提供的域名找到对应的 IP 地址。

2. 找到前往服务器的路

你可能会选择导航软件来找到前往目的地的最佳路线。对于一个数据包来说,BGP (边界网关协议,Border Gateway Protocol)也会为数据包选择最佳路径。每个路由器存储了他们能到达的网域,使得数据包经过多次路由器跳转到达目的地。

如果别人也去过那个地方,他们可能会分享路线建议。BGP 路由器也会与“邻居”路由器交换路由信息。如果最佳路线发生变化,导航会通知你。同样,BGP 会在网络拓扑变化时更新并通知相关路由器。

3. 与服务器建立连接

对于现有常用的 HTTP/1 和 HTTP/2 协议,数据包类型为 TCP。

为了保证数据包传输可靠,TCP(传输控制协议,Transmission Control Protocol)需要与服务器进行三次握手。就像你在给别人打电话:

  1. A -> B: 喂,能听到吗?【SYN | synchronous】
  2. B -> A: 我能听到【ACK | acknowledge】,你能听到吗?【SYN | synchronous】
  3. A -> B: 我能听到!【ACK | acknowledge】现在开始讲正事吧!

才算做成功建立连接。(谁跟 UDP 一样随便乱扔数据包啊)

4. 应用层数据传输

比如 TLS 之类的内容,本篇暂且不谈。

如何阻断某个网站?

上面讲到了如何与网站建立连接的四个步骤(其实实际上更为复杂),那么就可以根据这几个步骤中的漏洞进行针对性拦截。

1. DNS 阻断 —— 我光知道小区名也没用啊!

最低级的一种,对于特定的域名返回错误的 IP 地址或者干脆直接返回找不到这个域名。找不到 IP 地址也就无法建立连接。由于太容易绕过(直接换 DNS 服务器)现在已经基本不用。

2. BGP 路由劫持 —— 缺德导航,你不说这条路是通的吗?

导航到目的地,结果导航软件故意规划了一个错误的路线。一个路由器 A 假称自己能到达另一个路由器 B,结果 A 收到数据包就丢在垃圾堆里不管了,因为他根本没法连接到 B。

3. TCP RST —— 我 听 不 清 楚 !你 在 说 啥 ?

回看 TCP 三次握手的过程,如果我作为一个中间人在电话线上挖个洞,大声喊一句“抱歉!我听不见!再见!”,这样两方的 TCP 握手过程就会被强制中断。由于 TCP 的机制,无法完成握手就代表无法建立稳定连接,那么访问自然失败。

如果浏览器在访问有些网站的时候报错“连接被重置”,那么大概是这种拦截方案。

4. 直接封锁 —— 你的上网时间到头咯!

小时候犯了事有可能会被父母禁足不让出门。对于频繁触犯行为规则的服务器 IP(比如检测到有恶意软件数据包的特征,或者是纯加密流量看不懂的),作为局域网网关,他完全可以选择直接拒绝继续传输,并将 $(\text{客户端 IP}, \space \text{服务端 IP}, \space \text{服务端端口号})$ 三元组做封禁处理。

参考资料

DNS 和 Nameserver 的区别 - YON (yoncise.com)
吃透BGP,永远绕不开这些基础概述,看完再也不怕BGP了!-腾讯云开发者社区-腾讯云 (tencent.com)
三次握手、四次挥手以及TCP标志位的详细介绍 - 爱生活的前端狗 - SegmentFault 思否
中国的防火长城是如何检测和封锁完全加密流量的 (gfw.report)

暂无评论

发送评论 编辑评论


				
上一篇
下一篇