• 修改域名记录别忘了TTL

    小菜在一家互联网公司工作,负责后台开发。他们公司有一个 APP ,运营需要分析用户操作体验。为此,研发团队准备在 APP 中埋点,以便上报数据。而小菜需要提供一个后端服务,用来接收 APP 上报的数据。

    小菜开发好数据接收服务后,申请了一个域名,让 APP 团队通过域名提交数据。这样一来,小菜以后可以灵活地调整后端服务,随意扩容、缩容,甚至是迁移,完全不用 APP 团队配合。

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

    本节我们通过一个玩具 TCP 服务应用,来观察 TCP 协议的通信过程,进而体会它的关键知识点:

    • 服务端
    • 客户端
    • 端口
    • TCP连接
    • 套接字

    实验应用

    实验应用是一个最简化的玩具应用,由服务端和客户端组成:

    阅读全文
  • 编程实战:如何在程序中解析域名

    由于域名比 IP 地址更便于记忆,我们通常使用它来访问网络服务。网络应用客户端想要跟服务端通信,必须先向 DNS 服务器查询域名对应的 IP 地址。

    举个例子,读者访问我的网站 fasionchan.com 时,浏览器需要先根据域名查询网站的 IP 地址,再和网站的 Web 服务器进行通信。

    那么,如何通过编程实现域名查询呢?这是开发网络应用无法回避的问题。

    我们知道,DNS 服务器和客户端之间使用 DNS 协议进行通信:客户端先向服务器发送 请求报文 ,服务器将查询结果封装成 应答报文 ,回复客户端。DNS 可以使用 UDP 或 TCP 作为传输层协议,通信端口号为 53 。

    阅读全文
  • 网络编程:开发TCP客户端

    开发网络程序离不开套接字编程,基于 TCP 通信的程序也不例外。我们知道 TCP 应用可以分为 客户端client )和 服务器server )两种角色,本节先介绍如何编写 TCP 客户端程序。

    连接套接字

    UDP 一样,想要发起 TCP 通信,必须通过操作系统提供的 套接字socket )。

    我们知道 TCP 是一个相对复杂的传输层协议,涉及的通信细节非常繁琐:

    • 数据序号;
    • 接收确认( ACK );
    • 超时重传;
    • 流量控制;
    • 拥塞控制;
    • 各种超时定时器;
    • 接收缓冲区;
    • 发送缓冲区;

    如果这些都要每个应用程序单独实现,想想就头大!因此,出于程序复用性考虑,操作系统内核实现了网络协议栈,并将编程接口以套接字形式提供给应用程序。

    阅读全文
  • DNS劫持

    本章,我们系统地学习了域名系统,初步掌握了 DNS 协议和 DNS 服务器工作原理。本节,我们再接再厉,继续研究一个跟 DNS 相关的网络安全问题:DNS劫持

    劫持原理

    根据 DNS 服务器的工作原理,我们知道主机一般依靠本地 DNS 缓存服务器来查询域名。运营商提供互联网接入服务,宽带成功拨号后,它将本区域内的 DNS 缓存服务器提供给客户端。

    阅读全文
  • 网络编程:开发TCP服务器

    上一小节,我们学习了如何编写 TCP 客户端程序,掌握了 socketconnectsendrecvclose 等系统调用的用法。本节我们再接再厉,学习 bindaccept 系统调用,开发一个 TCP 服务器。

    监听套接字

    编写 TCP 服务器同样离不开套接字——服务器需要先创建一个套接字,并监听服务端口:

    监听套接字保存着服务器要监听的地址和端口信息,等待处理客户端的连接请求。当客户端执行三次握手建立连接,SYNC 分组根据目的地址和端口即可找到对应的监听套接字。

    阅读全文
  • TLS传输层安全性协议实现加密传输的秘诀

    我们知道,传输层 TCP 协议负责提供端到端的流式数据传输能力,应用程序在其基础上组织应用层协议。以 HTTP 协议为例,客户端先与服务器建立 TCP 连接,再通过它来发送 HTTP 请求。 由于 TCP 协议只提供最基本的数据传输服务,数据不经加密明文传输,很容易被中间人窃取: 窃听风险( eavesdropping ),第三方获悉敏感信息; 篡改风险( tampering ),第三方修改数据内容; 冒充风险( pretending ),第三方可以冒充他人身份,例如钓鱼网站; 想要保护数据安全,我们就必须对数据进行加密。虽然数据理论上也可以在应用层加密,但这样做并不明智。因为应用层协议有很多,每个协议都自己实现加密逻辑,成本太高: 如果能够在 TCP 协议之上,专门实现新的协议提供加密的流式传输能力,应用层协议设计将得到极大简化。实际上,网络协议栈就是这样实现的: 负责加密实现安全传输的新协议,位于传输层 TCP 协议和应用层协议之间,这就是本文要介绍的 传输层安全性协议( transport layer security ),简称 TLS 。TLS 的前身是 安全套接层( secure sockets layer,SSL ),它实际上是 SSL 的后续版本。 简介 TLS 在 TCP 协议基础上,为应用层提供安全的流式数据传输能力,主要实现两个功能: 服务端身份认证 服务端提供数字证书用于身份校验 HTTPS 利用这个特性预防钓鱼网站 数据加密传输 采用对称加密算法加密数据 对称加密密钥由非对称加密算法加密保护 TLS 协议内部进一步分为四个子协议,各自负责一部分子功能: 握手协议( handshake protocol ),主要完成证书验证,并协商主加密密钥; 密钥规格变更协议( change cipher spec protocol ),主要用于更改密钥规格; 应用数据协议( application data protocol ),根据主加密密钥加密应用传输的数据; 警报协议( alert protocol ),用于传递告警消息,接到致命级别的告警则立即关闭连接; 每个 TLS 子协议分别承担自己的职责,也有自己的协议报文,由位于底层的 记录协议( record protocol )承载。换言之,TLS 协议报文分为两层,记录协议负责描述报文的类型、协议版本、长度和内容等基本信息。记录协议中的内容则承载着子协议的报文,而类型字段则表明子协议报文的类型。
    阅读全文
  • 排查邮件标题乱码问题,竟发现企业微信BUG!

    今早有用户反馈一个问题:系统发送的公告邮件,在企微客户端打开标题有乱码。我们查了一下各个客户端,邮件系统 Web 端打开是正常的,PC 客户端也是正常的,企微的 PC 客户端也是正常的。因此,问题被归结为客户端兼容性问题,按惯例大概是不了了之。

    虽然企微平时问题不少,但作为工作IM,重度使用。按照企微以前的尿性,问题修复很慢很慢的。因此,就算问题不是出在自己系统上,还是想看看到底为什么,能否绕过去。

    阅读全文
  • Nginx服务器安装配置教程

    Nginx 是目前最流行的 Web 服务器软件,没有之一。它不仅配置灵活,性能也不错,能够轻松支撑高并发访问。本节简单介绍一下如何在 Linux 服务器上安装、配置 Nginx 服务器。

    安装

    不同 Linux 发行版,程序包安装工具略有不同。在 Ubuntu 下,可以执行 apt 命名进行安装:

    1
    
    $ apt install nginx
    

    服务启停

    Nginx 安装好后,可能还没启动。我们可以执行 service 命令查看运行状态:

    1
    2
    
    $ service nginx status
     * nginx is not running
    
    阅读全文
  • QUIC 协议

    QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层。 QUIC 旨在解决 TCP 协议的缺陷,并最终替代 TCP 协议, 以减少数据传输,降低连接建立延迟时间,加快网页传输速度。

    QUIC 主要特点有:

    • 多流设计;
    • 低等待延迟;
    • 加密性能更优;
    • 前向纠错;
    • 应用程序实现;
    • 连接保持;
    阅读全文