女王控的博客

计算机网络读书笔记

概述

网络的网络

f1fb826b ecf4 4ddb 91f0 2bafecf08869

网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。

ISP

0f8c0a60 d4c6 47f4 978d 1a5c393fedac

  • 互联网服务提供商ISP可以从互联网管理机构获得许多IP地址,同时拥有通信线路以及路由器等连网设备,个人或机构向ISP缴纳一定的费用就可以接入互联网。
  • 目前互联网是一种多层次结构,ISP根据覆盖面的大小分为主干ISP、地区ISP、本地ISP。
  • 互联网交换点IXP允许两个ISP直接相连而不用经过第三个ISP。

互联网的组成

8ab40d6d bd7c 47d3 afe8 6a8bc9f5d04c

  • 边缘部分:所有连接在互联网上的主机,用户可以直接使用。
  • 核心部分:由大量的网络和连接这些的路由器组成,为边缘部分的主机提供服务。

主机之间的通信方式

  • 客户-服务器(C/S):客户是服务的请求方,服务器是服务的提供方。
  • 对等(P2P):不区分客户端和服务器。

电路交换与分组交换

c50d230c 8b89 4644 8f62 8708d03aac5b

  • 电路交换 电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到10%。
  • 报文交换 报文交换用于邮局通信系统,邮局接收到一份报文之后,先存储下来,然后把相同目的地的报文一起转发到下一个目的地,这个过程就是存储转发过程。
  • 分组交换 分组交换也使用了存储转发,但是转发的是分组不是报文。把整块数据称为一个报文,由于一个报文可能很长,需要先进行切分,来满足分组能处理的大小。在每个切分的数据前面加上首部之后就成为了分组,首部包含目的地址和源地址等控制信息。 2366c2ad 5859 4d4e 805f 7e2b88061cd8 存储转发允许在一条传输线路上传送多个主机的分组,因此两个用户之间的通信不需要占用端到端的线路资源。 相比于报文交换,由于分组比报文更小,因此分组交换的存储转发速度更加快速。

时延

总时延=发送时延+传播时延+处理时延+排队时延

ceee91c2 da26 4169 94c3 e4608b46b9ac

  • 发送时延 主机或路由器发送数据帧所需要的时间。 delay=l(bit)/v(bit/s)delay=l(bit)/v(bit/s) 其中l表示数据帧的长度,v表示发送帧率。
  • 传播时延 电磁波在信道中传播一定的距离需要花费的时间,电磁波传播速度接近光速。 delay=l(m)/v(m/s)delay=l(m)/v(m/s) 其中l表示信道长度,v表示电磁波在信道上的传播速率。
  • 处理时延 主机或路由器收到分组时进行处理所需要的时间。例如分析首部,从分组中提取数据部分等。
  • 排队时延 分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量。

计算机网络体系结构 *

  1. 七层协议 如图a所示,其中表示层和会话层用途如下:

    1. 表示层:信息的语法、语义以及它们的关联,如加密解密、转换翻译、压缩解压缩。
    2. 会话层:不同机器上的用户之间建立及管理会话。 1005dc9d 9049 4b06 9524 6171e56ebd8c
  2. 五层协议

    1. 应用层:为特定应用程序提供数据传输服务,例如HTTP、DNS等,数据单位为报文。
    2. 运输层:提供的是进程间的通用数据传输服务。由于应用层协议很多,定义通用的运输层协议机就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据包协议UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP主要提供完整性服务,UDP主要提供及时性服务。
    3. 网络层:为主机之间提供数据传输服务,而像运输层协议那样是为主机中的进程提供服务。网络层把运输层传递下来的报文段或用户数据报封装成分组。
    4. 数据链路层:网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为相邻结点间提供服务。数据链路层把网络层传来的分组封装成帧。
    5. 物理层:考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能的屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
  3. 数据在各层之间的传递过程

    1. 在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。
    2. 路由器只有下面三层协议,因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要运输层和应用层。 ac106e7e 489a 4082 abd9 dabebe48394c
  4. TCP/IP体系结构

    1. 它只有四层,相当于五层协议中数据链路层和物理层合并为网络接口层。
    2. 现在的TCP/IP体系结构不严格遵循OSI分层概念,应用层可能会直接使用IP层或者网络接口层。 37b74a34 251c 45f8 88a4 614ec953f7e9
    3. TCP/IP协议族是一种沙漏形状,中间小两边大,IP协议在其中占用举足轻重的地位。 93cbce0c c37d 429c 815b 861976a46bd8

物理层

通信方式

  1. 单向通信,又称为单工通信。
  2. 双向交替通信,又称为半双工通信。
  3. 双向同时通信,又称为全双工通信。

带通调制

模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。

d2c55c84 aa1f 43c1 bd97 457bcb7816b3

信道复用技术

  1. 频分复用、时分复用

    • 频分复用的所有用户在相同的时间占用不同频率带宽资源;时分复用的所有用户在不同的时间占用相同的频率带宽资源。
    • 使用这两种方式进行通信,在通信的过程中用户会一直占用一部分信道资源。但是由于计算机数据的突发性质,没必要一直用信道资源而不让出给其他用户使用,因此这两种方式对信道的利用率都不高。 543d47a1 f0dd 414f b23c 0c142c814854
  2. 统计时分复用 是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。 29058e09 bb72 4040 a73d 4c497895e9ce
  3. 波分复用 光的频分复用。由于光的频率很高,因此习惯用波长而不是频率来表示所使用的光载波。 78534153 88d1 4f83 a6e0 59064dbdc43a
  4. 码分复用

    • 为每个用户分配m bit的码片,并且所有的码片正交,对于任意两个码片S\vec ST\vec TSTm=0{\vec S\ast \vec T \over m} = 0
    • 为了方便,取m=8,设码片S为00011011。在拥有该码片的用户发送比特1时就发送该码片,发送比特0是就发送该码片的反码11100100。
    • 在计算时将00011011记做(-1-1-1+1+1-1+1+1),可以得到 SSm=1{\vec S\ast \vec S\over m}=1 SSim=1{\vec S\ast \vec {S^i}\over m}=-1 \mid { 其中Si\vec {S^i}S\vec S 的反码。}
    • 利用上面的式子我们知道,当接收端使用码片S对接收到的数据进行内积运算时,结果为0的是其他用户发送的数据,结果为1的是用户发送的比特1,结果为-1的是用户发送的比特0。
    • 码分复用需要发送的数据量为原先的m倍。 0042edad 8e3b 4279 bd93 6906fcd1b640

数据链路层

三个基本问题

  1. 封装成帧 将网络层传下来的分组添加到首部和尾部,用于标记帧的开始和结束。 3402d1c0 7020 4249 9a7f 12ea2ea6adf7
  2. 透明传输 透明表示实际存在的事物好像不存在一样。 帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定,需要在数据部分出现首部尾部相同的内容前面插入转义字符,如果出现转义字符,那么就在转义字符前面再加个转义字符,在接收端进行处理 之后可以还原出原始数据。这个过程透明传输的内容是转义字符,用户察觉不到转义字符的存在。 4146e14b 56b9 433c 8e3d 74b1b325399c
  3. 差错检测 目前数据链路层广泛使用了循环冗余(CRC)来检查比特差错。

点对点信道-PPP协议

互联网用户通常需要连接到某个ISP之后才能接入到互联网,PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议。

8393f520 d824 44ea a5f3 1c1a73d735fb

在PPP的帧中

  • F字段为帧的定界符
  • A和C的字段暂时没有意义
  • FCS字段是使用CRC的检验序列
  • 信息部分的长度不超过1500字节

0f39c274 b79c 4e83 8c7c 94fc2747832d

局域网的拓补

8b15e36f 69b4 46b6 a07c 7234ac7c7927

广播信道-CSMA/CD协议 *

在广播信道上,同一时间只能允许一台计算机发送数据。 CSMA/CD表示载波监听多点接入/碰撞检测。

  • 多点接入:说明这是总线型网络,许多计算机以多点的方式连接到总线上。
  • 载波监听:每个站都必须不停的监听信道。在发送前,如果监听信道正在使用,就必须等待。
  • 碰撞检测:在发送中,如果监听到信道已有其他站正在发送数据,就表示发生了碰撞。虽然每一个站在发送数据之前都已经监听到信道为空闲,但是由于电磁波的传播时延的存在,还是可能发送碰撞。

f9ed4da5 0032 41e6 991a 36d995ec28fd 记端到端的传播时延为τ,最先发送的站点最多经过2τ就可以知道是否发生了碰撞,称2τ为争用期。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发送碰撞。 当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用截断二进制指数退避算法来确定,从离散的整数集合{0,1,…,(2^k-1)}中随机去除一个数,记做r,然后取r倍的争用期作为重传等待时间。

扩展局域网 *

  1. 在物理层进行扩展

    • 使用集线器进行扩展。
    • 集线器的主要功能是对接收到的信号进行放大,以扩大网络的传输距离。
    • 集线器不能根据MAC地址进行转发,而是以广播的方式发送数据帧。
    • 集线器是一种共享式的传输设备,意味着同一时刻只能传输一组数据帧。 823cdab7 3779 4e3a a951 dc2d154e0ee6
  2. 在链路层进行扩展

    • 最开始使用的是网桥,它接收到一个帧时,根据帧的MAC地址,查找网桥中的地址表,确定将帧转发的接口。
    • 网桥不是共享式设备,因此性能比集线器这种共享设备更高。
    • 交换机的问世很快就淘汰了网桥,它实质上是一个多接口网桥,而网桥是两接口。交换机的每个接口都能直接与一个主机或者另一个交换机相连,并且一般都工作在全双工方式。
    • 交换机具有学习能力,学习的是交换表的内容,交换表中存储着MAC地址到接口的映射。下图中,交换机有4个接口,主机A向主机B发送数据帧时,交换机把主机A到接口1的映射写入交换表中。为了发送数据帧到B,先查交换表,此时没有主机B的表项,那么主机A就发送广播帧,主机C和主机D会丢弃该项,主机B收下之后,查找交换表得到主机A映射的接口为1,因此就把帧发送主机A,同时交换机添加主机B到接口3的映射。 c9cfcd20 c901 435f 9a07 3e46830c359f
  3. 虚拟局域网 虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息,例如下图中(A1,A2,A3,A4)属于一个虚拟局域网,A1发送的广播会被A2,A3,A4收到,而其他站点收不到。 a74b70ac 323a 4b31 b4d5 90569b8a944b

MAC层 *

MAC地址是6字节(48位)的地址,用于唯一标识网络适配器(网卡),一台主机拥有多少个适配器就有多少个MAC地址,例如笔记本电脑普遍存在无线网络适配器和有线网络适配器。

50d38e84 238f 4081 8876 14ef6d7938b5

  • 类型:标记上层使用的协议。
  • 数据:长度在46~1500之间,如果太小则需要填充。
  • FCS:帧检验序列,使用的是CRC检验方法。
  • 前同步码:只是为了计算FCS临时加入的,计算之后会丢弃。

网络层 *

网际协议IP概述

  • 因为网络层是整个互联网的核心,因此应当让网络层尽可能的简单。网络层向上只提供简单灵活、无连接、尽最大努力交互的数据报服务。
  • 使用IP协议,可以把异构的物理网络连接起来,使得网络层看起来好像是一个统一的网络。 fe3d224c 8ffd 40f9 85b1 86ffe1393f6c
  • 与IP协议配套使用的还有三个协议:

    1. 地址解析协议ARP
    2. 网际控制报文协议ICMP
    3. 网际组管理协议IGMP 163cf8b4 5f30 46c9 af00 316a71b3c890

IP数据报格式

8681db55 0873 434b aa98 83d07e8392ae

  • 版本:有4(IPV4)和6(IPV6)两个值。
  • 首部长度:占4位,因此最大值为15,值为1表示的是1个32位字的长度,也就是4字节。因为首部固定长度为20字节,因此该值最小为5,如果可选部分的长度不是4字节的整数倍,就用尾部的填充部分来填充。
  • 区分服务:用来获得更好的服务,一般情况下不使用。
  • 总长度:包括首部长度和数据部分长度。
  • 标识:在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
  • 片偏移:和标识符一起,用于发生分片的情况下。片偏移的单位为8字节。
  • 生存时间:TTL,它的存在是为了防止无法交付的数据报在互联网中不断的兜圈子。以路由器跳数为单位,当TTL为0时就丢弃数据报。
  • 协议:指出携带的数据应该上交给哪个协议进行处理,例如ICMP、TCP、UDP等。
  • 首部校验和:因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。

IP地址编址

IP地址编制方式经历了三个历史阶段:

  • 分类;

  • 子网划分;

  • 无分类;

  • 分类

    • 由两部分组成,网络号和主机号,其中不同类别具有不同的网络号长度,并且是固定的。
    • IP地址::={<网络号>,<主机号>} 2ddd6132 60be 4a72 9daa 3d9756191f4a
  • 子网划分

    • 通过在主机号字段中拿一部分作为子网号,把两级IP地址划分为三级IP地址。注意,外部网络看不到子网的存在。
    • IP地址::={<网络号>,<子网号>,<主机号>}
    • 要使用子网,必须配置子网掩码。一个B类地址的默认子网掩码为255.255.0.0,如果B类地址的子网占两个比特,那么子网掩码为11111111 11111111 11000000 00000000,也就是255.255.192.0。
  • 无分类

    • 无分类编址CIDR消除了传统A类、B类和C类地址以及划分子网的概念,使用网络前缀和主机号来对IP地址进行编码,网络前缀的长度可以根据需要变化。
    • IP地址::={<网络前缀号>,<主机号>}
    • CIDR的记法上采用在IP地址后面加上网络前缀长度的方法。例如128.14.35.7/20表示前20位网络前缀。
    • CIDR的地址掩码可以继续称为子网掩码,子网掩码首1长度为前缀的长度。
    • 一个CIDR地址块中有很多地址,一个CIDR表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也成为构成超网。
    • 在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不只一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

IP地址和MAC地址

网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的源地址和目的地址始终不变,而MAC地址随链路的改变而改变。

86b71296 0d1e 4a63 bcd9 54955b6b781b

地址解析协议ARP

  • 实现由IP地址得到的MAC地址。 1b4d6737 d834 46ed 8f9d 6f123e29c8dd
  • 每个主机都有一个ARP高速缓存,里面有本局域网上各主机和路由器的IP地址到硬件地址的映射表。
  • 如果主机A知道主机B的IP地址,但是ARP的高速缓存中没有该IP地址到MAC地址的映射,此时主机A通过广播的方式发送ARP请求分组,主机B收到该请求后会发送ARP响应分组给主机A告知其MAC地址,随后主机A向其高速缓存中写入主机B的IP地址到硬件地址的映射。 8bc6fc2c d198 4759 b06c 18d94d851e97

路由器的结构

  • 路由器从功能上可以划分为两大部分:路由选择和分组转发。
  • 分组转发由三部分组成:交换结构、一组输入端口和一组输出端口。 3a676c54 b559 4466 9b21 eb10f1e25879
  • 交换结构的交换网络有以下三种实现方式: 7f82fd18 7f16 4125 ada6 bb6b795b4fda

路由器分组转发流程

  1. 从数据报的首部提取目的主机的IP地址D,得到目的网络地址N。(路由表项是网络号而不是IP地址,这样做大大减少了路由表条目数量);
  2. 若N就是与此路由器直接相连的某个网络地址,则直接进行交付;
  3. 若路由表中有目的地址为D的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  4. 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  5. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  6. 报告分组转发出错。

8d211911 0e62 4190 ab00 d8610adec4a0

路由选择协议

  • 互联网使用的路由选择协议都是自适应的,能随着网络通信量和拓补结构的变化而自适应的进行调整。

  • 互联网可以划分为许多较小的自治系统AS,一个AS可以使用一种和别的AS不同的路由选择协议。

  • 可以把路由选择协议划分为两大类:

  • 内部网关协议IGP:在AS内部使用,如RIP和OSPF;

  • 外部网关协议EGP:在AS之间使用,如BGP。 e0be6970 5b0e 44a2 bc71 df4d61c42b8f

  • 内部网关协议RIP

    • RIP是一种分布式的基础距离向量的路由选择协议。距离是指跳数,直接相连的路由器的跳数为1,跳数最多为15,超过15表示不可达。
    • RIP按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有的路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳的路由器地址。
    • 距离向量算法:

      1. 对地址为X的相邻路由器发来的RIP报文,先修改报文中的所有项目,把下一跳字段的地址改为X,并把所有的距离字段加1;
      2. 对修改后的RIP报文中的每一个项目,进行一下步骤:
      • 若原来的路由表中没有目的网络N,则把该项目添加到路由表中;
      • 否则,若下一跳路由器的地址是X,则把收到的项目替换原来路由表中的项目;否则,若收到的项目中的距离d小于路由表中的距离,则进行更新(例如原始路由表项为Net2,5,P,新表项为Net2,4,X,则更新)否则什么也不做。

        1. 若3份中还没有收到相邻路由器的更新路由表,则把该相邻路由器标记为不可达,即把距离置为16。
    • RIP协议实现简单,开销小,但是RIP能使用的最大距离为15,限制了网络的规模,并且当网络出现故障时,要经过比较长的时间才能将消息传送到所有路由器。
  • 内部网关协议OSPF

    • 开放最短路径优先OSPF,是为了克服RIP的缺点而开发出来的。
    • 开放表示OSPF不受某一家厂商控制,而是公开发表的;最短路径优先表示使用了Dijkstra提出的最短路径算法SPF。
    • OSPF具有以下特点:

      • 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。
      • 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
      • 只有当链路状态发生变化时,路由器才会发送信息。
    • 所有路由器都具有全网的拓补结构图,并且是一致的,相比于RIP,OSPF的更新过程收敛的很快。
  • 外部网关协议BGP

    • AS之间的路由选择很困难,主要是互联网规模很大。并且各个AS内部使用不同的路由选择协议,就无法准确定义路径的度量。并且AS之间的路由选择必须考虑有关的策略,比如有些AS不愿意让其他AS经过。
    • BGP只能寻找一条比较好的路由,而不是最佳路由。它采用路径向量路由选择协议。
    • 每个AS都必须配置BGP发言人,通过在两个相邻BGP发言人之间建立TCP连接来交换路由信息。 eb6271de 22c9 4f4b 8b31 eab1f560efac

网际控制报文协议ICMP

ICMP是为了更有效地转发IP数据报和提高交付成功的机会。它封装在IP数据报中,但是不属于高层协议。

9b5e0fa0 9274 4219 a3a9 84fbb509c735

ICMP报文分为差错报告报文和询文报文。

aa29cc88 7256 4399 8c7f 3cf4a6489559

分组网间探测PING

  • PING是ICMP的一个重要应用,主要用来测试两台主机之间的连通性。
  • PING发送的IP数据报封装的是无法交付的UDP用户数据报。
  • PING的过程:

    1. 源主机向目的主机发送一连串的IP数据报。第一个数据报P1的生存时间TTL设置为1,但P1到达路径上的第一个路由器R1时,R1收下它并把TTL减1,此时TTL等于0,R1就把P1丢弃,并向源主机发送一个ICMP时间超过差错报告报文;
    2. 源主机接着发送第二个数据报P2,并把TTL设置为2。P2先到达R1,R1收下后把TTL减1再转发给R2,R2收下后也把TTL减1,由于此时TTL为0,R2就丢弃P2,并向源主机发送一个ICMP时间超过差错报告报文;
    3. 不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把TTL减1。但是因为数据报封装的是无法交付的UDP,因此目的主机要向源主机发送ICMP终点不可达差错报告报文。
    4. 之后源主机知道了到达目的主机所经过的路由器IP地址以及到达每个路由器的往返时间。

IP多播

在一对多的通信中,多播不需要将分组复制多份,从而大大节约网络资源。

f50a8e52 a683 444c 8e32 63c1890fe84a

虚拟专用网VPN

  • 由于IP地址的短缺,一个机构能申请到的IP地址远远小于本机构所拥有的主机数。并且一个机构并不需要把所有主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的IP地址(专用地址)。
  • 有三个专用地址块:
  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255
  • VPN使用的公用互联网作为本机构各专用网之间的通信媒体。专用指机构内的主机只与本机构的其他主机通信,虚拟指“好像是”,而实际上并不是,它有经过公用的互联网。
  • 下图中,场所A和B的通信部都经过互联网,如果场所A的主机要和另一个场所B的主机Y通信,IP数据报的源地址是10.1.0.1,目的地址是10.2.0.3。数据报先发送到与互联网相连的路由器R1,R1对内部数据进行加密,然后重新加上数据报的首部,源地址是路由器R1的全球地址125.1.2.3,目的地址是路由器R2的全球地址194.4.5.6。路由器R2收到数据报后将数据部分进行解密,恢复原来的数据报,此时目的地址为10.2.0.3,就交付给Y。

1556770b 8c01 4681 af10 46f1df69202c

网络地址转换NAT

  • 专用网内部的主机使用本地IP地址又想和互联网上的主机通信时,可以使用NAT来将本地IP转换为全球IP。
  • 在以前,NAT将本地IP和全球IP一一对应,这种方式拥有n个全球IP地址的专用网内最多只可以同时拥有n台主机接入互联网。为了更有效利用全球IP地址,现在常用的NAT转换表把运输层的端口号也用上了,使得多个专用网内部的主机公用一个全球IP地址。使用端口号的NAT也叫作网络地址与端口转换NAPT。

2719067e b299 4639 9065 bed6729dbf0b

运输层*

网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。运输层提供了进程间的逻辑通信,运输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看见的好像在两个运输层实体之间有一条端到端的逻辑通信信道。

UDP和TCP的特点

  • 用户数据报协议UDP是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加UDP首部)。
  • 传输控制协议TCP是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下的报文看成字节流,把字节流组织成大小不等的数据块)。

UDP首部格式

d4c3a4a1 0846 46ec 9cc3 eaddfca71254

首部字段只有8个字节,包括源端口、目的端口、长度、检验和。12字节的伪首部是为了计算校验和临时添加的。

TCP首部格式

55dc4e84 573d 4c13 a765 52ed1dd251f9

  • 序号:用于对字节流进行编号,例如序号为301,表示第一个字节的编号为301,如果携带的数据长度为100个字节,那么下一个报文段的序号应为401。
  • 确认号:期望收到的下一个报文段的序号。例如B正确收到A发送来的一个报文段,序号为501,携带的数据长度为200字节,因此B期望下一个报文段的序号为701,B发送给A的确认报文段确认号就为701。
  • 数据偏移:指的是数据部分距离报文段起始处的偏移量,实际上指的是首部长度。
  • 确认ACK:当ACK=1时确认号字段有效,否则无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
  • 同步SYN:在连接建立时用来同步序号。当SYN=1,ACK=0时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中SYN=1,ACK=1。
  • 终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。
  • 窗口:窗口值作为接收方让发送方设置其发送窗口的依据。之所以有这个限制,是因为接收方的数据缓存空间是有限的。

TCP的三次握手

e92d0ebc 7d46 413b aec1 34a39602f787

假设A为客户端,B为服务器端。

  1. 首先B处于LISTEN(监听)状态,等待客户的连接请求。
  2. A向B发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号x。
  3. B收到连接请求报文段,如果同意建立连接,则向A发送连接确认报文段,SYN=1,ACK=1,确认号为x+1,同时也选择一个初始的序号y。
  4. A收到B的连接确认报文段后,还要向B发出确认,确认号为y+1,序号为x+1,进入TIME-WAIT状态。
  5. B收到A的确认后,连接建立。

TCP的四次挥手

f87afe72 c2df 4c12 ac03 9b8d581a8af8

以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论ACK,因为ACK在连接建立之后都为1。

  1. A发送连接释放报文段,FIN=1;
  2. B收到之后发出确认,此时TCP属于半关闭状态,B能向A发送数据但是A不能向B发送数据。
  3. 当B要不再需要连接时,发送连接释放请求报文段,FIN=1;
  4. A收到后发出确认,此时连接释放。

TIME_WAIT 客户端接收到服务器端的FIN报文后进入此状态,此时并不是直接进入CLOSED状态,还需要等待一个时间计时器设置的时间2MSL。这么做有2个理由:

  1. 确保最后一个确认报文能够到达。如果B没有收到A发送来的确认报文段,那么就会重新发送连接释放请求报文段,A等待一段时间就是为了处理这种情况。
  2. 等待一段时间是为了让本连接持续时间内所产生的所有报文段都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文段。

TCP滑动窗口

a3253deb 8d21 40a1 aae4 7d178e4aa319

  • 窗口是缓存一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其他信息设置自己窗口大小。
  • 发送窗口内的字节都允许被发送,接收窗口内的字节都允许接收。如果发送窗口左部的字节已经发送并且受到了确认,那么就将发送窗口向右滑动一定的距离,直到左部第一个字节不是已发送并且已经确认的状态;接收窗口类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。
  • 接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为{31,32,34,35},其中{31,32}按序到达,而{34,35}就不是,因此只对字节32进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

TCP可靠传输

  • TCP使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。
  • 一个报文段从发送到接收再到确认所经过的时间称为往返时间RTT,加权平均往返时间RTTs计算如下: RTTs=(1a)(RTTs)+aRTTRTT_s=(1-a)\ast(RTT_s)+a\ast RTT
  • 超过时间RTO应该略大于RTTs,TCP使用的超过时间计算如下: RTO=RTTs+4RTTdRTO=RTT_s+4\ast RTT_d \mid {其中 RTTdRTT_d 为偏差}

TCP流量控制

  • 流量控制是为了控制发送方发送速率,保证接收方来的及接收。
  • 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送速率。

TCP拥塞控制

如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了接收方来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。

51e2ed95 65b8 4ae9 8af3 65602d452a25

TCP主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。发送方需要维护有一个叫做拥塞(cwnd)的状态变量。注意拥塞窗口与发送方窗口的区别,拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。 为了便于讨论,做如下假设:

  1. 接收方有足够大的接受缓存,因此不会发生流量控制;
  2. 虽然TCP的窗口基于字节,但是这里设窗口的大小单位为报文段。

910f613f 514f 4534 87dd 9b4699d59d31

  1. 慢开始与拥塞避免

    • 发送的最初执行慢开始,令cwnd=1,发送方只能发送1个报文段;当收到确认后,将cwnd加倍,因此发送方能够发送的报文段数量为:2、4、8…
    • 注意到慢开始每个轮次都会将cwnd加倍,这样会让cwnd增长速度非常快,从而使得发送方发送的增长速度过快,网络拥塞的可能也就更高。设置一个慢开始门限ssthresh,当cwnd>=ssthresh时,进入拥塞避免,每个轮次只将cwnd加1。
    • 如果出现了超时,则令ssthresh=cwnd/2,然后重新执行慢开始。
  2. 快重传与快恢复

    • 在接受方,要求每次接收到报文段都应该发送对已接收到有序报文段的确认,例如已经接收到M1M_1M2M_2,此时收到M4M_4,应当发送对M2M_2的确认。
    • 在发送方,如果收到三个重复确认,那么可以确认下一个报文段丢失,例如收到三个M2M_2,则M3M_3丢失。此时执行快重传,立即重传下一个报文段。
    • 在这种情况下,只是丢失个别报文段,而不是网络堵塞,因此执行快恢复,令ssthresh=cwnd/2,cwnd=ssthresh,注意到此时直接进入拥塞避免。

f61b5419 c94a 4df1 8d4d aed9ae8cc6d5

应用层*

域名系统DNS

  • 把主机名解析为IP地址。
  • 被设计成分布式系统。

  • 层次结构

    一个域名有多个层次构成,从上层从下层分别为顶级域名、二级域名、三级域名以及四级域名。所有域名都可以画成域名树。

    c2117f61 1177 4768 bf33 cf4f950d911c

    a4b162e5 db2a 4a27 b213 1fe481c5a06a

    • 域名服务器可以分成以下四类:

      1. 根域名服务器:解析顶级域名;
      2. 顶级域名服务器:解析二级域名;
      3. 权限域名服务器:解析区内域名;
      4. 本地域名服务器:也称为默认域名服务器。可以在其中配置高速缓存。
    • 区和域的概念不同,可以在一个域中划分多个区。图b在域abc.com中划分了两个区:abc.com和y.abc.com fc0c6b2d 68c7 4de8 aaaa 97355a4f0472
    • 因此就需要两个权限域名服务器: 8b335d94 c1ca 42e1 ad48 bb179d28a4f1
  • 解析过程

    • 主机向本地域名服务器解析的过程采用递归,而本地域名服务器向其他域名服务器解析可以使用递归和迭代两种方式。
    • 迭代的方式下,本地域名服务器向一个域名服务器解析请求解析之后,结果返回到本地域名服务器,然后本地域名服务器继续向其他域名服务器请求解析;而递归方式下,结果不是直接返回的,然后继续向前请求解析,最后的结果才会返回。 e6723b94 1a33 4605 b775 f6813352d383

文件传输协议FTP

FTP在运输层使用TCP,并且需要建立两个并行的TCP连接:控制连接和数据连接。控制连接在整个会话期间一直保持打开,而数据连接在数据传送完毕之后就关闭。控制连接使用端口号为21,数据连接使用端口号为20。

30210b86 472d 4574 abb6 b74898cc17a4

远程终端协议TELNET

  • TELNET用于登录到远程主机上,并且远程主机上的输出也会返回。
  • TELNET可以适应许多计算机和操作系统的差异,例如不同操作系统的换行符的定义。

万维网

HTTP

电子邮件协议

一个电子邮件系统由3部分组成:用户代理、邮件服务器以及邮件发送协议和读取协议。其中发送协议常用SMTP,读取常用POP3和IMAP。

7b3efa99 d306 4982 8cfb e7153c33aab4

  1. POP3 POP3的特点是只要从服务器上读取了邮件,就把该邮件删除。
  2. IMAP IMAP协议中客户端和服务器上的邮件保持同步,如果不去手动删除邮件,那么服务器上的邮件也不会被删除。IMAP这种做法可以让用户随时随地去访问服务器上的邮件。IMAP协议也支持创建自定义的文件夹。
  3. SMTP SMTP只能发送ASCII码,而互联网邮件扩充MIME可以发送二进制文件。MIME并没有改动或者取代SMTP,而是增加邮件主题的结构,定义了非ASCIII码的编码规则。

ed5522bb 3a60 481c 8654 43e7195a48fe

动态主机配置协议DHCP

  • DHCP提供了即插即用的联网方式,用户不再需要去手动配置IP地址等信息。
  • DHCP配置的内容不仅是IP地址,还包括子网掩码、默认路由器IP地址、域名服务器的IP地址。
  • 工作方式如下:需要IP地址的主机广播发送DHCP发现报文(将目的主机置为全1,即255.255.255.255:67,源地址设置为全0,即0.0.0.0:68,DHCP服务器收到发现报文之后,则在IP地址池中取一个地址,发送DHCP提供报文给该主机。

点对点传输P2P

  • 把某个文件分发的所有对等集合称为一个洪流。文件的数据单元称为文件块,它的大小是固定的。一个新的对等方加入某个洪流,一开始并没有文件块,但是能够从其它对等方中逐渐地下载到一些文件块,与此同时,它也为别的对等方上传一些文件块。
  • 每个洪流都有一个基础设施,称为追踪器。当一个对等方加入洪流时,必须向追踪器登记,并周期性的通知追踪器它仍在洪流中。可以在任何时间加入和退出某个洪流。
  • 一个新的对等方加入洪流时,追踪器会随机从洪流中选择若干个对等方,并让新对等方与这些对等方建立连接,把这些对等方称为相邻对等方。接收和发送文件块都是在相邻对等方中进行的。
  • 当一个对等方需要很多文件块时,通常使用最稀有优先策略来取得文件块,也就是一个文件块在相邻对等方中副本最少,那么就优先请求这个文件块。
  • 当很多对等方向同一个对等方请求文件块时,该对等方优先选择最高速率向其发送文件块的对等方。
  • P2P是一个分布式系统,任何时候都有对等方加入或者退出。使用分布式散列表DHT,可以查找洪流中的资源和IP地址映射。

Web页面请求过程

  1. DHCP配置主机信息

    1. 假设主机最开始没有IP地址以及其他信息,那么就需要先使用DHCP来获取。
    2. 主机生成一个DHCP请求报文,并将这个报文放入具有目的端口67和源端口68的UDP报文中。
    3. 该报文段则被放入一个具有广播IP目的地址(255.255.255.255)和源IP地址(0.0.0.0)的IP数据报中。
    4. 该数据报则被放置在MAC帧中,该帧具有目的地址FF:FF:FF:FF:FF:FF,将广播到与交换机相连的所有设备。
    5. 连接在交换机的DHCP服务器收到广播帧之后,不断向上分解得到IP数据报、UDP报文段、DHCP请求报文,之后生成DHCP ACK报文,该报文包含以下信息:IP地址、DNS服务器的地址、默认网关路由器的IP地址和子网掩码。该报文被放入UDP报文段中,UDP报文段被放入IP数据报中,最后放入MAC帧中。
    6. 该帧的目的地址是请求主机的MAC地址,因为交换机具有自学习能力,之前主机发送了广播帧之后就记录了MAC地址到其转发的交换表项,因此现在交换机就可以直接知道应该向哪个接口发送该帧。
    7. 主机收到该帧后,不断分解得到DHCP报文。之后就配置它的IP地址、子网掩码和DNS服务器的IP地址,并在其IP转发表中安装默认网关。
  2. ARP解析MAC地址

    1. 主机通过浏览器生成一个TCP套接字,套接字向HTTP服务器发送HTPP请求。为了生成该套接字,主机需要知道网站的域名对应的IP地址。
    2. 主机生成一个DNS查询报文,该报文具有53端口,因为DNS服务器的端口号为53。
    3. 该DNS查询报文被放入目的地址为DNS服务器IP地址的IP数据报中。
    4. 该IP数据报被放入一个以太网帧中,该帧将发送到网关路由器。
    5. DHCP过程只知道网关路由器的IP地址,为了获取网关路由器的MAC地址,需要使用ARP协议。
    6. 主机生成一个包含目的地址为网关路由器IP地址的ARP查询报文,并将该ARP查询报文放入一个具有广播目的地址(FF:FF:FF:FF:FF:FF)的以太网帧中,并向交换机发送该以太网帧,交换机将该帧转发给所有的连接设备,包括网关路由器。
    7. 网关路由器接收到该帧后,不断向上分解得到ARP报文,发现其中的IP地址与其接口的IP地址匹配,因此就发送一个ARP回答报文,包含了它的MAC地址,发回给主机。
  3. DNS解析域名

    1. 知道了网关路由器的MAC地址之后,就可以继续DNS解析过程了。
    2. 网关路由器接收到包含DNS查询报文的以太网帧后,抽出IP数据报,并根据转发表决定IP数据报应该转发的路由器。
    3. 因为路由器具有内部网关协议(RIP、OSPF)和外部网关协议(BGP)这两种路由选择协议,因此路由表中已经配置网关路由器到达DNS服务器的路由表项。
    4. 到达DNS服务器之后,DNS服务器抽取出DNS查询报文,并在DNS数据库中查找待解析的域名。
    5. 找到DNS记录之后,发送DNS回答报文,将该回答报文放入UDP报文段中,然后放入IP数据报中,通过路由器反向转发回网关路由器,并经过以太网交换机到达主机。
    6. HTTP请求页面
    7. 有了HTTP服务器的IP地址之后,主机就能够生成TCP套接字,该套接字将用于向Web服务器发送HTTP GET报文。
    8. 在生成TCP套接字之前,必须先与HTTP服务器进行三次握手来建立连接。生成一个具有目的端口80的TCP SYN报文段,并向HTTP服务器发送该报文段。
    9. HTTP服务器收到该报文段之后,生成TCP SYNACK报文段,发回给主机。
    10. 连接建立之后,浏览器生成HTTP GET报文,并交付给HTPP服务器。
    11. HTTP服务器从TCP套接字读取HTTP GET报文,生成一个HTTP响应报文,将Web页面内容放入报文主体中,发回给主机。
    12. 浏览器收到HTTP响应报文后,抽取出Web页面内容,之后会进行渲染,显示Web页面。

常用端口

应用层协议 端口号 运输层协议
DNS 53 UDP
FTP 控制连接 21,数据连接 20 TCP
TELNET 23 TCP
DHCP 67 68 UDP
HTTP 80 TCP
SMTP 25 TCP
POP3 110 TCP
IMAP 143 TCP

评论

阅读下一篇

查找算法java实现
2018-03-20 13:58:04
0%