目录

《计算机网络》纲要整理

参考谢希仁 《计算机网络(第5版)》

概述

电路交换与分组交换

  • 电路交换

    • 需要建立物理连接,需要通过电线两两相连。
    • 通话过程中,两个用户始终占用端到端的通信资源,线路传输效率比较低。
  • 分组交换

    • 存储转发技术,将报文划分成若干数据包(分组),并将地址等信息加入消息头封包。
    • 使用特定协议,通过路由器转发分组。
  • 对于高速网络,提高的仅仅是数据发送速率,而不是比特在链路上的传播速率,后者仅与传输介质有关。

OSI七层模型

  • 应用层:直接为用户的应用进程提供服务。
  • 传输层:为两个主机中进程间通信提供服务,由于每个主机可以同时运行多个进程,因此传输层有复用和分用的功能,一台主机上的多进程一般通过不同端口来区分。
  • 网络层:为网络上不同主机提供通信服务,以IP数据报方式进行封装并传输。
  • 数据链路层:IP数据报封装成帧,加入控制信息,并在相邻节点的链路上透明传输。
  • 物理层:传输比特流。

网络分层特点

  • 协议是控制对等层通信的规则集合,即协议是水平的
  • 服务由下层向上层通过层间接口提供,即服务是垂直的。本层服务无法看见下面的协议,即下面的协议对上面的实体是透明的
  • 底层的实体在封装上一层的数据包时,通常会加一个包头用以描述本层的信息。在解包时,对应层将对应的包头剥离并解析。
    /posts/network/hierarchy.png
    网络分层

数据链路层

基本问题

  • 封装成帧

    • 将IP数据报前后添加首部和尾部,构成一个帧。
    • 首部和尾部的一个作用是起到帧定界,此外还包含很多控制信息。
    • MTU表示最大传输单元,即帧的数据部分的长度上限。
  • 透明传输

    • 传输的文本可能与定界控制字符冲突,这样需要通过添加转义字符来将数据文本与控制字符区分出来,以便输入的任何字符都可以放在这样的帧中传输过去,这样的传输称为透明传输。
  • 差错检验

    • 现实通信链路不会是理想的,bit在传输过程中可能产生零一倒置,引发比特差错
    • 数据链路层常常通过采用CRC(循环冗余检验)来检错,并不能纠错。
    • 数据链路层的差错检验只能检出比特差错,而无法检测出帧丢失,帧重复,帧失序等问题,因此数据链路层无法提供可靠传输
    注意
    为什么当前网络协议中数据链路层不通过帧编号,确认和重传机制做到可靠传输呢?由于当前通信线路的质量大大提高,数据链路层的出错概率大大降低。因此广泛使用的网络协议中都不要求数据链路层提供可靠传输。一旦传输时出现了差错,那么改正差错由上层的TCP协议完成,从而提升通信效率。

局域网

  • 拓扑

    • 星型(使用最广泛)
    • 令牌环形
    • 总线型
    • 树形
  • 共享信道可以使多个用户共享通信媒体资源,主要有以下两种方法:

    • 静态划分信道,即时分/频分/波分/码分等复用方式使得各用户分配到的信道资源正交,不会彼此发生冲突。但其利用率较低,代价较高,不适用于局域网。
    • 动态媒体接入控制,又称多点接入,分为随机接入受控接入两种。前者用户可以随机发送信息,如果发生碰撞就需要通过解决冲突的网络协议来处理冲突;后者需要服从某种控制来接入,常用于令牌环拓扑中的轮询控制,使用的较少。

以太网

  • 采用随机接入的方式。

  • 将数据链路层演进为MAC层(媒体接入层)。

  • 采用曼彻斯特编码,解决连0/连1问题导致的无法从比特流中提取位同步问题。

  • 由于多站共享一个信道,单个站无法做到同时发和收,因此以太网是半双工通信

  • 冲突解决协议采用CSMA/CD协议(载波监听多点接入/碰撞检测)。

    • 多点接入表明其为总线型网络,多个站点共享信道。
    • 载波监听表明发送前先监听,,尽量避免冲突的产生。
    • 碰撞检测表示边发送边监听,在发送过程中通过传输信号的异动判断出其他人也在发送,从而检测出碰撞。此时应立即停止发送,避免持续浪费网络资源,并采用指数退避的方式重试。

集线器

  • 集线器使得以太网从总线型拓扑演进到星型拓扑,采用的传输介质是双绞线。
  • 使用集线器后的以太网仍是一个总线网,同一时刻只有一个站发送数据,扩展以太网是网桥的事。
  • 集线器工作在物理层,仅做简单的比特转发,本质就是一个多接口转发器,不进行碰撞检测。

MAC层

  • MAC地址即物理地址,48位,固化在适配器中,具有唯一性。
  • MAC帧组成
    • 目的地址
    • 源地址
    • 类型(描述上一层的协议类型)
    • 数据(长度在46-1500字节之间,不足46字节加入填充字段)
    • 帧检测序列(FCS)

扩展以太网

  • 物理层通过使用光纤和光纤调制解调器进行电/光信号转换,可以将多个集线器连接起来,避免减少信号的衰减导致的CSMA/CA协议无法工作,本质上扩大了碰撞域

    /posts/network/large-collision-region.png
    扩大碰撞域

  • 网桥:将多个网段连接起来,扩展以太网范围,其依赖转发表来在各个网段中转发帧。

    • 优势
      • 各网段碰撞域相互隔离,不同网段的通信互不干扰,增大吞吐量。
      • 扩大了物理范围,增加了接入的站数。
      • 提升可靠性,网段之间互不干扰。
    • 缺点
      • 查找转发表增加了时延。
      • 没有流量控制,当网络负载很重时,会出现丢帧情况。
      • 接入站点数过多时会导致广播风暴
        /posts/network/multi-collision-region.png
        多个相互隔离的碰撞域
  • 透明网桥

    • 以太网上的站点不知道帧会经过哪几个网桥,这类网桥一旦接入局域网,无需经过人工配置转发表就可以工作。

    • 透明网桥的自学习

      • 初始时转发表为空。
      • 网桥每收到一个帧时,就会记录其源地址和来源端口,构建转发表(盲转发)。
      • 收到一个帧时,会先查转发表,如果目的地址存在,则向对应的端口转发,否则向除来源外的所有端口转发。
      • 转发表项中会记录更新时间,在站地址发生变更时能够使得相关表项过期掉。
      • 透明网桥使用生成树算法,避免帧在网络中兜圈子。
        /posts/network/self-learn.png
        自学习示意图
    • 网桥与集线器的区别

      • 网桥位于数据链路层,是基于存储转发,将完整的帧接收下来并校验无误后转发出去,网桥将两个局域网连接成一个大的网络,不同局域网碰撞域相互隔离;而集线器工作在物理层,是逐比特转发,只是扩大了碰撞域
  • 以太网交换机(L2交换机)

    • 本质是多接口网桥,通过隔离碰撞域连接多个网络,提升吞吐率。
    • VLAN可以通过交换机实现,在MAC帧首部增加4个字节,通过其中的VID来标识此帧所属的VLAN。

网络层

特点

  • 向上提供best-effect数据报服务,不提供质量保证。
  • 实际链路传输由下层提供,且对网络层透明。
  • 网络层使用IP地址标识每个站点,其中包括网络号用以标识网络,主机号用以在网络中唯一标识主机。
  • 使用路由器作为中间设备,将不同的网络(可以是异构的)连通起来,构成一张逻辑网络。而网桥连接的多张网络在网络层而言只是一个网络,具有同一个网络号。

IP地址与硬件地址

  • IP地址是网络层上使用的地址,存放在IP数据报的首部;硬件地址是物理层和链路层使用的地址,存放在MAC帧的首部,MAC帧会将IP数据报作为自己的数据负载。

  • 硬件地址对网络层不可见,换句话说,数据链路层及以下的通信对于网络层是透明的。

/posts/network/protocol-stack-ip.png
IP地址与MAC地址在数据流动中起到的作用
  • ARP协议(地址解析协议):根据IP地址解析物理地址。

    • 主机的ARP高速缓存中存放IP地址到物理地址的映射表,并动态更新。

    • 具体流程

      • 如果ARP高速缓存中有,则直接获取。
      • 否则在本网络广播一个ARP请求。
      • 站点发现IP是本站的IP则将物理地址加入到一个ARP响应中并回复,其他站点忽略此请求。
      • 将该响应的物理地址与请求的IP地址构建的映射关系加入ARP高速缓存。

      同网桥的自学习类似,ARP缓存也存在生存时间(ttl)避免站点地址发生变化。

  • RARP协议(逆地址解析协议):根据物理地址解析IP地址,逐渐被DHCP所取代。

    为何要在物理地址的基础上构建IP地址,而不是直接使用物理地址来通信呢?
    异构网络的物理地址十分复杂,彼此之间的通信所带来的复杂转换过程基本上无法在用户主机上完成。使用统一的IP地址屏蔽掉了底层网络的复杂性。

IP数据报

  • 格式:首部(可变部分+不可变部分)+ 数据部分。
  • 首部固定部分(20字节)
    • 版本:表示IP协议(v4, v6)。
    • 首部长度:表示首部总长度,为4*x字节。
    • 区分服务,一般不用此字段。
    • 总长度:首部和数据的长度之和。
    • 标识:用于串联分片。
    • 标志DF=1表示不允许分片,MF=1表示后续还有分片。
    • 片偏移:用于描述分片的顺序,从而在收端组装分片。
    • 生存时间:IP报文在路由器间转发的最大跳数,避免在网络中兜圈子。
    • 首部校验和:CRC校验首部。
    • 源地址
    • 目的地址
  • 可变部分
    • 一般不使用,在ipv6中无可变部分。
    • 需填充至4字节的整数倍。

路由

  • 路由表
    • 每条路由记录着 (目的网络地址,下一跳地址)
    • 路由表中记录着网络地址而非主机地址的原因是避免路由表过大,导致查表时引入较大的开销。
    • 会有一些特例,在路由表中的地址是特定主机的地址,称为特定主机路由,一般用于排查问题。
    • 在路由表中没有找到网络地址时,会走默认路由
    • 路由转发时,不会改变数据报的源地址与目的地址,而是通过ARP协议将路由表中的网络地址转为MAC地址进行转发,IP地址屏蔽了底层帧传输细节。
  • 分组转发算法
    • 从数据报首部获取目的IP地址D,得到网络地址N
    • 若网络N与该路由器直接相连,则直接交付到特点的主机。
    • 若路由表中有地址D的特定路由,则直接把数据报转发给下一跳所对应的路由器。
    • 若路由表中有到达网络N的路由,则把数据报转发给下一跳所对应的路由器。
    • 若路由表中有默认路由,则将数据报转发给默认路由器。
    • 以上均不满足则报错。

子网与超网

  • 子网出现的原因
    • IP地址空间利用率低。
    • 每个物理网络一个网络号会使路由表太大导致性能变坏。
    • 两级IP地址不够灵活
  • 子网特点
    • 原物理网络基础上,划分出若干个子网,由两级变三级。
    • 对外仍表现为一个网络,减少外网路由表的条目数,通过多分一级变线性为乘法。
    • 划分子网后,路由表多了一列子网掩码,在路由查找时会多一步将IP地址与子网掩码进行与运算获取网络地址,再进行匹配查找。
  • 超网(CIDR,无分类编址)特点
    • 消除了A,B,C类地址及划分子网的概念,通过引入网络前缀的概念使得网络的划分更灵活。
    • 从三级编址<网络号,子网掩码,主机号>回到了两级编址<网络前缀,主机号>。
    • 采用最长前缀匹配从而进行能匹配得更具体。
    • 通过二叉查找树的数据结构提升路由查找效率。
  • 超网出现的原因
    • 为解决传统IP分类及子网划分引起的IP地址分配不灵活,从而降低IP地址利用率低的问题。

路由协议

  • 自治系统AS

    • 单一技术管理下的一组路由器。
    • 典型的一个ISP就是一个AS。
    • 本质上是一个网络单元,内部表现同质,对外部表现为一个整体。
  • 内部网关协议(IGP):一个AS内部使用的路由选择协议。

    RIPOSPF
    原理描述基于距离(跳数)向量的路由选择协议基于代价的最短路径优先算法,使用链路状态协议
    使用算法距离向量算法(基于ford算法)洪泛法+Dijkstra最短路径算法
    交换对象相邻下一跳路由器相邻的所有路由器
    交换内容本路由器所知道的全部信息(到所有网络的距离)本路由器与相邻所有路由器的链路状态(为构建网络拓扑图)
    交换间隔固定时间间隔发生变化时
    限制跳数不超过16-
    传输方式UDPIP数据报
    适用场景网络规模小的场景(少于最大跳数限制)网络和规模大的场景
    优势实现简单,开销较小更新过程收敛的快;代价相同的路径可以通过负载均衡策略选择
    劣势网络故障时,将消息传递给所有的路由器时间很慢;只会选择一条跳数最小的路径协议负载,需维护链路状态数据库,开销较大
  • 外部网管协议(BGP)

    • 需考虑的问题
      • 网络规模太大,使得AS之间的路由选择很困难。
      • AS之间是异质的,路由选择时需考虑相关策略。
    • 核心:力求找到一条比较好的路由,而非选择最佳路由。

虚拟专用网VPN

  • 机构内部使用专用地址,节省公网地址资源。

  • 因特网中所有路由器对目的地址是专用地址的数据报一律不行进转发。

  • 专用IP地址集合:

    • 10.*.*.*
    • 172.[16-31].*.*
    • 192.168.*.*
  • VPN:用于外网/专网/远程接入专用互联网。

  • 实现方式:IP隧道技术

/posts/network/ip-tunnel.png
隧道技术示意图

网络地址转换NAT

  • 用于专用网内的一台主机与外网进行通信

  • NAT路由器(一般是网关)需要有公网IP,专网内的主机通过公网IP与外界通信。

  • NAT本质上是通过端口映射的方式实现多机同时与外界通信的,即一个主机的请求映射到公网IP:特定端口上,与外部的通信地址就是该形式,在NAT路由器侧进行转换。

  • 根据通信方向将NAT分为sNAT与dNAT。

    • sNAT:专网内主机访问外网。
    • dNAT:外网访问专网内主机。

其他

  • PING使用了ICMP(网际控制协议)协议进行报文信息交换。
  • IGMP(网际组管理协议)用于通知多播路由器本局域网中是否有主机加入或退出了某多播组。
  • ICMP,IGMP,OSPF报文均在IP层传输。

传输层

  • 传输层与网络层的区别
    • 网络层为主机之间提供逻辑通信(主机之间),传输层为应用进程之间提供端到端的逻辑通信(进程之间)。
    • 两个主机上的多进程通信是在IP协议上加上一层端口的概念区分开来的。
    • IP数据报只检验首部,而TCP/UDP的检验是首部+数据

UDP协议

仅在IP数据报服务上加了复用/分用及差错检测的功能。

  • 特点
    • 无连接
    • 尽最大努力交付,不可靠(校验有误后就丢弃掉)
    • 面向报文,一次交付一个完整报文
    • 无拥塞控制。
    • 支持单播,多播,广播通信。
    • 首部开销小(8字节,源端口、目的端口、长度、校验和),传输速度快。

TCP协议

特点

  • 面向连接,虚连接。
  • 只能点对点,无法实现一对多,TCP的端点是Socket,形如IP:PORT
  • 提供可靠交付,保证数据无差错、不丢失、不重复、不失序。
  • 全双工通信。
  • 面向字节流,即不像UDP一次交付一个完整报文,而是根据窗口值网络拥塞决定报文段的大小。只是最终接收方应用程序需要和发送方应用程序发出的字节流完全一样。

TCP报文的首部

  • 源端口和目的端口
  • 报文段序号,按字节顺序编号,起始序号需要在TCP建立连接时确认
  • 确认号,期望收到对方下一个报文段的第一个数据字节的序号。
  • 数据偏移,指出TCP首部长度,因为TCP首部是变长的。
  • 保留位
  • 控制位(6位)
    • 紧急URG:表明报文为紧急数据,不受接收窗口值限制。
    • 确认ACK:表明此信息为确认信息。
    • 推送PSH:表明报文需要尽快将报文交付给应用程序。
    • 复位RST:表明因为某种原因需要释放连接。
    • 同步SYN:表明该报文用于请求建立TCP连接。
    • 终止FIN:表明该报文用于请求释放TCP连接。
  • 窗口,接收窗口值。
  • 检验和
  • 紧急指针,URG=1时生效,表明紧急数据字节数。
  • 选项,长度可变。

可靠传输

  • 停止等待协议

    • 又称为自动重传请求(ARQ)
    • 每发送完一个分组就停止发送,等待对方确认,收到确认后再发送下一个分组。
    • 一段时间(略大于RTT)后没有收到收端的分组确认,便会重传。因此要求发送完分组必须暂时保留已发送的副本,此外分组和确认分组需要进行编号来确认是否发送成功。
    • ARQ协议比较简单,但信道利用率很低,可以通过利用流水线技术予以改造(连续ARQ协议)。
  • 连续ARQ协议

    • 在发送窗口内的多个分组可以连续发送出去,不需要等待对方的确认。
    • 接收方采用累积确认,即对按序到达的最后一个分组发送确认。
  • 滑动窗口协议

    • 本质是连续ARQ协议,滑动窗口以字节为单位,而非以报文为单位

    • TCP流量控制的实现,流量控制的作用是让发送方的发送速率不要太快,要让接收方来得及接收

    • 窗口内可能包含两类数据,可以使用三个指针来标识,其中P1、P3为窗口前后沿,P2为两类数据的分界。

      • 已发送但未收到确认(P2-P1),此类数据需要被缓存住,以备重传。
      • 允许发送但尚未发送(P3-P2)。
    • 发端和收端均有一个窗口值,发送窗口会受接收窗口的调节(发送窗口<=接收窗口),因此接收窗口是根据接收端处理能力动态变化的。不过发送窗口和接收窗口并不总是一样大,因为通过网络进行窗口的同步存在延时。

      为何发送窗口可能小于接收窗口?

      发送窗口除了受流量控制的调节外,还受拥塞控制的调节。 在拥塞控制中,引入了拥塞窗口的概念,因此为避免网络拥塞,发送窗口需要小于拥塞窗口。即

      发送窗口=min(接收窗口,拥塞窗口)

    • 接收方需要有累积确认的能力,对于未按序到达的数据,建议接收方可以将其缓存起来(而非直接丢弃)以提升传信率。

    • 由于累积确认只会传递按序到达的最后一个分组的确认消息,在网络有较多的丢包情况下,发端会重传很多数据,加速网络的恶化。因此引入选择确认(SACK)进行优化,其可以在ACK报文首部中描述已到达消息的边界。

    • 如果每次传输的报文数据相对于TCP首部很小,那么传输效率会很低,滑动窗口存在以下问题。

      • 当用户数据逐字发送时,会引起单个TCP报文数据内容过短。可以通过发送方攒batch方式将数据缓存起来发送。
      • 糊涂窗口问题,即收端逐字节腾出接收窗口空间,导致发送窗口一直很小。此问题可以通过让接收方攒batch方式批量增大接收窗口。
    接收窗口为0时是否可能引发死锁?

    如果接收窗口从0发生变化时,其会向发送方同步接收窗口。但如果此同步信息丢失了,那么发送窗口是否会一直为0,发端无法发送数据,收端接收不到数据,且没有变更窗口值的打算,是不是会陷入死锁的状态?

    不会,首先需要明确窗口的同步报文不存在确认机制,同样也不存在超时重传机制。为了避免上述死锁的问题,TCP连接维护一个计时器,当接收窗口为0时,计时器开始计时,若计时到期则发送一个零窗口探测报文,对方会在确认这个报文时给出当前的窗口值。

拥塞控制

  • 网络拥塞主要是由于对资源的需求大于可用资源产生,引起网络拥塞的可能原因列举如下。
    • 结点缓存的容量太小,导致到达该结点的分组被丢弃。
    • 处理机处理时间太慢,导致队列逐渐被灌满,后到达的请求会被丢弃。此外处理速度慢,可能导致驻留在队列时间过长,超过了超时重传间隔,引起重传。
  • 拥塞控制的核心思想在于通过控制发送方发送速率,防止过多数据注入到网络,避免网络中的路由器或链路出现过载。
  • 拥塞控制的方法
    • 慢开始:发送方维护一个拥塞窗口,发送起始窗口值为1,之后每轮窗口值翻倍,直到超过了慢开始门限 ssthresh。当发生拥塞时,ssthresh减半(乘法减小),从头进行慢开始。
    • 拥塞避免:当拥塞窗口达到了ssthresh,窗口值开始逐1递增(加法增大),以降低发送增速。
    • 快重传:当收端收到一个失序的报文就立即发送一个重复确认,当发端连续收到3个重复确认就立即重传报文,而无需等待此报文的重传计时器到期。快重传用于尽早重传未被确认的报文段,快速发现拥塞。
    • 快恢复:当发生乘法减小时,并不从头执行慢开始,而是将拥塞窗口设为ssthresh的一半,之后开始进行加法增大。
  • 全局同步
    • 当网络拥塞发生时,缓存队列已满,新来的分组全部被丢弃(尾部丢弃策略),此时所有TCP连接都会触发重传,从而触发乘法减小,这就导致了TCP中的全局同步问题。
    • 全局同步导致全网通信量可能瞬时减小很多,而一段时间后又会增大很多。
    • 可以通过随机早期检测RED策略来改善全局同步问题,此策略核心是设置软硬门限;在软门限内,不丢弃任何报文,而在软门限和硬门限间,以一个自适应概率丢弃报文;当超过了硬门限,则采用尾部丢弃策略。RED可以将批量的乘法减小预打散,以缓解全局同步问题。

TCP的连接管理

  • 连接建立

    • 三次握手用以同步双方序号。
    建立连接为何需要3次握手,而不是2次或者4次?

    由于建立连接需要双方同步一些信息(主要是序号),而在不可靠信道中完成可靠的同步,至少需要3次通信。

    如果是两次的话,当一个历史握手请求由于滞留在网络中而在连接关闭后到达收端,收端给出的ACK会被发端忽略掉,此时收端已经进入ESTABLISHED状态,而发端又不会向收端发信,导致资源会出现浪费。

    理论上双方互相确认是需要4次通信的,即像挥手一样的两个来回。只是建立连接时并不像释放连接那样在两个来回间还会继续发送未发完的数据。因此第一次握手的ACK和同步请求可以放在一个报文里(从图示可以看到),所以可以减少一次握手。

  • 连接释放

    • 四次挥手
      • 前两次挥手由主动方发起,被动方确认,关闭主动方的连接。
      • 被动方等待数据发送完。
      • 后两次回收由被动方发起,主动方确认,关闭被动方的连接。
    TIME-WAIT的作用

    主动端发送最后一个ACK时进入TIME-WAIT状态,需要等待2MSL才变更到CLOSED状态,有以下两个原因。

    1. 最主要的原因是确保被动端收到了确认消息并正常关闭。如果此ACK丢失了,被动端可以重传FIN报文,主动端可以重新发送ACK。如果主动端跳过TIME-WAIT状态直接进入CLOSED,其无法重传ACK,被动端也无法正常的进入CLOSED。
    2. 为了确保在网络中兜圈子的报文进入到下一次连接中,可以在此次TIME-WAIT阶段消化掉。

应用层

域名系统DNS

  • 域名系统

    • 将人们使用的机器的名字转换为IP地址。
    • 因特网上的域名系统是由分布式域名服务器实现的。
    • 使用UDP传输。
  • 域名服务器

    • 分类
      • 根域名服务器,知道所有顶级域名服务器的域名和IP地址,是最高层次的域名服务器。
      • 顶级域名服务器,负责管理在该顶级域名服务器注册的所有二级域名。
      • 权限域名服务器,负责一个区的域名服务器,一个域下可能会有多个区。
      • 本地域名服务器,也称为默认域名服务器,离用户较近,可以解析同一个ISP下的所有域名,是向外查询的入口。
    • 解析方式
      • 递归查询
        • 如果DNS服务器不知道被查询域名的IP地址,那么其就以DNS client身份向根域名服务器发出查询请求报文,而不是告知主机下一个查询DNS服务器的地址让主机自己查询。
        • 一般用于主机向本地域名服务器的查询。
      • 迭代查询
        • 当域名服务器收到迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应向那个域名服务器进行查询,并不充当DNS client帮其查询。
        • 一般用于本地域名服务器向根域名服务器的查询。
    • 高速缓存
      • 为提高DNS查询效率,减少解析所传的报文数量。
      • 存放最近查询过的域名以及从何处获得域名映射信息的记录。
        • 可以是域名对应的IP。
        • 也可以是域名对应顶级域名服务器的IP地址。
        • 为防止无法感知到域名发生变动,DNS缓存一般会有一个过期时间。一般而言,DNS发生变动的频率较低,缓存与数据库的一致性影响不大。(在云原生的某些场景下DNS变化较为频繁,DNS缓存会成为瓶颈。)

文件传输协议FTP/TFTP

  • FTP基于TCP,TFTP基于UDP

  • FTP通过复制整个文件以实现文件共享,如果需要修改文件,需要先获取文件的一个本地副本,在副本上进行修改,然后再将修改后的文件传回。

  • FTP基本原理

    • 一个主进程负责接收新的请求。
    • 若干从属进程,负责处理单个请求。
    • FTP的客户端与服务器间要建立两个并行的TCP连接,控制连接数据连接,控制连接在会话期间一直打开,客户端传输请求通过控制连接发送给服务端的控制进程,控制连接不用于传输文件;数据连接用于传输文件,服务端控制进程收到客户端的请求后便会创建数据传输进程和数据连接,用来传输文件。FTP的数据面与控制面相互分离。
    • 熟知端口是21(监听)和20(传输)。
  • FTP缺陷:复制整个文件实现共享不够灵活。即便只需要在原有的文件作出一点修改时,也得传输整个文件。而NFS可以允许应用进程打开一个本地文件,并在该文件的某个特定位置开始读写数据,因此在网络上传输的只是少量的修改数据。

  • TFTP工作原理

    • 类似停止等待协议,发送数据需要确认。
    • 熟知端口是69。

万维网WWW

  • 统一资源定位符URL

    • 用于标志分布在整个因特网上的万维网文档。
    • 组成:<协议>://<主机>:<端口>/<路径>
    • 最常使用的协议是http,其次是ftp。
  • 超文本传输协议 HTTP

    • 无状态,使用TCP传输。

    • 从浏览器点击一个链接发生的事件:

      • 浏览器分析URL并通过DNS解析出IP。
      • 浏览器向此IP服务器建立TCP链接。
      • 浏览器发送读取文件的命令。
      • 服务器将对应的文件以HTTP response的方式返回给浏览器。
      • 释放TCP连接。
      • 浏览器将收到的数据进行渲染,将结果返回给用户。
    • HTTP 1.0 vs HTTP 1.1 vs HTTP 2.0

      • 在HTTP 1.0中每个http请求都会创建一个TCP连接,因此一个GET命令需要2RTT;此外,短连接的频繁创建与销毁会影响数据传输效率,因为每次创建后数据的发送都会历经一个慢开始的过程。
      • HTTP 1.1支持了长连接,减少了频繁建立TCP连接的开销。此外还支持pipeline技术,以缩短TCP连接空闲时间,提升服务器资源利用率。
      • HTTP 2.0在HTTP 1.1 pipeline基础上又提升了复用程度,此外消息的传输从明文变为二进制字节流,提升传输效率。
    • 代理服务器可用作万维网高速缓存,用户的请求到达proxy后,如果发现有缓存则直接返回。否则proxy充当http client向服务器发起请求,并将响应缓存起来。

    • Cookie:由服务器返回给浏览器,记录一些用户信息,在下次发http请求时连同此信息发送给服务器。存在的核心原因是http是无状态的

  • 检索系统

    • 搜索引擎分类
      • 全文搜索引擎:通过蜘蛛在网络链接间爬行,建立一个大型的在线数据库,用户输入关键词在此数据库中搜索结果。
      • 分类目录搜索引擎:数据库是按目录分类组织的,用户需要按设计好的目录逐级查询。
      • 垂直搜索引擎:相比全文搜索引擎,更加针对某一特定领域、特定人群或特定需求提供搜索服务,即在某个行业知识上下文中进行关键词搜索。
      • 元搜索引擎:将用户请求发到多个独立的搜索引擎上搜索,将结果统一处理,称为搜索引擎之上的搜索引擎

电子邮件

  • 主要构成组件

    • 用户代理(UA)
    • 邮件服务器
    • 邮件发送协议(如SMTP)及邮件读取协议(如POP3)
  • SMTP协议和POP3协议

    • 二者均是基于TCP传输。
    • 从UA发送到发送方邮件服务器的过程使用了SMTP协议。
    • 从发送方邮件服务器向接收方邮件服务器传输使用了SMTP协议。
    • UA从接收方邮件服务器读取邮件的过程使用了POP3协议。
    为什么不将邮件服务器程序植入到UA中?
    • 并非所有计算机都具有运行邮件服务器的条件。
    • 邮件服务器程序需要24小时运行,而个人PC通常不具有long running的特性。

动态主机配置协议 DHCP

  • 作用:自动进行网络配置。
    • 在计算机第一次连入到因特网时,需要相应的网络配置。
      • IP地址
      • 子网掩码
      • 默认路由器的IP地址
      • 域名服务器的IP地址
    • 计算机在网络中的位置发生变化时,需要更新网络配置,因此需要采用自动协议配置方式。
  • DHCP是基于UDP的(需要广播),知名端口是68(client)与67(server)。
  • 工作原理
    • 待配置的主机广播一个发现报文,用以寻找DHCP server。
    • DHCP中继路由器发现此报文,会以单播形式转发给DHCP server。
    • DHCP server将网络配置信息及租用期返回给DHCP中继路由器。
    • DHCP中继路由器将其返回给主机。
    • 主机获取到对应的网络配置并应用,同时计算租期。
    • 租期临近时向DHCP server发起续约请求。若同意则更新租期,否则发送发现报文重新获取网络配置。