• OSI参考模型

    为降低复杂度并提高灵活性,大型软件系统一般采用分层的思路进行设计。

    电商平台是一个典型的例子,后端可能分成数据库层、缓存层、业务逻辑层、接入层等等。每个层只专注于本层的处理逻辑,复杂性大大降低;各个层互相配合,共同完成复杂的业务处理。

    阅读全文
  • DNS服务器工作原理

    通过上节学习,我们初步掌握了域名系统的基本原理。通过域名访问网络服务时,需要先向 DNS 服务器查询域名对应的 IP 地址。那么,是不是所有域名都保存在一台服务器上呢?

    答案肯定是否定的。全球现有的域名数量是一个天文数字,不是一两台服务器就能保存的。实际上,DNS 服务器分为很多角色,形成了一个等级深严的分布式体系。

    本节,我们一起来扒一扒这背后的故事。

    阅读全文
  • ping命令原理

    进行网络通信时,我们经常需要判断一台主机是否活跃。

    举个例子,alicebruce 进行通信之前,可以先 ping 一下他的 IP 地址 192.168.171.3 ,看主机是否有应答:

    阅读全文
  • 网络实验:观察ARP协议通信过程

    本节,我们用一个极简的局域网,来观察 ARP 协议的通信步骤,以此加深理解:

    实验环境由 Docker 容器提供,只需执行这个 docker 命令,即可一键启动:

    1
    
    docker run --name lan --rm -it --privileged --cap-add=NET_ADMIN --cap-add=SYS_ADMIN -v /data fasionchan/netbox:0.5 bash /script/lan.sh
    
    阅读全文
  • XSS漏洞原理、攻击与防御

    现代 Web 网页通常都是动态的,内容根据数据库来生成。举个例子,您在某个网站上发表一条评论,评论内容会保存在数据库中;当您或其他用户浏览评论时,后端需要查询数据库,最终生成可供浏览的网页。

    根据数据生成网页,就是网页渲染,通常可以分为两种:

    • 服务端渲染,即在后端渲染好 HTML 页面,再返回给浏览器;
    • 客户端渲染,即在前端通过 JS 脚本操作 DOM 节点,动态调整 HTML 网页;

    不管采用哪种渲染方式,本质上都是将数据拼接在 HTML 网页,再呈现给用户。数据通常是由用户输入的,比如评论。如果被别有用心的人利用,注入恶意代码进行攻击,该怎么办呢?想想 SQL注入 攻击!

    阅读全文
  • 深入理解统一资源定位符:URL

    URL统一资源定位符uniform resource locator )的缩写,顾名思义就是用来定位网络资源的。URL 有时也被称为 URIURI 则是 统一资源标识符uniform resource identifier )的缩写。

    有人说 URI 只用于标识区分资源,而 URL 还包含如何找到(定位)到资源的信息,是前者的子集。尽管如此,由于日常交流这两个术语经常混着用,我偏向认为两者是一样的。

    我们知道,Web 应用中的 HTML 网页、JavaScript 源码、 CSS 样式表以及图片等多媒体资源,都可以通过一个 URL 来访问。URL 唯一标识一个网络资源,并指明了获取它的方式。

    虽然 URL 成名于 Web 应用,也经常被称为 Web 地址,但它的使用场景远不止 Web 。我们前面看到的 URL 的结构也比较简单,但 URL 的语法其实支持更为复杂的结构。

    语法结构

    URL 的完整语法结构如下图所示,总共包含七个部分:

    阅读全文
  • 三次握手,TCP连接的建立

    TCP 是面向连接的传输协议,因此通信双方必须先建立连接,才能传输数据。

    上一小节,我们已经初步学习了 TCP 三次握手建立连接的主要步骤,但有不少细节还来不及展开。现在我们再接再厉,先通过一个实验来观察三次握手的过程,进而深入研究其中的细节。

    观察三次握手过程

    如下图,局域网中有一台服务器,IP 地址是 10.0.0.2 ,其他主机可以通过 SSH 协议来登录服务器:

    阅读全文
  • TCP/IP协议栈

    上一小节,我们学习了 OSI 参考模型,见识到 分层 设计思想在通信系统中的重要作用。那么,现行的通信协议是不是按照 OSI 模型进行分层呢?各层的重要协议都有哪些呢?

    目前使用最广泛的通信协议是 TCP/IP 系列协议,但它并不是严格按照 OSI 参考模型设计的。实际上,TCP/IP 早在 OSI 参考模型提出前就开始研发,并逐步发展至今。

    TCP/IP 协议栈也是分层设计的,但与 OSI 不同,它只分为 4 层:

    阅读全文
  • 网络实验:用dig命令模仿迭代解析

    上一小节,我们学习了 DNS 服务器的工作原理,它们可以分为很多种角色:

    • 根域名服务器
    • 顶级域名服务器
    • 权威域名服务器
    • 递归解析器(DNS缓存服务器)

    于此同时,我们还了解了域名 迭代解析 的过程。本节我们趁热打铁,安排一次实验——按迭代解析步骤来解析域名 test.fasionchan.com ,以此加深理解。

    阅读全文
  • 用C语言开发ping命令

    经过前面学习,我们知道 ping 命令内部通过 ICMP 协议探测目标 IP ,并计算 往返时间 。 本文使用 C 语言开发一个简版 ping 命令, 演示如何通过 套接字 发送和接收 ICMP 协议报文。

    其他语言版本:

    报文封装

    ICMP 报文同样分为头部和数据,其中头部的结构非常简单:

    阅读全文