tomoya06 / web-developer-guidance

Actually it's just a notebook for keeping down some working experience.
4 stars 0 forks source link

Network #6

Open tomoya06 opened 4 years ago

tomoya06 commented 4 years ago

计算机网络概述

什么是互联网

网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。

如何接入互联网

ISP(Internet service provider, 网络服务提供商) 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。

IXP (Internet exchange point, 互联网交换点) 允许两个 ISP 直接相连而不用经过第三个 ISP。

目前的互联网是一种多层次 ISP 结构,ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。

72be01cd-41ae-45f7-99b9-a8d284e44dd4 3be42601-9d33-4d29-8358-a9d16453af93

互联网的组成

  1. 边缘部分:由所有连接在互联网上的主机组成,这部分是用户直接使用的,用来进行通信和资源共享
  2. 核心部分:由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的

image

边缘的端系统之间的通信方式:

  1. 客户-服务器方式(Client-Server aka. C/S):客户是服务的请求方,服务器是服务的提供方。
  2. 对等连接方式(Peer-to-Peer aka. P2P):不区分客户和服务器。

数据交换方式:

  1. 电路交换:电路交换用于电话通信系统,两个用户要通信之前需要建立一条专用的物理链路,并且在整个通信过程中始终占用该链路。由于通信的过程中不可能一直在使用传输线路,因此电路交换对线路的利用率很低,往往不到 10%。
  2. 分组交换:每个分组都有首部和尾部,包含了源地址和目的地址等控制信息,在同一个传输线路上同时传输多个分组互相不会影响,不需要占用传输线路。

下图,起点A经过B-C传送数据到终点D,三种数据交换方式的比较如下:

image

网络性能指标

image

计算机网络体系结构

164e5307471e8eba

层次化的好处,1是方便替换其中某个部分,2是每层的应用可以只考虑分配给自己的任务。

数据流动

image

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装。

FYI:路由器只有下面三层协议(物理层-数据链路层-网络层),因为路由器位于网络核心中,不需要为进程或者应用程序提供服务,因此也就不需要传输层和应用层。

各层概述

应用层

* 表示层:数据压缩、加密以及数据描述,使得应用程序不必关心在各台主机中数据内部格式不同的问题

* 会话层:建立及管理会话

五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。

传输层

网络层

数据链路层

物理层

总结图示

image

tomoya06 commented 4 years ago

物理层

数据通信系统的模型

数据传输经过以下流程:源点aka源站/信源 - 发送器 - 传输系统 - 接收器 - 终点aka目的站/信宿

image

信号是数据的电气或电磁的表现。分为:模拟信号aka连续信号;数字信号aka离散信号

信道

信道一般表示想某一个方向传送信息的媒体。一条通信电路往往包含一条发送信道和一条接收信道

从通信双方信息交互的方式来看,可以有以下三种通信类型:

  1. 单向通信 aka. 单工通信:只能有一方发
  2. 双向交替通信 aka. 半双工通信:双方都可以发,但不能同时发
  3. 双向同时通信 aka. 全双工通信:双方可以同时发同时收

信道复用技术

  1. 频分复用:频分复用的所有主机在相同的时间占用不同的频率带宽资源。
  2. 时分复用:时分复用的所有主机在不同的时间占用相同的频率带宽资源。

    使用这两种技术进行通信,在通信的过程中主机会一直占用一部分信道资源。信道利用率不高。

  3. 统计时分复用:是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。
  4. 波分复用:光的频分复用。由于光的频率很高,因此习惯上用波长而不是频率来表示所使用的光载波。
  5. 码分复用:aka码分多址(Code Division Multiple Access, CDMA) 在相同时间用相同频率、分别使用不同编码做调制解调。码分复用需要发送的数据量为原先的 m 倍。

信号

来自信源的信号称为基带信号。

调制:基带信号中的低频或直流成分不能被信道传输,因此需要对基带信号进行调制。分为:

  1. 基带调制:仅仅对基带信号的波形进行变换,变换前后都是数字信号,aka编码
  2. 带通调制:用载波进行调制,把数字信号转换为模拟信号
tomoya06 commented 4 years ago

链路层

链路层使用的信道主要有两种类型:

  1. 点对点信道:使用一对一的点对点通信方式。所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(aka碰撞)。
    • 协调方式:使用信道复用技术;使用CSMA/CD协议
  2. 广播信道:使用一对多的广播通信方式。不会发生碰撞
    • 协议:PPP协议

内容:

  1. 链路层点对点信道和广播信道的特点,以及所使用的协议(PPP协议以及CSMA/CD协议)的特点
  2. 链路层的三个基本问题:封装成帧、透明传输、差错检测
  3. 以太网MAC层的硬件地址

image

链路层的三个基本问题

封装成帧

就是在数据前后分别添加首部和尾部,这样就构成了一个帧。

image

透明传输

透明表示一个实际存在的事物看起来好像不存在一样。”在数据链路层透明传送数据“表示无论什么样的比特组合的数据,都能够按照原样没有差错地通过这个数据链路层。

帧使用首部和尾部进行定界,如果帧的数据部分含有和首部尾部相同的内容,那么帧的开始和结束位置就会被错误的判定。

  1. 需要在数据部分出现首部(SOH, Start of Header)尾部(EOT, End of Transmission)相同的内容前面插入转义字符ESC(十六进制编码1B,二进制编码00011011)。
  2. 如果数据部分出现转义字符,那么就在转义字符前面再加个转义字符。

image

差错检测

奇偶校验

奇偶校验位(英語:parity bit)或校验比特(英語:check bit)是一个表示给定位数的二进制数中1的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检测码。

奇偶校验位有两种类型:偶校验位与奇校验位。

以偶校验位來說,如果一组给定数据位中1的个数是奇数,補一個bit为1,使得总的1的个数是偶数。例:0000001, 補一個bit为1, 00000011。

以奇校验位來說,如果给定一组数据位中1的个数是奇数,補一個bit为0,使得总的1的个数是奇数。例:0000001, 補一個bit为0, 00000010。

偶校验实际上是循环冗余校验的一个特例,通过多项式 x + 1 得到1位CRC。

点对点信道

PPP

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

帧格式

image

广播信道

局域网

典型的广播信道。主要特点:网络为一个单位所拥有,且地理范围和站点数目均有限。

按网络拓扑分类:星形网、环形网、总线网

image

以太网

以太网(Ethernet)是一种计算机局域网技术,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术。

概述:以太网实现了网络上无线电系统多个节点发送信息的想法,每个节点必须获取电缆或者信道才能传送信息,有时也叫作以太(Ether)。 每一个节点有全球唯一的48位MAC地址,以保证以太网上所有节点能互相鉴别。

标准拓扑结构为总线型拓扑,目前的快速以太网使用交换机来进行网络连接和组织,因而拓扑结构变成星形,但在逻辑上仍然使用总线型拓扑和CSMA/CD协议。

以上资讯参考维基百科

MAC地址

MAC 地址是链路层地址,长度为 6 字节(48 位),用于唯一标识网络适配器(网卡)。

一台主机拥有多少个网络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个 MAC 地址。

交换机

网络交换机 aka. 交换机(Network switch)是一种网络硬件,是一种多端口的网桥,在数据链路层使用MAC地址转发数据。

交换机可以自主形成一份MAC地址转发表。形成过程:

  1. 发出消息的设备A,交换机会直接记下其MAC地址和对应交换机的端口(aka. 学习)
  2. A发消息给B,若B未被记录,则交换机会往A之外的所有端口转发该消息(aka. 泛洪);B会回复确认包,类似步骤1,B的MAC地址也会被记下
  3. 记录也会包含最后一次访问的时间,超时记录会被清除(aka. 老化)

虚拟局域网

虚拟局域网可以建立与物理位置无关的逻辑组,只有在同一个虚拟局域网中的成员才会收到链路层广播信息。

使用 VLAN 干线连接来建立虚拟局域网,每台交换机上的一个特殊接口被设置为干线接口,以互连 VLAN 交换机。在标准以太网帧上加进了 4 字节首部 VLAN 标签,用于表示该帧属于哪一个虚拟局域网。

CSMA/CD协议

全称:载波监听多点接入/碰撞检测(Carrier Sense Multiple Access with Collision Detection)。协议要点如下:

  1. 多点接入:说明是总线型网络。许多主机以多点接入的方式连接到总线上。
  2. 载波监听:每个主机都必须不停地检测信道。发送前如果检测到信道正在使用,就必须等待。
  3. 碰撞检测:在发送中,如果监听到信道已有其它主机正在发送数据,就表示发生了碰撞,要立即停止发送。

在使用该协议时不可能同时进行发送和接收,但必须边发送边监听信道,因此使用CSMA/CD协议的网络只能进行半双工通信。

image

记端到端的传播时延为 τ,最先发送的站点最多经过 2τ 就可以知道是否发生了碰撞,称 2τ 为 争用期 。只有经过争用期之后还没有检测到碰撞,才能肯定这次发送不会发生碰撞。

当发生碰撞时,站点要停止发送,等待一段时间再发送。这个时间采用 截断二进制指数退避算法 来确定。从离散的整数集合 {0, 1, .., (2^k-1)} 中随机取出一个数,记作 r,然后取 r 倍的争用期作为重传等待时间。

tomoya06 commented 4 years ago

网络层

网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。

IP协议配套的三个协议:

  1. 地址解析协议ARP (Address Resolution Protocol)
  2. 网际控制报文协议ICMP (Internet Control Message Protocol)
  3. 网际组管理协议IGMP (Internet Group Management Protocol)

image

将网络互联起来需要使用一些中间设备,按所在层次分类:

  1. 物理层:转发器
  2. 数据链路层:网桥aka桥接器
  3. 网络层:路由器
  4. 网络层以上:网关

IP地址

IP地址的编址方式经过了三个历史阶段:分类地址、子网划分、无分类/超网

分类

将IP地址划分为若干固定类,每一类由网络号和主机号两部分组成,也就是两级IP地址。

网络号在整个护粮网范围内必须是唯一的、主机号在网络号指明的网络范围内必须是唯一的,因此一个IP地址在整个互联网范围内是唯一的。

image

image

image

不同分类的网络号长度不一样。A类、B类、C类地址的网络号分别1、2、3个字节长,且网络号字段最前面分别有1、2、3位的类别位,分别为0、10、110。D类、E类如图。

路由器的路由表每项内容:目标网络、下一跳地址

image

划分子网

分类地址aka两级地址的缺点:空间利用率地、路由表大、不够灵活

通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。

image

由于32位IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息,因此使用子网还必须要使用子网掩码。

image

路由表每项内容:目的网络地址、子网掩码、下一跳地址。

无分类编址

全称无分类域间路由选择CIDR (Classless Inter-Domain Routing)。主要特点:

  1. 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,
  2. 把网络前缀都相同的连续IP地址组成一个CIDR地址块

image

CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀,则:

image

CIDR 使用32位的地址掩码,同样aka子网掩码,由一串1+一串0组成,1 的个数为网络前缀的长度;斜线记法中斜线后面的数据就是地址掩码中1的个数。

一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网 。

路由表每项内容:网络前缀、下一条地址

最长前缀匹配:查找路由表时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

IP地址 BIN
206.0.68.0/22 11001110000000000100010000000000
206.0.71.128/25 11001110000000000100011110000000
206.0.71.130 - 目的IP地址 11001110000000000100011110000010

IP数据报格式

image

各字段介绍详见这里

地址解析协议 ARP

IP地址 vs MAC地址:IP地址是一种逻辑地址,是软件实现的;MAC地址aka物理地址

协议作用:已经知道一个机器的IP地址,需要找到其相应的硬件地址。

每一台主机都有一个ARP高速缓存(ARP Cache),里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。

同一局域网内,如果主机A想要知道主机B的MAC地址MAC:此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。

image

跨局域网,则需要由局域网的路由器帮忙转发。

image

为什么不直接用硬件地址通信?不同的网络使用不同的硬件地址,要使这些异构网络能够互相通信就必须进行非常负责的硬件地址转换工作,几乎不可能完成。

网际控制报文协议ICMP

ICMP 是为了更有效地转发 IP 数据报、提高交付成功的机会。ICMP允许主机或路由器报告差错情况、提供有关异常情况的报告。

但,ICMP不是高层协议,ICMP报文装在IP数据报中,作为其中的数据部分。

image

ICMP 报文分为差错报告报文和询问报文。具体类型值和类型含义参考这里

应用实例

应用1:PING

全称:分组网间探测 (Packet InterNet Groper),测试两台主机之间的连通性。使用ICMP回送请求与回送回答报文,应用层直接使用网络层ICMP,没有通过传输层的TCP或UDP。

应用2:traceroute

用来跟踪一个分组从源点到终点的路径。 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报。操作过程:

  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 地址以及到达每个路由器的往返时间。

路由选择协议

路由选择协议的核心是路由算法,即需要何种算法来获得路由表中的各项目。理想的路由算法的关键特点:能适应通信量和网络拓扑的变化 aka. 自适应性

互联网采用分层次的路由选择协议。可以把整个互联网划分成许多较小的自治系统(autonomous system, AS)。自治系统是在单一技术管理下的一组路由器。一个大的ISP就是一个自治系统。这样,路由选择协议就分为两大类:

  1. 内部网关协议:即一个自治系统内部使用的协议,有RIP、OSPF
  2. 外部网关协议:即不同的自治系统之间的新协议,有BGP

RIP 路由信息协议 (Routing INfomation Protocol)

RIP是一种分布式的基于距离向量的路由选择协议。

距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,超过 15 表示不可达。

工作过程

每台路由器按固定的时间间隔仅和相邻路由器交换自己的路由表,经过若干次交换之后,所有路由器最终会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器地址。

更新路由表算法:收到相邻路由器(其地址为 X)的一个 RIP 报文之后:

  1. 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
  2. 对修改后的 RIP 报文中的每一个项目,重复以下步骤:
    • 若项目中的目的网络不在路由表中,则把该项目加到路由表中。
    • 否则,若下一跳字段给出的路由器地址是同样的,则把收到的项目替换到原路由表中的项目。
    • 否则,若收到项目中的距离小于路由表中的距离,则进行更新,
    • 否则,什么也不做。
  3. 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16。
  4. 返回。

特点:实现简单,开销小;最大距离15限制了网络的规模,网络故障时要经过较长时间才能传送到所有路由器

OSPF 开放最短路径优先 (Open Shortest Path First)

为了克服RIP的缺点而开发出来的协议。使用了Dijkstra提出的最短路径算法SPF。

工作过程

  1. 向本自治系统中的所有路由器发送信息,这种方法是洪泛法。每台路由器通过所有输出端口向相邻路由器发消息,每个相邻路由器再转发
  2. 发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。
  3. 只有当链路状态发生变化时,路由器才会发送信息。(vs RIP定时发送)

所有路由器都具有全网的拓扑结构图,并且是一致的。相比于 RIP,OSPF 的更新过程收敛的很快。

边界网关协议 BGP (Border Gateway Protocol)

AS之间的路由选择困难之处在于:

  1. 互联网规模太大
  2. AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过
  3. 各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;

因此BGP只能力求寻找一条能到达目的网络且比较好的路由、而并非最佳路由。配置BGP时,每个AS至少要选择至少一个路由器作为该AS的”BGP发言人(BGP speaker)“,通过在两个相邻 BGP 发言人之间建立 TCP 连接、建立BGP会话、来交换路由信息。使用TCP连接交换路由信息的两个BGP发言人彼此成为对方的邻站。

image

BGP所交换的网络可达性的信息就是要到达某个网络(用网络前缀表示)索要经过的一系列自治系统。每个BGP发言人可以构造出树形结构的自治系统连通图,不存在回路。

image

路由器

路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。

路由器的结构

image

划分为两大部分:路由选择部分+分组转发部分。

分组转发部分由三部分组成:交换结构+输入端口+输出端口

交换结构aka交换组织,其作用就是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。一般来说转发表=路由表。

路由器分组转发过程

从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。

1ab49e39-012b-4383-8284-26570987e3c4

IPv6

具有更大地址空间的新版本IP协议。完整参考维基百科

地址格式:地址长度128位(vs IPv4 32位),以16位为一组,以":"隔开,每组以4位十六进制方式表示。eg. : 2001:0db8:86a3:08d3:1319:8a2e:0370:7344。更多缩写规则参考维基百科

虚拟专用网 VPN

由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。有三个专用地址块:

在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。采用这样的专用IP地址的互联网络称之为专用互联网aka本地互联网aka专用网。

使用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网称为虚拟专用网VPN(Virtual Private Network)。

下面以两个场所为例说明如何使用IP隧道技术实现VPN:

下图中,场所 A 和 B 的通信经过互联网,如果场所 A 的主机 X 要和另一个场所 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。

image

IP隧道是指一种可在两网络间用网际协议进行通信的通道。在该通道里,会先封装其他网络协议的数据包,之后再传输信息。参考百科

网络地址转换NAT

专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT (Network Address Translation)来将本地 IP 转换为全球 IP。

image

image

image

VPN vs NAT:参考CSDN博客:VPN协议和NAT协议都是通过重新构建一个IP首部来实现的,但他们的实现又有区别:

  1. VPN是将内部IP数据报加密后打包成外部IP数据报的数据部分,它的主要目的是为了数据的保密性,
  2. NAT是纯进行地址转换,它的目的是为了解决本地编址的内部网络与外网通信的问题。
tomoya06 commented 4 years ago

传输层

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

主要协议

比较

运输层的端口

协议端口号(Protocol Port Number) aka. 端口,指软件端口,是应用层的各种协议进程与运输实体进行层间交互的一种地址。

UDP

首部格式

首部字段只有8个字节,12字节的伪首部是为了计算检验和临时添加的,不是UDP用户数据报真正的首部。

image

TCP

TCP连接

TCP把连接作为最基本的抽象。每一条TCP连接有两个端点 aka. 套接字(socket) aka. 插口。有:

image

首部格式

image

三次握手

image

简述:假设 A 为客户端,B 为服务器端:

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

最后还需要再发送一次确认的原因:为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

四次挥手

image

简述:以下描述不讨论序号和确认号,且ACK始终为1。

  1. A 发送连接释放报文,FIN=1。
  2. B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
  3. 当 B 不再需要连接时,发送连接释放报文,FIN=1。
  4. A 收到后发出确认,进入 TIME-WAIT 状态,时间等待计时器(TIME-WAIT timer)设置等待 2 MSL (最大报文存活时间 Maximum Segment Lifetime) 后释放连接。
  5. B 收到 A 的确认后释放连接。

A进入TIME-WAIT状态原因:

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

超时机制

可靠传输的实现

超时重传

TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段。

TCP使用自适应算法来设置超时重传时间。计算方法如下。其中:

image

image

image

滑动窗口

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

image

A未收到确认的部分在超时之后就会重传,直到收到B的确认为止。

image

流量控制

流量控制是为了控制发送方发送速率,保证接收方来得及接收。

接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

拥塞控制

拥塞(congestion):在某段时间内,对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏,这种情况就叫拥塞。

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

image

TCP的拥塞控制算法:慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)、快恢复(fast recovery)。下面假设:

  1. 接收方总是有足够大的缓存空间,因此不会发生流量控制,发送窗口的大小只由网络的拥塞程度决定
  2. 虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。

也叫基于窗口的拥塞控制,发送方需要维护一个叫做拥塞窗口(coggestion window, cwnd)的状态变量,注意拥塞窗口与发送窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送窗口。

控制拥塞窗口的原则:如果没有拥塞,窗口就可以增大一些,一旦出现或可能出现拥塞,就必须把窗口减小一点。判断网络拥塞的依据是出现了超时。

image

慢开始+拥塞避免

由小到大逐渐增大拥塞窗口数值。开始发送时设 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍。

注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。

如果出现了超时,则令 ssthresh = cwnd / 2,如上图点2,ssthresh = 24 / 2 = 12,然后重新执行慢开始。

快重传+快恢复

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。

在发送方,如果收到三个重复确认(如上图点4),那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。

在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复(如上图点5),令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。

慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。

image

可以看到,拥塞与报文段丢失的差别在于,拥塞时已经收不到确认回复;报文段丢失时能收到确认回复,但并不是已发送的最新一个报文段。

tomoya06 commented 4 years ago

应用层

主要介绍一些应用层协议和应用

常见协议以及使用的传输层协议和端口

image

image

域名系统 Domain Name System, DNS

DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。

域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名、三级域名等。

image

DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。

在两种情况下会使用 TCP 进行传输:

  1. 如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据,参考栈溢出网友回答)。
  2. 区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。

域名的解析过程

  1. 主机向本地域名服务器的查询一般是采用递归查询:若被查询的域名服务器不知道域名的IP地址,它就以DNS客户的身份向其他根域名服务器查询,然后逐级返回。
  2. 本地域名服务器向根域名服务器的查询一般是采用迭代查询:被查询的根服务器要么告诉本地域名服务器IP地址,要么告诉它应该向哪个服务器查询,然后本地域名服务器继续查。

image

文件传送协议 File Transfer Protocol, FTP

FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:

image

根据数据连接是否是服务器端主动建立,FTP 有主动和被动两种模式:

主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。

动态主机配置协议 Dynamic Host Configuration Protocol, DHCP

提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息即可加入新的网络。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。

工作过程

  1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中;消息逐层封装时,在链路层装帧的MAC目标地址为 FF:FF:FF:FF:FF:FF,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
  2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息:IP地址、DNS服务器的IP地址、默认网关路由器IP地址和子网掩码。
  3. 客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
  4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。
  5. 每个IP地址都有租用期,租用期内IP有效。到一半时,主机发送更新请求要求更新租用期;DHCP服务器若同意,则回复ACK报文,客户端获得新的租用期;若不同意,则停用现有IP地址,重新申请新的IP地址。

电子邮件协议

一个电子邮件系统由三部分组成:用户代理(aka. 电子邮件客户端软件)、邮件服务器以及邮件协议。邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。

image

远程登陆协议 TELNET

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

HTTP

独立成章参考这里