计网 - Ep2 - 应用层「万字长文」丨学习记录

123 阅读31分钟

Computer Networking A Top-Down Approach Learning Note Part 2

前言的前言

本文是笔者初学计算机网络的笔记和一些心得,难免会有部分疏漏和错误,还请各位读者积极指出,不吝赐教。

有一些内容是笔者认为对自己暂时没那么重要的部分,就没有放上去,具体的内容可以查看相关的书籍。

还有要补充的就是,计算机网络的学习记录将会分为多部分,

这一部分,主要是涵盖了《自顶向下计算机网络》的第二章的内容。

事不宜迟,我们开始吧!

个人博客:conqueror712.github.io/

知乎:www.zhihu.com/people/soeu…

Bilibili:space.bilibili.com/57089326

掘金:juejin.cn/user/129787…


Unit 2 应用层

应用层协议原理

网络核心中没有应用层软件

想法 → 网络应用

研发网络应用程序的核心:写出能够运行在不同的端系统和通过网络彼此通信的程序。

网络/应用程序体系结构

Network architecture and applicaiton architecture are both the "design and structure".

常见的网络体系结构:

  • 客户 - 服务器模式 C - S
    • 服务器:
      • 一直运行
      • 固定的IP地址和周知的端口号,不像DHCP获取的动态IP
      • 扩展性:服务器农场
    • 客户端:
      • 主动与服务器通信
      • 与互联网有间歇性的连接
      • 可能是动态IP地址
      • 不直接与其他客户端通信
  • 对等模式 P2P
    • 几乎没有一直运行的服务器
      • 任意端系统之间可以进行通信
    • 每一个节点既是客户端又是服务器
      • 自扩展性:新的peer节点带来新的服务能力和新的服务请求
    • 参与的主机间歇性连接且可以改变IP地址
    • 例如:迅雷
  • 混合体
    • Napster
      • 文件搜索:集中
      • 文件传输:P2P
    • 即时通信
      • 在线检测:集中
      • 两个用户之间聊天:P2P

常见的应用程序体系结构:

  • 分层体系结构(Layered Architecture):

    应用程序被划分为多个层次,每个层次负责不同的功能。例如,MVC(Model-View-Controller)框架就是一种分层体系结构。

  • 事件驱动体系结构(Event-Driven Architecture):

    应用程序通过事件的方式进行通信和交互。事件可以是用户的操作、消息的到达、计时器的触发等等。例如,GUI(Graphical User Interface)应用程序就是一种事件驱动体系结构。

  • 微服务体系结构(Microservices Architecture):

    应用程序被划分为多个小型的、相互独立的服务。每个服务可以独立地开发、部署和扩展,从而提高应用程序的灵活性和可维护性。

  • 基于消息的体系结构(Message-Based Architecture):

    应用程序通过消息进行通信和交互。消息可以是文本、XML、JSON等格式的数据。例如,企业消息总线(Enterprise Service Bus)就是一种基于消息的体系结构。

  • 一体式体系结构(All-in-one architecture),etc.

进程通信

如何通信?

进程(process)与进程在相同的端系统上以进程间的通信机制互相通信,这个规则由操作系统决定。

而我们的重点是:两个不同的端系统之间是如何进行通信的——交换报文(message)

  • 使用OS提供的通信服务
  • 按照应用协议交换报文

关于进程:

  • 客户端进程:发起通信的进程
  • 服务端进程:等待连接的进程

(P2P架构的应用也有客户端进程和服务端进程之分)

除此之外,分布式进程通信需要解决的问题如下:

  1. 对进程进行编址(addressing)
  2. 传输层提供的服务:需要穿过层间的信息 + 层间信息的代表

TCP socket

为什么要有TCP socket?

不同的端口号对应了不同的协议 不同的进程,便于进行进程的寻址。

16bit的端口号 65536个状态

如果Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理

用个代号标示通信的双方或者单方:socket

就像OS打开文件返回的句柄一样

TCP socket:

  • TCP服务,两个进程之间的通信需要之前要建立连接
    • 两个进程通信会持续一段时间,通信关系稳定
  • 可以用一个整数表示两个应用实体之间的通信关系 ,本地标示,类似Hash
  • 穿过层间接口的信息量最小

对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标示。

  • 四元组:源IP,源port,目标IP,目标port
  • 唯一的指定了一个会话(2个进程之间的会话关系)
  • 应用使用这个 ,与远程的应用进程通信
  • 不必在每一个报文的发送都要指定这4元组
  • 就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名、文件名
  • 简单,便于管理
avatar

UDP socket

  • UDP服务,两个进程之间的通信需要之前无需建立连接
    • 每个报文都是独立传输的
    • 前后报文可能给不同的分布式进程
  • 因此,只能用一个整数表示本应用实体的标示
    • 因为这个报文可能传给另外一个分布式进程
  • 穿过层间接口的信息大小最小
  • UDP socket:本IP,本端口
  • 但是传输报文时:必须要提供对方IP,port
    • 接收报文时: 传输层需要上传对方的IP,port

对于使用无连接服务(UDP)的应用而言,套接字是2元组的一个具有本地意义的标示

  • 2元组:IP,port(源端指定)
  • UDP套接字指定了应用所在的一个端节点(end point)
  • 在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己所采用的ip和port
  • 但是在发送报文时,必须要指定对方的ip和udpport(另外一个段节点)

进程向套接字发送报文或从套接字接收报文

应用层协议

如何使用传输层提供的服务实现应用?

  • 定义应用层协议:报文格式,解释,时序等
  • 编制程序,通过API调用网络基础设施提供通信服务传报文,解析报文,实现应用时序等

应用层协议是什么?

定义了:运行在不同端系统上 的应用如何相互交换报文

应用协议仅仅是应用的一个组成部分

除此之外,还分成公开协议和专有协议

如何描述传输层的服务?

  • 数据丢失率
  • 延时
  • 吞吐
  • 安全性

Internet 传输层提供的服务

TCP服务

  • 可靠的传输服务
  • 流量控制:发送方不会淹没接收方
  • 拥塞控制:当网络出现拥塞时,能抑制发送方
  • 不能提供的服务:时间保证、最小吞吐量保证,安全
  • 面向连接:要求在客户端进程和服务器进程之间建立连接

UDP服务

  • 不可靠数据传输
  • 不提供的服务:可靠,流量控制,拥塞控制,时序,贷款保证,建立连接

UDP的存在有其必要性

  • 能够区分不同的进程,而IP服务不能
    • 在IP提供的主机到主机端到端功能的基础上,区分了主机的应用进程
  • 无需建立连接,省去了建立连接时间,适合事务性应用
  • 不做可靠性的工作,例如检错重发,适合那些对实时性要求比较高而对正确性要求不高的应用
  • 没有拥塞控制和流量控制,应用能够按照设定的速度发送数据

avatar

安全TCP——SSL

原本的TCP和UDP,都是没有加密的,甚至于密码都是明文传输;

引入SSL,在TCP上面实现,提供加密的TCP连接;

  • 私密性
  • 数据完整性
  • 端到端的鉴别

SSL在应用层,应用采用SSL库,而SSL库使用传输层的TCP进行通信;

应用通过API将明文交给socket,SSL将其加密并在互联网上传输,详见Unit8。

SSL是Secure Sockets Layer安全套接字层的缩写,是一系列加密技术,允许Web用户保护他们通过Internet传输的信息的隐私

当您访问安全网站时,您会在 URL 旁边看到一个锁,表示您与该网站的通信已加密

avatar

该锁应该表明第三方将无法读取您发送或接收的任何信息。在后台,SSL通过将您的数据转换为只有收件人知道如何破译的编码消息来实现这一点。如果恶意方正在监听对话,它只会看到看似随机的字符串,而不会看到您的电子邮件、Facebook 帖子、信用卡号或其他私人信息的内容。

TCP三次握手四次挥手

为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,

进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常

avatar

最开始的时候客户端和服务器都是处于CLOSED关闭状态。主动打开连接的为客户端,被动打开连接的是服务器。

TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态

第一次握手 TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态

第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态

第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手

有人可能会很疑惑为什么要进行第三次握手? 主要原因:防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误

第一次握手: 客户端向服务器端发送报文 证明客户端的发送能力正常 第二次握手:服务器端接收到报文并向客户端发送报文 证明服务器端的接收能力、发送能力正常 第三次握手:客户端向服务器发送报文 证明客户端的接收能力正常

avatar

数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。

第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入**FIN-WAIT-1(终止等待1)**状态

第二次挥手 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入**FIN-WAIT-2(终止等待2)**状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了**TIME-WAIT(时间等待)**状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

为什么客户端要等待2MSL? 主要原因是为了保证客户端发送那个的第一个ACK报文能到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文


Web & HTTP

Web概述

由一些对象组成,有哪些对象?

  • HTML文件、JPEG图像、Java小程序、音视频文件etc.

Web页含有一个基本的HTML文件,该基本HTML文件又包含若干对象的引用(链接);

对象如何引用?

  • 通过URL对每个对象进行引用,URL包括访问协议,用户名,口令字,端口,目录文件等;

avatar

HTTP概述

一句话解释:HTTP 是用于获取 HTML 文档等资源的协议——我们称之为超文本传输协议

它是 Web 上任何数据交换的基础,在应用层上,是一种客户端-服务器协议

这意味着请求由接收者(通常是 Web 浏览器)发起。

从获取的不同子文档(例如文本、布局描述、图像、视频、脚本等)重建完整的文档。

它使用TCP,默认端口号为80;

(HTTPS使用了SSL,默认端口号为443)

  • 具体过程为:客户发起一个与服务器的TCP连接(建立socket),服务器接受连接,随后在浏览器和Web服务器之间交换HTTP报文,最后TCP连接关闭。

avatar

客户端和服务器通过交换单个消息(而不是数据流)进行通信。

  • 客户端(通常是 Web 浏览器)发送的消息称为请求
  • 服务器作为应答发送的消息称为响应

协议是定义如何在计算机内部或计算机之间交换数据的规则系统。设备之间的通信要求设备就正在交换的数据的格式达成一致。

定义格式的规则集称为协议。

avatar


基于HTTP的系统组件

HTTP是一种客户端-服务器协议:请求由一个实体发送,即用户代理(或代表它的代理)。 大多数情况下,用户代理是一个Web浏览器,但它可以是任何东西。

每个单独的请求都发送到服务器,服务器处理它并提供称为响应的答案。

在客户端和服务器之间有许多实体,统称为代理Proxy,例如,它们执行不同的操作并充当网关or缓存Cache

实际上,浏览器和处理请求的服务器之间有更多的计算机:有路由器、调制解调器等。 由于Web的分层设计,这些隐藏在网络和传输层中。 HTTP位于应用程序层的顶部。 虽然对于诊断网络问题很重要,但底层大多与 HTTP 的描述无关。

avatar

Proxy:

代理服务器是在互联网的不同网络中导航时使用的中间程序或计算机。它们有助于访问万维网上的内容

代理拦截请求并提供回响应;它可以转发或不转发请求(例如在缓存的情况下),并且可以修改请求(例如,在两个网络之间的边界处更改其标头)。

代理可以位于用户的本地计算机上,也可以位于用户计算机和 Internet 上的目标服务器之间的任何位置。通常有两种主要类型的代理服务器:由于 Web 堆栈的分层结构,其中大多数在传输、网络或物理级别运行,在 HTTP 层变得透明,并可能对性能产生重大影响。

  • 处理来自和发送到互联网上任何位置的请求的转发代理
  • 一种反向代理,从 Internet 接收请求并将其转发到内部网络中的服务器。

代理的功能

  • 缓存(缓存可以是公共的或私有的,就像浏览器缓存一样)
  • 过滤(如防病毒扫描或家长控制)
  • 负载平衡(允许多个服务器为不同的请求提供服务)
  • 身份验证(控制对不同资源的访问)
  • 日志记录(允许存储历史信息)

Cache:

缓存(Web 缓存或 HTTP 缓存)是临时存储 HTTP 响应的组件,以便只要满足某些条件,就可以将其用于后续 HTTP 请求。

Web缓存(代理服务器):

avatar
  • 缓存既是客户端又是服务器
  • 通常缓存是由ISP安装 (大学、公司、居民区ISP)
avatar avatar

这部分会有一些计算题,题型示例如下:

  • 更快的接入链路
  • 安装本地缓存

客户端:用户代理

用户代理是代表用户执行操作的任何工具。

浏览器始终是发起请求的实体,它从来都不是服务器。

网络服务器

通信通道的另一端是服务器,它根据客户端的请求提供文档。 服务器实际上仅显示为一台计算机;

但它实际上可能是共享负载(负载平衡)的服务器的集合,或者是询问其他计算机(如缓存、数据库服务器或电子商务服务器)的复杂软件


HTTP的基本方面

HTTP是可扩展的

HTTP / 1.0中引入的HTTP标头使该协议易于扩展和试验。

新功能甚至可以通过客户端和服务器之间关于新标头语义的简单协议来引入。

HTTP是无状态的,但不是无会话的

服务器并不维护关于客户的任何信息

avatar
  • 无状态的:在同一连接上连续执行的两个请求之间没有链接。

    具体来说,HTTP是无状态的意味着从客户端到服务器的每个请求都被视为一个独立的事务,不知道之前的任何请求。这意味着服务器不存储客户端的会话信息,也不保留任何来自该客户端的先前请求的内存。客户端负责维护状态,如果有必要,可以在每个请求中向服务器发送信息,例如身份验证凭据或会话ID。这种设计在可扩展性和可靠性方面非常有用,因为它允许服务器独立处理每个请求,并确保在服务器出现故障时不会丢失会话数据。

  • 有状态会话:HTTP cookie允许使用有状态会话。 使用标头可扩展性,HTTP Cookie 将添加到工作流中,从而允许在每个 HTTP 请求上创建会话以共享相同的上下文或相同的状态。

HTTP和连接

连接在传输层进行控制,因此从根本上超出了 HTTP 的范围。

HTTP 不要求基础传输协议基于连接;它只要求它是可靠的,或者不丢失消息。

在互联网上最常见的两种传输协议中,TCP是可靠的,UDP不是。 因此,HTTP依赖于基于连接的TCP标准

更进一步地,HTTP分为非持久HTTP和可持久HTTP

avatar

响应时间模型

avatar

则可以得出:

avatar

HTTP可以控制什么?

  • 缓存: 文档的缓存方式可以通过 HTTP 控制。 服务器可以指示代理和客户端缓存什么以及缓存多长时间。 客户端可以指示中间缓存代理忽略存储的文档。
  • 放宽原点约束: 为了防止窥探和其他隐私侵犯,Web 浏览器强制在网站之间严格隔离。 只有来自同一来源的页面才能访问网页的所有信息。 虽然这样的约束对服务器来说是一种负担,但 HTTP 标头可以放松服务器端的这种严格分离,允许文档成为来自不同域的信息的拼凑;这样做甚至可能有与安全相关的原因。
  • 身份验证: 某些页面可能受到保护,以便只有特定用户才能访问它们。 基本身份验证可以通过 HTTP 提供,可以使用 WWW-Authenticate 和类似的标头,也可以通过使用 HTTP cookie 设置特定会话来提供。
  • 代理和隧道: 服务器或客户端通常位于 Intranet 上,对其他计算机隐藏其真实 IP 地址。 然后,HTTP 请求通过代理来跨越此网络屏障。 并非所有代理都是 HTTP 代理。 例如,SOCKS协议在较低级别运行。 其他协议(如 ftp)可以由这些代理处理。
  • 会议: 使用 HTTP Cookie 允许您将请求与服务器的状态相关联。 这会创建会话,尽管基本的HTTP是无状态协议。 这不仅对电子商务购物篮有用,而且对允许用户配置输出的任何站点也很有用。

HTTP流

当客户端想要与服务器,也可能是中间代理通信时,它会执行以下步骤:

  1. 打开 TCP 连接:

    TCP 连接用于发送一个或多个请求并接收应答。 客户端可以打开新连接、重用现有连接或打开与服务器的多个 TCP 连接。

  2. 发送HTTP消息:

    HTTP消息(在HTTP / 2之前)是人类可读的ASCII。 使用HTTP / 2,这些简单的消息被封装在框架中,使它们无法直接读取,但原理保持不变。

    一个例子:

    avatar
  3. 读取服务器发送的响应

    一个例子:

    avatar
  4. 关闭或重新使用连接以处理进一步的请求


HTTP消息与报文

有两种类型的 HTTP 消息:请求和响应,每种都有自己的格式。

请求:

avatar

更形式化地:

avatar

关于提交表单输入:

  • URL(Uniform Resource Locator统一资源定位符):

    • 一个标准的URL语法组成是下面这样的:

      scheme://login:password@address:port/path_to_resource?query_string#fragment

      抽象一下:传输协议 + 域名或IP地址 + [端口(端口为80时可省略)] + 资源路径 + 查询字符串

    • GET

      GET - 通常是从指定的服务器中获取数据,查询字符串(键值对)被附加在URL地址后面一起发送到服务器,如下面这样的:http://localhost:8090/api/query?id=3

    • POST

      POST - 通常是提交数据给指定的服务器处理,当然也可以从服务器获取数据。使用POST方法时,查询字符串或发送的数据在POST信息中单独存在,和请求URL一起发送到服务器,而不是像GET方法一样直接放在URL中。

  • GET和POST的区别:

    • 从上面的例子我们可以看到,GET请求消息体(body)为空,POST请求带有消息体(请区分请求body和响应body)。
    • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如query?name=test1&id=123456
    • POST方法是把提交的数据放在HTTP包的请求body中。
    • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
    • GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

响应:

avatar

HTTP响应状态码

位于服务器->客户端的响应报文中的首行,一些例子如下:

avatar

HTTP - Cookies:

HTTP cookies就是 服务器端发送给浏览器端的一小部分数据

用户-服务器状态,有四个组成部分,可以用于用户验证,购物车,推荐和用户状态等。

avatar

Cookies可以维护状态,How?:

  • 协议端节点:在多个事务上 ,发送端和接收端维持状态
  • cookies: http报文携带状态信息

Cookies与隐私:

avatar

FTP文件传输协议

第七版的自顶向下计算机网络删除了这一部分内容,有可能是因为这个技术有点老,现在用的不是很多了。

了解即可。

默认端口号:21

FTP的RFC:959

avatar

控制连接和数据连接事分开的,两个不同的端口

HTTP只用一个端口

avatar

服务主动向客户端20号端口发起一个连接

  • 带内的传数据
  • 带外的传控制信息和指令

FTP协议有状态

服务器要维护这个状态,与HTTP不一样。


Email

电子邮件的三个主要组成部分:

  • 用户代理(邮件阅读器)
  • 邮件服务器
  • 简单邮件传输协议:SMTP
avatar

邮件服务器

管理和维护发送给用户的邮件;

输出报文队列保持待发送邮件报文;

SMTP

RFC 2821;

SMTP使用持久连接;

SMTP使用CRLF.CRLF决定报文的尾部;

使用TCP在客户端和服务器之间发送报文;

默认端口号为25;

使用直接传输,即从发送方服务器到接收方服务器

传输的三个阶段:

  • 握手
  • 传输报文
  • 关闭

命令/响应交互:(报文必须是7位ASCII码)

  • 命令:ASCII文本
  • 响应:状态码和状态信息

与HTTP的对比:

avatar

邮件报文格式与多媒体扩展

avatar

多媒体扩展:

MIME - multimedia mail extension

RFC 2045, 2056

在报文首部用额外的行申明MIME内容类型

邮件访问协议

avatar

与SMTP的区别:

  • SMTP是传送到接收方的邮件服务器

  • 邮件访问协议是从服务器访问邮件

    具体来说:

    • POP:邮局访问协议——用户身份确认 (代理<-->服务器) 并下载
    • IMAP:Internet邮件访问协议——更多特性但也更复杂,在服务器上处理存储的报文
    • HTTP:Hotmail , Yahoo! Mail等——方便

关于POP3协议的更多:

avatar avatar

DNS - 互联网的电话簿

简介:

DNS(域名系统 Domain Name System )是互联网连接资源的分层和分散命名系统;

DNS维护域名列表以及与其关联的资源(如 IP 地址);

DNS最突出的功能是将人性化域名转换为数字IP地址;

将域名映射到相应 IP 地址的过程称为 DNS 查找,相比之下,反向 DNS 查找 (rDNS) 用于确定与 IP 地址关联的域名。

额外的安全层?

默认情况下,DNS查询Request和响应Response以明文形式,通过UDP发送,也就是说网络、ISP 或任何能够监控传输的人都可以读取它们。即使网站使用 HTTPS,也会公开导航到该网站所需的 DNS 查询。

如何解决呢?事实上有两种办法:TLS上的DNS和HTTPS上的DNS,他们都是为加密明文DNS流量而开发的标准。

avatar

DNS / HTTPS-over-DNS?

TLS 上的 DNS 或 DoT 是加密 DNS 查询以保持其安全和私密性的标准。

DoT 使用与 HTTPS 网站相同的安全协议 TLS 来加密和验证通信(TLS也称为"SSL")。

DoT 在用户数据报协议 UDP 之上添加了 TLS 加密,该协议用于 DNS 查询。

此外,它还确保 DNS 请求和响应不会因中间人攻击而被篡改或伪造。

DNS over HTTPS,或DoH,是DoT的替代方案。

使用 DoH,DNS 查询和响应是加密的,但它们是通过 HTTP 或 HTTP/2 协议发送的,而不是直接通过 UDP 发送的。

有何不同

每个标准都是单独开发的,都有自己的 RFC(征求意见) 文档,

但 DoT 和 DoH 之间最重要的区别在于它们使用的端口

DoT 仅使用端口 853,而 DoH 使用端口 443,这是所有其他 HTTPS 流量使用的端口

由于 DoT 具有专用端口,因此任何具有网络可见性的人都可以看到 DoT 流量的来来去去,即使请求和响应本身是加密的。相比之下,在DoH中,DNS查询和响应伪装在其他HTTPS流量中,因为它们都来自同一端口。

哪个更好?

从网络安全的角度来看,DoT可以说更好。它使网络管理员能够监视和阻止 DNS 查询,这对于识别和阻止恶意流量非常重要。同时,DoH查询隐藏在常规HTTPS流量中,这意味着如果不阻止所有其他HTTPS流量,就无法轻松阻止它们。

但是,从隐私的角度来看,DoH可以说是可取的。使用 DoH,DNS 查询隐藏在较大的 HTTPS 流量中。这降低了网络管理员的可见性,但为用户提供了更多的隐私。


涉及 DNS 的常见攻击有哪些?

  • DNS 欺骗/缓存中毒:这是一种将伪造的 DNS 数据引入 DNS 解析程序缓存的攻击,导致解析器返回域的错误 IP 地址。流量可以转移到恶意机器或攻击者想要的任何地方,而不是转到正确的网站;通常,这将是用于恶意目的(例如分发恶意软件或收集登录信息)的原始站点的副本。
  • DNS 隧道:此攻击使用其他协议通过 DNS 查询和响应进行隧道传输。攻击者可以使用 SSH、TCP 或 HTTP 将恶意软件或被盗信息传递到 DNS 查询中,而大多数防火墙都不会检测到。
  • DNS 劫持:在 DNS 劫持中,攻击者将查询重定向到其他域名服务器。这可以通过恶意软件或未经授权修改 DNS 服务器来完成。尽管结果与DNS欺骗的结果相似,但这是一种根本不同的攻击,因为它针对的是名称服务器上网站的DNS记录,而不是解析器的缓存。
  • NXDOMAIN 攻击:这是一种 DNS 洪水攻击,攻击者用请求淹没 DNS 服务器,请求不存在的记录,试图导致合法流量的拒绝服务。这可以使用复杂的攻击工具来实现,这些工具可以为每个请求自动生成唯一的子域。NXDOMAIN 攻击还可以针对递归解析器,目的是用垃圾请求填充解析器的缓存。
  • 幻域攻击:幻像域攻击的结果与 DNS 解析器上的 NXDOMAIN 攻击类似。攻击者设置了一堆“幻像”域服务器,这些服务器要么响应请求非常慢,要么根本不响应。然后,解析器受到对这些域的大量请求的打击,解析器被占用等待响应,导致性能降低和拒绝服务。
  • 随机子域攻击:在这种情况下,攻击者会针对一个合法站点的多个随机、不存在的子域发送 DNS 查询。目标是为域的权威名称服务器创建拒绝服务,从而无法从名称服务器查找网站。作为副作用,为攻击者提供服务的ISP也可能受到影响,因为他们的递归解析器的缓存将加载错误请求。
  • 域锁定攻击:攻击者通过设置特殊域和解析器来与其他合法解析器创建 TCP 连接,从而策划这种形式的攻击。当目标解析器发送请求时,这些域会发回缓慢的随机数据包流,从而占用解析器的资源。
  • 基于僵尸网络的 CPE 攻击:这些攻击是使用 CPE 设备(客户端设备;这是服务提供商提供的供其客户使用的硬件,例如调制解调器、路由器、电缆盒等)进行的。攻击者破坏CPE,设备成为僵尸网络的一部分,用于对一个站点或域执行随机子域攻击。

(怎么名字都这么帅的)

avatar


域名安全

DNS 安全扩展 (DNSSEC) 是为缓解此问题而创建的安全协议。

DNSSEC 通过对数据进行数字签名来帮助确保其有效性,从而防止攻击。

为了确保安全查找,必须在 DNS 查找过程中的每个级别进行签名

有关 DNSSEC 的更多内容请参考:DNSSEC: An Introduction (cloudflare.com)


其他内容:

DNS防火墙:

DNS firewall 是一种可为 DNS 服务器提供众多安全和性能服务的工具。

DNS firewall 位于用户的递归解析器与他们正尝试访问的网站或服务的权威性域名服务器之间。

防火墙可提供速率限制服务,以关闭试图淹没服务器的攻击者。如果服务器确实由于攻击或其他任何原因而停机,则 DNS firewall 可通过提供来自高速缓存的 DNS 响应来使运营商的站点或服务保持正常运行。

用户隐私:

DNS 查询未加密。即使用户使用像 1.1.1.1 这样不跟踪他们活动的 DNS 解析器,DNS 查询也会以明文形式在互联网上传输。这意味着拦截查询的任何人都可以看到用户正在访问哪些网站。

还有诸如DNS高速缓存中毒等内容我们暂且略过。


DomainName - 域名

0. 简介:

域名是一个文本字符串,映射到一个数字 IP 地址,可用于从客户端软件访问网站。

简单来说,域名是用户在浏览器窗口中键入以访问特定网站的文本。

网站的实际地址是一个复杂的数字 IP 地址(例如 103.21.244.0),但由于 DNS 的存在,用户可以输入人类友好的域名并将其路由到他们要查找的网站。此过程称为 DNS 查找。

域名全部由域名注册管理机构管理。

1. 与URL的区别?

统一资源定位符(URL)有时也称为网址,包含站点的域名以及其他信息,如传输协议和路径等。

例如,在 URLhttps://www.bilibili.com/anime/中,www.bilibili.com是域名,而https是协议,/anime/是指向网站上特定页面的路径。

2. 域名的组成部分?

域名通常分为两个或三个部分,各个部分用一个点分隔。

从右到左阅读时,域名中的标识符从最广泛到最具体

域名中最后一个点右边的部分是顶级域 (TLD)。

其中包括.com、.net和.org 等通用TLD,以及.uk.cn等特定国家/地区的 TLD。

TLD 的左侧是第二级域(2LD),如果 2LD 的左侧有任何内容,则称为第三级域(3LD)。

3. 查找可用域名:

法一:转到域名注册商的网站。他们中的大多数都提供whois服务,告诉您域名是否可用。

法二:如果使用具有内置 shell 的系统,请在其中键入命令,如下所示:

$ whois mozilla.org
Domain Name:MOZILLA.ORG
Domain ID: D1409563-LROR
Creation Date: 1998-01-24T05:00:00Z
Updated Date: 2013-12-08T01:16:57Z
Registry Expiry Date: 2015-01-23T05:00:00Z
Sponsoring Registrar:MarkMonitor Inc. (R37-LROR)
Sponsoring Registrar IANA ID: 292
WHOIS Server:
Referral URL:
Domain Status: clientDeleteProhibited
Domain Status: clientTransferProhibited
Domain Status: clientUpdateProhibited
Registrant ID:mmr-33684
Registrant Name:DNS Admin
Registrant Organization:Mozilla Foundation
Registrant Street: 650 Castro St Ste 300
Registrant City:Mountain View
Registrant State/Province:CA
Registrant Postal Code:94041
Registrant Country:US
Registrant Phone:+1.6509030800

4. 其他内容

域名的最长保留期是十年。用户可以持有域名超过十年,因为注册商通常让他们无限期地续订域名。但是,用户从来没有真正拥有过这个域名,他们只是租用了它。

avatar

如果没有人购买过期的域名,它可能会在一定时间后退回到原来的注册机构。它将不再可用,直到注册表决定释放它。


P2P应用

暂略


TCP套接字编程

暂略