学习视频

随看随记

  • ABCD类型地址的分类
  1. 根据地址左起第-个十进制数的值,可以判断出网络类别(小于127的为A类, 128 ~ 191 的为B类,192 ~ 223的为C类) ;
  2. 根据网络类别,就可找出地址中的网络号部分和主机号部分(A类地址网络号为左起第一个字节, B类地址网络号为左起前两个字节,
    C类地址网络号为左起前三个字节) ;
    3.以下三种情况的地址不能指派给主机或路由器接口:
    (1) A类网络号0和127
    (2)主机号为“全0”,这是网络地址
    (3) 主机号为“全1”,这是广播地址(广播地址只可以做目的地址,不可以做源地址)
    环回测试地址可以做目的地址,也可以做源地址
    网络号为0的地址不可以做目的地址

    网络号全部为0和全部为1可以是子网的地址,但是不可以被分配。
  • IP地址与地址掩码相与可以获得该IP地址的网络号,通过该网络号判断其属于哪个网络,是不是在同一个网络等。
  • UDP使用的端口号为520用UDP传输,OSPF使用IP,BGP使用端口号为179TCP
  • 为什么RIP使用UDP,OSPF使用IP,BGP使用TCP的原因
  • IP地址是4个8位二进制组成,共4个字节,用8个16进制表示。
  • IP分组经过路由器R时,生存时间字段被减1;首部检验和会被重新计算;
    若IP分组总长度大于MTU,则需要进行分片,此时总长度字段、标志字段、片偏移字段都需要修改。
  • 拥塞窗口 cwnd是发送方维护的一个 的状态变量,它会根据网络的拥塞程度动态变化的。
    我们在前面提到过发送窗口 swnd 和接收窗口 rwnd 是约等于的关系,那么由于入了拥塞窗口的概念后,此时发送窗口的值是swnd = min(cwnd, rwnd),也就是拥塞窗口和接收窗口中的最小值。
    拥塞窗口 cwnd 变化的规则:
    只要网络中没有出现拥塞,cwnd 就会增大;
    但网络中出现了拥塞,cwnd 就减少;
  • 三次招手,四次挥手的面试
  • C/S和B/S

网络层

网络层概述

  • 网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
  • 要实现网络层任务,需要解决以下主要问题:
  1. 网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
  2. 网络层寻址问题
  3. 路由选择问题
  • 因特网(Internet) 是目前全世界用户数量最多的互联网,它使用TCP/IP协议栈。
  • 由于TCP/IP协议栈的网络层使用网际协议IP,它是整个协议栈的核心协议,因此在TCP/IP协议栈中网络层常称为网际层。

网络层提供的两种服务

面向连接的虚电路服务

  • 其建立的连接只是逻辑连接,并不是真实的连接,和原来的电路交换很像但不一样。
  • 这种思路是先确保一个可以使用的连接,在这个连接的基础上,进行数据传输。

无连接的数据报服务

  • 不需要一个可用的链路,但是要确保有明确的目的地。
  • TCP/IP体系结构的因特网的网际层提供的是简单灵活、无连接的、尽最大努力交付的数据报服务。

对比

IPv4地址

IPv4地址概述

  • IPv4地址就是给因特网(Internet). 上的每一 台主机(或路由器)的每-个接口分配一个在全世界范围内是唯一的32比特的标识符。
    IPv4地址的编址方法经历了如下三个历史阶段:

分类编制的IPv4地址

  • A类地址(第一个比特为0)
  • 当网络号全为0时,被保留不做指派
  • 当网络号全为1时(网络号为127开头),为本地回环测试地址不做指派
  • 因此可以被指派的网络号1----126(0000.0001 ----1111.1110)
  • 因此可使用的网络号有128 - 2 = 126个 (2^8 -1)
  • 每个网络号可以分配的IP地址为2^24 - 2个(全0和全1不可以做主机号)
  • B类地址(第一个比特为1,第二个比特为1)
  • 因此可使用的网络号有2^ (16-2) = 16384个
  • 每个网络号可以分配的IP地址为2^16 - 2 = 65534个(全0和全1不可以做主机号)
  • C类地址
  • 因此可使用的网络号有2^ (24-3) = 2,097,152个
  • 每个网络号可以分配的IP地址为2^8 - 2 = 254个(全0和全1不可以做主机号)
  • 这个图需要注意路由器的每个接口都需要一个IP地址,因此橘色的需要65535个接口,B类只有65534个,所有要用A类型。蓝色同理。

  • 绿色部分右端是交换机,交换机并不隔离网络,这40个主机同属于一个网络,再加上一个路由器的IP,共41个。

  • 两个路由器中间也需要一个网络,因此图中共有四个网络。

划分子网的IPv4地址

  • 子网可以对A类、B类、C类的IPv4地址进行自定义的划分。每一个类都有自己的默认的子网掩码,A类为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0。
  • 子网掩码可以不以上默认的子网掩码,可以企业内部自定义子网掩码,划分自己的子网。
  • 使用与运算,就表示子网掩码为1的部分是和IPv4地址是相同的,而后面子网掩码为0的部分被忽略了,成为主机使用的IPv4。
  • 32比特的子网掩码可以表明分类IP地址的主机号部分被借用了几个比特作为子网号
  1. 子网掩码使用连续的比特1来对应网络号和子网号
  2. 子网掩码使用连续的比特0来对应主机号
  3. 将划分子网的IPv4地址与其相应的子网掩码进行逻辑与运算就可得到IPv4地址所在子网的网络地址

  • 使用了子网掩码以后依然遵守网络号不能全为0和1,全是0被用作保留位,全是1被用作广播位。

无分类编址的IPv4地址(CIDR)

  • 我认为就是用“/”后面的数字当作子网掩码就可以了。
  • 路由的网络聚合,本质上是将有共同前缀的IPv4地址放到了一起,不同的位为0.
  • 因此网络前缀越长,其路由的IPv4地址越准确,越优先进行匹配。

IPv4地址的应用规划

  • 两种掩码的效果用这个网络举例子。
  • FLSM(定长)
  • 上图可知最多的子网需要5位作为网络号。因此3位作为主机号,5位作为网络号。然后所有的子网都使用同一个子网掩码,组建自己的子网,因此出现了极大的浪费。
  • VLSM(变长)
  • 在该地址块中给上图所示的网络N1~N5分配子块,分配原则是“每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点”。建议先给大的子块分配。
  • 相当于给最大的网络设计好了子网掩码,并确定了子网的范围。在后续的子网中重新设计子网掩码,而不是使用原来的子网掩码。

IP数据报发送和转发过程

  • 默认网关就是路由器接入该网络的接口,执行路由器不同网络之间的IP数据报转发工作。
  • IP数据报的发送和转发过程包含以下两部分:
  1. 主机发送IP数据报
  2. 路由器转发IP数据报

判断源地址和目的主机是否在一个网络

  • 将自己的IP地址和目标地址与各自的子网掩码相与,得到两个地址的网络号。如果这两个网络号相同则存在于同一个网络中,如果网络号不相同则不存在于同一个网络中。

源地址和目的主机不在一个网络如何转发

①检查IP数据报首部是否出错:
若出错,则直接丢弃该IP数据报并通告源主机
若没有出错,则进行转发
②根据IP数据报的目的地址在路由表中查找匹配的条目:
若找到匹配的条目,则转发给条目中指示的下一跳
若找不到,则丢弃该IP数据报并通告源主机

  • 路由器如何寻找相应的网络(寻找相应的网关)
  • 将目的地与路由表中的掩码进行相与操作,寻找其目的网络号,找到路由的接口,并转发。

路由器与转发操作(路由器不转发广播操作,哪怕是指定了网络的网络地址也不转发)

小结

静态配置路由以及其可能产生的路由环路问题

  • 静态路由就是人工手动配置的,其包括直接对某个网络,对某个网络的某个主机等,都可以进行配置。
  • 默认路由就是当路由表中没有发现要找的目的网络时,会默认转向其中一个网络。其路由的目的网络为(0.0.0.0,地址掩码为0.0.0.0。可以写为0.0.0.0/0)

配置错误

  • 配置错误是路由器转发到源发送地址的网络中,从而导致路由闭环。
  • 解决方法是增加一个生存时间TTL,当被转发循环到一定次数时,TTL字段会慢慢减少到0,当到0时,丢弃该数据包。

聚合了不存在的网络

  • 路由聚合是根据路由器的不同接口的网络号的重叠部分进行聚合,前面已有介绍。
  • 同样也是因为网络聚合,在路由表中会出现聚合后的记录,但是有些网络并不存在,但是也在聚合后的网络中,下图所示。同时左路由的默认路由也设置到源网路处,因此导致路由环路。
  • 解决方法是将原本就不存在的网络设置到网络黑洞中,如果有收到目标地址是黑洞路由的数据报,直接丢弃。

网络故障

  • 数据报的目标网络出现故障时,,路由器会找不到目标网络,从而转发到默认路由处,默认路由,转发会源网络,导致了路由环路。
  • 解决方法是将故障的网络设置成黑洞路由。当故障网络维修好了,黑洞网络就会失效,从而转发到正确的网络中。

小结

路由选择协议

互联网动态路由协议概述

三个特点:

  • 自适应:动态路由选择,能较好地适应网络状态的变化
  • 分布式:路由器之间交换路由信息
  • 分层次:将整个因特网划分为许多较小的自治系统AS(Autonomous System)

路由器一般分为两部分

  • 路由选择部分和分组转发部分

路由选择部分:

  • 路由表一般般仅包含从目的网络到下一跳的映射
  • 路由表需要对网络拓扑变化的计算最优化
  • 转发表是从路由表得出的
  • 转发表的结构应当使查找过程最优化

  • 路由转发部分由三部分组成:
  1. 输入端口:信号->比特流->帧->分组
  2. 交换结构:根据转发表对分组进行转发。
  3. 输出端口:分组->帧->比特流->信号

交换结构中还包含输入缓冲区和输出缓冲区
输入缓冲区:用来暂存刚进入路由但是还没来得及处理的分组。
输出缓冲区:用来暂存已经处理完毕但是还没来得及发送的分组。

路由信息协议(RIP)的基本工作原理

  • RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D-V(Distance Vector)”。
  • RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
  1. 路由器到直连网络的距离定义为1。
  2. 路由器到非直连网络的距离定义为所经过的路由器数加1.
  3. 允许一条路径最多只能包含15个路由器。 “距离”等于16时相当于不可达。因此,RIP只适用于小型互联网。
  • RIP认为好的路由就是 “距离短”的路由,也就是所通过路由器数量最少的路由。当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡。
  • RIP包含以下三个要点:
  1. 和谁交换信息 仅和相邻路由器交换信息
  2. 交换什么信息 自己的路由表
  3. 何时交换信息 周期性交换(例如每30秒)

路由器收敛的过程

  1. 路由器刚开始工作时,只知道自己到直连网络的距离为1。
  2. 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
  3. 若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛。
  • 相邻路由器如何进行更新路由(以C向D发送路由表为例)
  1. C将自己的路由表全部发给D
  2. D将C的路由表进行改造,所有的距离加一,下一级更改为C
  3. 将C和D的路由表根据一定的规则进行更新。
    • 到达目的网络,相同下一跳,最新消息,更新(相同的下一跳(这里表示C)表示C的网路拓扑发生了地方,原来的网络拓扑已经不适用了)
    • 发现了新的网络,添加(接入了更多的网络,记录到路由表中)
    • 到达目的网络,不同下一跳, 新路由优势,更新(不同的下一跳表示不同路径,新路由优势表示新路由距离更近,对路由表进行更新)
    • 到达目的网络,不同下一跳,等价负载均衡(不同的下一跳表示不同路径,距离相同,表示可以通过不同的路径传输数据报)
    • 到达目的网络,不同下一跳,新路由劣势,不更新(不同的下一跳表示不同路径,旧路由优势表示旧路由距离更近,不更新)
  • 坏消息传得慢
  • 是指的错误信息会在正确信息之后传递,并误导原来的正确信息,导致信息路由表的更新出现问题。
  • “坏消息传播得慢”又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题。可以采取多种措施减少出现该问题的概率或减小该问题带来的危害。这个问题是RIP协议的固有问题,无法避免只能减小或下减少出现的概率。
  1. 限制最大路径距离为15 (16表示不可达)
  2. 当路由表发生变化时就立即发送更新报文(即“触发更新”),而不仅是周期性发送
  3. 让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)
  • 坏消息传得慢:这里指R2更新了R3的正确数据后,R1才给了R2更新信息,误导了R2.

开放最短路径优先(OSPF)的基本工作原理

  • 开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。
  1. “开放” 表明OSPF协议不是受某-家厂商控制,而是公开发表的。
  2. “最短路径优先” 是因为使用了Dijkstra提出的最短路径算法SPF。
  • OSPF是基于链路状态的,而不像RIP那样是基于距离向量的。
  • OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。
  • OSPF不限制网络规模,更新效率高,收敛速度快。
  • 代价(cost)。
  • 链路状态是指本路由器都和哪些路由器相邻,以及相应链路的
  • "代价” 用来表示费用、距离、时延、带宽,等等。这些都由网络管理人员来决定。
  • 问候分组(Hello)
  • OSPF相邻路由器之间通过交互问候 (Hello) 分组,建立和维护邻居关系。
  • Hello分组封装在IP数据报中, 发往组播地址224.0.0.5;发送周期为10秒
  • 40秒未收到来自邻居路由器的Hello分组, 则认为该邻居路由器不可达。
  • 链路状态通告LSA(Link State Advertisement)
  • 使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement)。LSA中包含以下内容:
  1. 直连网络的链路状态信息
  2. 邻居路由器的链路状态信息
  • LSA被封装在链路状态更新分组LSU中,采用洪泛法发送。
  • 链路状态数据库LSDB(Link State Database)
  • 使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。通过各路由器洪泛发送封装有自己LSA的LSU分组,各路由器的L SDB最终将达到一致。
  • 最短路径优先SPF(Shortest Path First)
  • 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。

总体流程


  • 网络分组确认相邻的路由器还活着,数据库描述确定自己的链路状态和周围路由器的链路状态。发送链路请求,更新链路请求,并确认链路请求,更新有向图的各个边的权重。通过DJ算法计算路径。
  • 当介入的路由器很多时,邻居也会变得很多。规定所有的路由器仅可以和选举出来的两个路由器进行信息传输。
  1. 选举指定路由器DR(designated router)和备用的指定路由器BDR(backup designated router),所有的非DR/BDR只与DR/BDR建立邻居关系。
  2. 非DR/BDR之间通过DR/BDR交换信息

当路由器变多时,路由器广播洪泛也会造成巨大的浪费,因此OSPF将大的自治系统分割成很多小的自治系统。来减小路由器的洪泛范围。

边界网关协议(BGP)的基本工作原理

  • 外部网关协议EGP (例如边界网关协议BGP)
  • 在不同自治系统内,度量路由的"代价” (距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。
  • 自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
  • BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子) ,而并非要寻找一条最佳路由
  • 在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179
  • 在此TCP连接上交换BGP报文以建立BGP会话
  • 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
  • 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor) 或对等站(peer)
  • BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
  • BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)
  • 当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图。
  • BGP-4有以下四种报文
  1. OPEN(打开)报文: 用来与相邻的另一个BGP发言人建立关系,使通信初始化。
  2. UPDATE(更新)报文: 用来通告某一路由的信息,以及列出要撤销的多条路由。
  3. KEEPALIVE(保活)报文: 用来周期性地证实邻站的连通性。
  4. NOTIFICATION(通知)报文: 用来发送检测到的差错。

IPv4数据报的首部格式

版本

  • 占4比特,表示IP协议的版本。
  • 通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4 (即IPv4)

首部长度

  • 首部长度的单位为4个字节,因为一行32个比特也就是4个字节,单位也可以是一行。

  • 首部长度
    占4比特,表示IP数据报首部的长度。该字段的取值以4字节为单位。
    最小十进制取值为5,表示IP数据报首部只有20字节固定部分;最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。

  • 可选字段
    长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。
    可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。

  • 填充字段确保首部长度为4字节的整数倍。 使用全0进行填充。

区分服务

  • 区分服务
    占8比特,用来获得更好的服务。
    该字段在旧标准中叫作服务类型,但实际上-直没有被使用过。
    1998年,因特网工程任务组IETF把这个字段改名为区分服务。
    利用该字段的不同数值可提供不同等级的服务质量。
    只有在使用区分服务时,该字段才起作用。一般情况下都不使用该字段。

总长度

  • 占16比特,表示IP数据报的总长度(首部+数据载荷)最大取值为十进制的65535,以字节为单位。

数据报分片

  • 帧在进行传输的时候会有最大传输单元限制(MTU),当IP数据报的大小大于MTU的时候,会将数据报进行分片。这三个字段用于数据报的分片。
  • 标识:占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
  • 标志:占3比特,各比特含义如下:
  1. DF位: 1表示不允许分片;0表示允许分片
  2. MF位: 1表示“后面还有分片”;0表示“这是最后一个分片”
  3. 保留位:必须为0
  • 片偏移:占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位。该部分必须为整数,不允许是小数。

生存时间(TTL:Time To Live)

  • 生存时间TTL
    占8比特,最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。
    现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。

协议

  • 占8比特,指明IPv4数据报的数据部分是何种协议数据单元。包括那些协议如下图所示。

首部检验和

  • 首部检验和
    占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。
    IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
    由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是- -项耗时的操作,因此在IPv6中,路由器不再计算首部校验和,从而更快转发IP数据报。

源IP地址和目标IP地址

  • 源IP地址和目的IP地址
    各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。

习题

  • 习题一:
  • 片偏移量不可以为小数
  • 片偏移量就是第一个分片的IP数据长度/8.为了取整就向下取整,保证不会超过MTU。

  • 习题二:知识点太多慢慢看吧



网际控制报文协议(ICMP)

  • 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol)。主机或路由器使用ICMP来发送差错报告报文和询问报文。ICMP报文被封装在IP数据报中发送。

ICMP差错报告报文共有以下五种:

  • 终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。(图为R1没有H2的配置,不知道向何处转发时。)
  • 源点抑制(当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。)

  • 时间超过(TTL减到0时)
  • 当路由器收到 一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。
  • 另外, 当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
  • 参数问题检测后出现误码
  • 当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
  • 改变路由(重定向)(选择更好的路由)
  • 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
  • 以下情况不应发送ICMP差错报告报文:
  1. 对ICMP差错报告报文不再发送ICMP差错报告报文
  2. 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
  3. 对具有多播地址的数据报都不发送ICMP差错报告报文
  4. 对具有特殊地址(如127.0.0.0或0.0.0.0) 的数据报不发送ICMP差错报告报文

ICMP询问报文

  • 回送请求和回答(是否可达及了解其有关状态)
    ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。
    收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
    这种询问报文用来测试目的站是否可达及了解其有关状态。
  • 时间戳请求和回答(时钟同步和测量时间)
    ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
    在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
    这种询问报文用来进行时钟同步和测量时间。

ICMP应用举例

  • 分组网间探测PING(Packet InterNet Groper)(PING - PONG)
  1. 用来测试主机或路由器间的连通性
  2. 应用层直接使用网际层的ICMP (没有通过运输层的TCP或UDP)
  3. 使用ICMP回送请求和回答报文

  • 跟踪路由traceroute
  • 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
  • Windows版本 tracert命令
  1. 应用层直接使用网际层ICMP
  2. 使用了ICMP回送请求和回答报文以及差错报告报文
  • Unix版本 traceroute命令
  1. 在运输层使用UDP协议
  2. 仅使用ICMP差错报告报文
  • 其实现方法是从TTL从1开始逐渐增加,不断发送ICMP回送请求报文。回复ICMP差错报告报文(时间超过的就是说明其需要经过的路由),回复ICMP回送回答报文,表示已经到达目的地。

虚拟专用网VPN和网络地址转换NAT

  • 网络中可以随意使用的私有地址块有三大块:A类,B类,C类个有一大块。

VPN(Virtual Private Network)

  • 利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。
  • 原本是源地址为10.1.0.3,目标地址为10.2.0.3;首先经过加密后源地址修改为125.1.2.3,目标地址修改为194.4.5.;在到达目标网络后,解密回源地址为10.1.0.3,目标地址为10.2.0.3从而进行数据传输。反向亦然。
  • 将局域网中的所有信息转发给R1的125.1.2.3端口,125.1.2.3端口通过因特网技术传输到194.4.5.6端口,再转发给目的主机。
  • 如上图所示,同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。
    有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来。这样的VPN就称为外联网VPN。
    在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源。这种VPN称为远程接入VPN。

网络地址转换NAT(Network Address Translation)

  • 内网穿透,将局域网中的主机的专有IP映射到全球IP中。
  • 原本是源地址为192.168.0.2,源地址为为218.75.230.30;首先经过NAT路由器后,将源地址修改为172.38.1.5。在到达目标网络后,发送指定信息给218.75.230.30。返回时,源地址为218.75.230.30,但是目标地址不是192.168.0.2,而是172.38.1.5,在NAT路由器接收到信息后,再将目标地址修改为192.168.0.2。当专有网络对外界进行信息交互时,NAT路由器会对局域网的IP和全球IP地址进行对照,并建立NAPT转换表。当外界信息需要传入时就根据这个表转发局域网的主机上。
  • 因此外网不可以首先对局域网内的住居发起通信,因为只有局域网内的IP首先对外通信,才能建立NAPT转换表。

  • NAT节约IPv4地址的原因:由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换。这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址-起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation).
  • 对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。另外,由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护。

运输层

  • 之前课程所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
  • 但实际上在计算机网络中进行通信的真正实体是位于通信两端主机中的进程。
  • 如何为运行在不同主机.上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。
  • 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。
  • 根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP,这两种协议就是本章要讨论的主要内容。

运输层端口号、复用与分用的概念

  • 运行在计算机.上的进程使用进程标识符PID来标志。
    因特网上的计算机并不是使用统一的操作系统,不同的操作系统(windows, Linux, Mac OS)又使用不同格式的进程标识符。
  • 为了使运行不同操作系统的计算机的应用进程之间能够进行网络通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。
  • TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程。
    • 端口号使用16比特表示,取值范围0~65535;
    • 熟知端口号: 0~1023,IANA把这些端口号指派给了TCP/IP体系中最重要的一些应用协议,例如: FTP使用21/20,HTTP使用80,DNS使用53。
    • 登记端口号: 1024~49151, 为没有熟知端口号的应用程序使用。使用这类端口号必须在IANA按照规定的手续登记,以防止重复。例如: Microsoft RDP微软远程桌面使用的端口是3389。
    • 短暂端口号: 49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。
    • 端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程,在因特网中,不同计算机中的相同端口号是没有联系的。
  • 进程之间进行通信的过程:
  • 使用UDP传输的协议:RIP:520、DNS:53、TFTP:69、SNMP:161、DHCP:67/68
  • 使用TCP传输的协议:SMTP:25、FTP:21/20、BGP:179、HTTP:80、HTTPS:443
  • UDP的协议字段为17,TCP的协议字段为6;在IP的数据部分,不在首部。

进程间的工作流程

  • 图中的49152不是一个确定的端口号,只要是在暂时区间内49152~65535都可以进行使用。DNS服务器将查询到的信息返回给发送的端口。
  • 首先这里用的是HTTP默认端口,如果建立的新的WEB网站就可以不请求80端口,请求其他端口。并不是所有的Web端口都是从80端口那里转过来的。

UDP和TCP的对比

建立连接过程的对比

  • UDP是直接发送,不管是否连接,是否能够收到。
  • TCP是先建立连接,然后传输信息,然后释放连接,确保信息正确传输。

广播,单播与多播

  • UDP支持三种方式,广播、单播、多播都可以。
  • TCP因为要建立可靠的信道,因此只能单播。

传输面向对象

  • UDP传输是面向应用报文的,UDP不对报文做任何处理,仅对报文添加UDP首部,发送到接受方。UDP是直接传输整个应用报文的。
  • TCP传输是面向字节流的,TCP对报文进行分割,添加TCP首部,发送到接收方。TCP可以看作是发送一个流,发送方发送30个字节,接收方可能才接收到6个字节。

传输服务

  • UDP向上层提供无连接不可靠传输服务,适用于IP电话、视频会议等实时应用。(一般用于实时通信)
  • TCP向上层提供面向连接的可靠传输服务,适用于要求可靠传输的应用,例如文件传输。

首部

  • UDP用户数据报首部小,仅8个字节
  • TCP报文首部大,最小20个字节,最大20个字节。

对比小结

TCP的流量控制

  • 一般来说, 我们总是希望数据传输得更快一些。

    1. 但如果发送方把数据发送得过快,接收方就可能来不及接收,这就会造成数据的丢失。
    2. 所谓流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。
    3. 利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。
    4. TCP接收方利用自己的接收窗口的大小来限制发送方发送窗口的大小。TCP发送方收到接收方的零窗口通知后,应启动持续计时器。持续计时器超时后,向接收方发送零窗口探测报文。
  • 所谓流量控制就是原来在数据链路层讲过的选择重传协议的同时,接收方主机可以自己调控发送窗口的大小,从而实现流量控制。
  • 小写的ack表示已经确认收到的字节数,rwnd表示修改后的窗口大小。
  • 下图假设最开始的窗口为4
  • 当rwnd出现0时,则表示接收端已经出现拥塞,发送端先暂停发送。同时发送端启动持续计时器,目的是为了防止B出现ACK更新窗口的信息丢失而导致的死锁问题。当计时器到时间时,会发送零窗口探测报文,确认是否还是0窗口。如果返回的rwnd还是0,则重启持续计时器。如果不是0,则根据发送窗口发送数据。
  • 当接收端有了缓存时,会通知A,调整窗口大小,继续发送数据。
  • 当零窗口探测报文长时间没有响应时,会有重传计时器进行计时,时间到重传零窗口探测报文。

TCP的拥塞控制

  • 在某段时间,若对网络中某-资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞(congestion)。
  • 在计算机网络中的链路容量(即带宽)、 交换结点中的缓存和处理机等,都是网络的资源。
  • 若出现拥塞而不进行控制, 整个网络的吞吐量将随输入负荷的增大而下降。
  • 下面介绍这四种拥塞控制算法的基本原理,假定如下条件:
  1. 数据是单方向传送, 而另-个方向只传送确认。
  2. 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定。
  3. 以最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位。

慢开始和拥塞避免

  • 慢开始和拥塞避免和进行拥塞控制的基础。
  • 在传输的最开始执行慢开始算法,指数形式提高拥塞窗口。在提高到ssthresh时,转为拥塞避免算法。
  • 发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。
  1. 拥塞窗口cwnd的维护原则: 只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些。
  2. 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)。
  • 发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd。
  • 维护一个慢开始门限ssthresh状态变量:
  1. 当cwnd < ssthresh时,使用慢开始算法;
  2. 当cwnd > ssthresh时, 停止使用慢开始算法而改用拥塞避免算法;
    . 当cwnd = ssthresh时, 既可使用慢开始算法,也可使用拥塞避免算法。
  • 整个流程:

    1. 由曲线可知,最开始拥塞窗口为1,按照慢开始算法,以指数形式变大,然后到达慢开始门限ssthresh(16),转为拥塞避免算法。以线性形式增长。
      2.重传计时器超时,判断网络很可能出现了拥塞。将ssthresh值更新为发生拥塞时cwnd值的一半;将cwnd值减少为1,并重新开始执行慢开始算法。
  • “慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;“拥塞避免"并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞;

快重传和快恢复(这两种算法是针对误超时的情况,只有在收到3次重复确认时才触发,否则不触发)

  • 快重传和出现拥塞的判断是触发了超时计时器,还是收到3次重复确认。
  • 慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本)。1990年又增加了两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复(TCP Reno版本)。
  • 有时,个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这将导致发送方超时重传,并误认为网络发生了拥塞;发送方把拥塞窗口cwnd又设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率。
  • 采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。
  • 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
  • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认:
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。
  • 每个部分逐个发送确认,而不是一起发送确认
  • 所谓快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
  • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认;
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
  • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传。
  • 对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%。
  • 图中没有发送M4,M5是因为M4和M5已经接受到并进行确认了。在进行累计确认时会进行确认,因此没有发送M4和M5。如果没有接收到的话,还会发送请求M4或M5的请求信息给发送方.
  • 快恢复
  • 发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法;
  • 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。
  • 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些, 即等于新的ssthresh + 3。
  • 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络;
  • 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;
  • 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些。
  • 下图可知ssthresh并没有从1开始,而是从16的一半8开始,执行拥塞避免算法
  • 超时题目中明显给出了超时字样,因此不触发快重传和快恢复,仅仅由慢开始和拥塞避免。

TCP超时重传时间(RTO)的选择

  • RTO选择时间时间过短会造成重发已经接收到的数据报文,造成不必要的浪费,增大网络负担。
  • RTO选择时间时间过长,会使得网络空闲时间增大,降低重传效率。

  • 因此超时重传时间RTO应该略大于,RTT(往返时间)

RTO时间的选择

  • RTO时间选择通过RTTs和RTTD两部分组成,具体的公式见下图。

  • RTT测量具有很大的困难,例如计算时间时,将不同的数据报与TCP确认报文的时间计算错误(见下图)。

当出现超时重传时,RTO时间的选择(直接为原来RTO的2倍)

  • 出现超时重传时,不适用RTO计算公式,而是直接将新的RTO的数值取为原来的RTO的2倍。当不出现超时重传时,再继续使用原来的RTO公式进行计算。

TCP可靠传输的实现

  • 对于发送方的发送方的发送窗口,存在前沿和后沿。
  • 前沿的移动情况有两种可能:
  1. 不动 (没有收到新的确认)
  2. 前移(收到了新的确认)
  • 后沿的移动情况有三种可能:
  1. 通常是不断向前移动
  2. 不动
    ①没有收到新的确认,对方通知的窗口大小也不变;
    ②收到新确认但对方通知的窗口缩小,使发送窗口前沿正好不动;
  3. 向后收缩(对方通知的窗口缩小了)(在TCP传输时不推荐)
  • 前沿之前可以直接被删除(发送方),或者发送到上端(接收方)。
  • 后沿之后不允许接收或者发送。

数据结构实现

  • 对于一个发送窗口创建三个指针,前沿指针P1,发送指针P2,后沿指针P3.

可靠传输的流程

  • 原视频放在这里,几张图不好说明
  • 当接收到32、33的信息,到那时没有收到31的信息时,接收方会向发送方发送报文,ack取值31,表明31号再次请求接收31号数据。
  • 这时并没有触发快重传机制,因此发送方在接收后确认信息后并不会立即发送新的31号数据。
  • 当接收方接收到31号报文时,因为已经接受到了32和33号报文,因此会发送ack=34的报文给发送方。同时自己的接收窗口前沿移动到34号报文处。
  • 当接收方接到ack报文时发送窗口移动,继续发送发送窗口中的数据。
  • 当发送方已经把发送窗口的所有的数据都发送完毕时,发送方需要得到ack数据报,才能移动发送窗口,否则只能等待ack信息,或当重传计时器到时间的时候,重传已发送的数据。

注意事项

  • 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大。

    • 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的。
    • 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸。
  • 对于不按序到达的数据应如何处理,TCP并无明确规定。
    • 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据。
    • TCP通常对不按序到达的数据是先临时存放在接收窗口中, 等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
  • TCP要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
    • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。
      TCP标准规定,确认推迟的时间不应超过0.5秒。若收到-连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122]。
    • 捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。
  • TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,一定要弄清楚是哪一方的窗口。

TCP的运输连接管理

  • TCP是面向连接的协议,它基于运输连接来传送TCP报文段。
  • TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。
  • TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。

TCP的运输连接的建立(三次握手)

  • 所有的单词解释见下一节
  • 原视频
  • TCP的连接建立要解决以下3个问题:
  1. 使TCP双方能够确知对方的存在;
  2. 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等) ;
  3. 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
  • 服务器一直都是监听状态。
  • TCP连接建立的流程:
  1. 客户端发送同步请求给服务器。
  2. 服务端接收同步请求,并发送该请求的确认请求给客户端。
  3. 客户端发送普通报文的连接建立请求,客户端进入连接建立状态。在服务器端接收到该请求后,也进入连接建立状态。
  • 为什么不使用两次握手(防止历史连接的建立)
  • 当原来历史连接的请求之后接收时,如果只有两握手,则会在最后也在服务器端建立连接,但是对于客户端不予理睬。使得服务器端被拜拜消耗资源。

TCP的运输连接的释放(四次挥手)

  • 所有的单词解释见下一节
  • 原视频
  • 这里的传送是相对客户端来言,客户端发送给服务端就是传送的数据,服务端发送给客户端就是接收的数据。
  • TCP连接释放的流程:
  1. 客户端发送连接释放请求给服务器。客户端进入终止等待1状态。
  2. 服务端接收释放请求,并发送TCP普通确认的确认请求给客户端。并进入半释放状态。同时个hi向主机通知应用进程将释放,进入关闭等待状态。客户端接收到后进入终止等待2状态,目的是等待关闭数据传输。
  3. 当主机进程结束时,通知TCP发送释放连接。TCP服务器进程发送TCP连接释放报文段并进入最后确认状态。
  4. TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态2MSL时间,然后关闭连接。服务端直接关闭连接
  • 为什么需要2MSL(MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟。
  • 当最后一个确认释放的信息没有被服务器接收到则会导致服务器无法关闭,而服务器进行重发时客户端已经关闭,无法处理服务器的重发信息。同时也可以使本次连接持续时间内所产生的所有报文段都应网络中消失,这样就可以使下一个新的TCP连接中状态,不会出现旧连接中的报文段。
  • 客户端出现故障怎么办。
  • 服务器有个保活计时器,TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(2小时定时)。
  • 若保活计时器定时周期内未收到TCP客户进程发来的数据, 则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每隔75秒钟发送一次。 若一连发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。

TCP报文段的首部格式

  • 为了实现可靠传输,TCP采用了面向字节流的方式。但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一一个首部使之成为TCP报文段后进行发送。
  • 一个TCP报文段由首部和数据载荷两部分构成;
  • TCP的全部功能都体现在它首部中各字段的作用。

端口相关

  • 源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程。
  • 目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程。

可靠传输相关

  • 序号(应该是上一节中的seq):占32比特,取值范围[0, 2^32 - 1],序号增加到最后一个后,下一个序号就又回到0。指出本TCP报文段数据载荷的第一个字节的序号。
  • 确认号(应该是上一节中的ack):占32比特,取值范围[0, 2^32 - 1],确认号增加到最后一个后,下一个确认号就又回到0。指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据。
  • 确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效。TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1。

数据偏移(4字节为单位,和IP首部的首部长度类似)

  • 数据偏移:占4比特,并以4字节为单位。
  • 用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。
  • 这个字段实际上是指出了TCP报文段的首部长度。
  • 首部固定长度为20字节,因此数据偏移字段的最小值为(0101)2
  • 首部最大长度为60字节,因此数据偏移字段的最大值为(1111)2

窗口

  • 窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。
    窗口值作为接收方让发送方设置其发送窗口的依据。这是以接收方的接收能力来控制发送方的发送能力,称为流量控制。

校验和(伪首部)

  • 仅仅计算校验和。

标志位

  • SYN(同步标志位,在建立TCP连接时用来同步序号)
  • FIN(终止标志位,用来释放TCP连接)
  • RST(复位标志位,用来复位TCP连接)
  • 当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。 RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。
  • PSH(推送标志位)
  • 接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。
  • URG(紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。)
  • 紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。
  • 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。

选项

  • 有些TCP需要添加一些额外的功能:
  • 最大报文段长度MSS选项: TCP报文段数据载荷部分的最大长度。
  1. 窗口扩大选项:为了扩大窗口(提高吞吐率)。
  2. 时间戳选项:
    1. 用来计算往返时间RTT
    2. 用于处理序号超范围的情况,又称为防止序号绕回PAWS。
  3. 选择确认选项

填充

  • 填充字段仅仅是为了将总长度填充到4的整数倍,没有实际意义。

应用层概述

客户一服务器方式(c/s)和对等方式(p2p)

客户一服务器方式(c/s)

  • 客户/服务器(Client/Server, C/S)方式
  • 客户和服务器是指通信中所涉及的两个应用进程。
  • 客户/服务器方式所描述的是进程之间服务和被服务的关系。
  • 客户是服务请求方,服务器是服务提供方。
  • 服务器总是处于运行状态,并等待客户的服务请求。服务器具有固定端口号(例如HTTP服务器的默认端口号为80),而运行服务器的主机也具有固定的IP地址。
  • C/S方式是因特网上传统的、同时也是最成熟的方式,很多我们熟悉的网络应用采用的都是C/S方式。包括万维网WWW、电子邮件、文件传输FTP等。
  • 基于C/S方式的应用服务通常是服务集中型的,即应用服务集中在网络中比客户计算机少得多的服务器计算机上。
  • 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况。
  • 为此, 在C/S应用中, 常用计算机群集(或服务器场)构建一个强大的虚拟服务器。

  • c/s和b/s

对等方式(p2p,Peer to Peer)

  • p2p不区分服务的提供方还是服务的请求方,对于各个主机来讲,其既是客户方,也是服务方。
  • 对等(Peer-to-Peer, P2P)方式
    在P2P方式中, 没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者。
  • 目前,在因特网,上流行的P2P应用主要包括P2P文件共享、即时通信、P2P流媒体、分布式存储等。基于P2P的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中,这些计算机并不为服务提供商所有,而是为个人控制的桌面计算机和笔记本电脑,它们通常位于住宅、校园和办公室中。
  • P2P方式的最突出特性之一:就是它的可扩展性。因为系统每增加一个对等方,不仅增加的是服务的请求者,同时也增加了服务的提供者,系统性能不会因规模的增大而降低。
  • P2P方式具有成本上的优势,因为它通常不需要庞大的服务器设施和服务器带宽。为了降低成本,服务提供商对于将P2P方式用于应用的兴趣越来越大。

小结

动态主机配置协议DHCP

  • DHCP工作流程
  • DHCP协议的服务端端口号使用67,客户端的端口号使用68。
  • DHCP的作用就是当网络中新增主机时,自动为其分配IP地址而不需要手动分配。

DHCP的工作流程

  • DHCP的IP租用前阶段

    1. 客户端广播请求
    2. 服务器接受请求,发送广播表示可以提供IP
    3. 客户端选取一个IP,发送广播表示指定该DHCP的IP
    4. DHCP确认选取,将该IP信息分配给客户端。
  • DHCP的IP租用阶段
    1. 0.5个租用期,DHCP回复确认,则得到新的租用期。
    2. DHCP回复不确认,客户端立即停止使用该IP,并重新发送DISCOVER报文,
    3. 客户端选取一个IP,发送广播表示指定该DHCP的IP
    4. DHCP确认选取,将该IP信息分配给客户端。
  • DHCP的IP释放阶段
  • DHCP的IP租用前阶段
    1. DHCP客户广播信息,信息包括这个消息的事务ID和自己的MAC地址。虽然是广播,但是不是DHCP服务端的主机没有开启67端口的监听,无法接收消息。
    2. 所有接收到广播的DHCP服务器,也发送广播信息(因为主机还没有分配IP,只有广播因此使主机能够接收到信息)。信息包括原事务ID,以及有关IP的的配置信息,包括IP地址,子网掩码,地址租期,默认网关,DNS服务器等。(IP地址比一定时在经过ARP协议校验以后,没有IP冲突以后再发送广播。)
    3. 主机在接收到DHCP的服务端广播信息后,仍然发送广播信息,向DHCP发送请求信息。信息包括(事务ID,DHCP客户端的MAC地址,接收的IP地址,提供该IP的DHCP服务器地址)
    4. 指定DHCP服务器发送广播给客户端,确认IP分配。
  • 路由器的中继代理
  • 由于路由器不能转发广播,因此当存在于不同的网络中时,路由器会将DHCP服务器的IP配置到路由器中,当客户端需要DHCP服务时,路由器将其转发到DHCP服务器中。

域名系统DNS

域名系统表示法

  • 域名的命名规则
  • 因特网采用层次树状结构的域名结构
  • 域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。
  1. 每一级的域名都由英文字母和数字组成, 不超过63个字符,不区分大小写字母。
  2. 级别最低的域名写在最左边, 而级别最高的顶级域名写在最右边。
  3. 完整的域名不超过255个字符。
  • 域名系统既不规定一一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。
  • 各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理。
  • 域名树图示
  • 域名和IP地址的映射关系必须保存在域名服务器中, 供所有其他应用查询。显然不能将所有信息都储存在一台域名服务器中。
    DNS使用分布在各地的域名服务器来实现域名到IP地址的转换。
  • 域名服务器可以划分为以下四种不同的类型:
  1. 根域名服务器(全球仅有13个根域名服务器)
    根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有的顶级域名服务器的域名及其IP地址。因特网上共有13个不同IP地址的根域名服务器。尽管我们将这13个根域名服务器中的每一个都视为单个的服务器,但“每台服务器”实际上是由许多分布在世界各地的计算机构成的服务器群集。当本地域名服务器向根域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。这就加快了DNS的查询过程,同时也更合理地利用了因特网的资源。根域名服务器通常并不直接对域名进行解析,而是返回该域名所属顶级域名的顶级域名服务器的IP地址。
  2. 顶级域名服务器(com、cn等顶级域名)
    这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答(可能是最后的结果,也可能是下一级权限域名服务器的IP地址)。
  3. 权限域名服务器(二级以及以后的所有等级域名服务器都是在这里,这里虽然只有一级,但是不表示仅仅有一个服务器,当域名中有很多级别时,需要很多级别的权限域名服务器。)
    这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下级域名服务器的地址。
  4. 本地域名服务器(在本地建立的一个服务器,用来向上级DNS服务器查询DNS。一般带有缓存,当缓存中有我们所要查询的域名时,直接返回给客户)
    本地域名服务器不属于上述的域名服务器的等级结构。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中。每一个因特网服务提供者ISP, 一个大学,甚至个大学里的学院,都可以拥有一个本地域名服务器,它有时也称为默认域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离,也有可能就在同一个局域网中。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。

域名服务器的缓存处理

  • 为了提高DNS的查询效率,并减轻根域名服务器的负荷和减少因特网.上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
    -由于域名到IP地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项(例如,每个项目只存放两天)。
  • 不但在本地域名服务器中需要高速缓存,在用户主机中也很需要。许多用户主机在启动时从本地域名服务器下载域名和IP地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。
  • 习题中的DNS服务器表示本地域名服务器,是为网络中的主机提供域名搜索服务的。

文件传送协议FTP

  • 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用,即文件传送。
  • 文件传送协议FTP (File Transfer Protocol)是因特网上使用得最广泛的文件传送协议。
    • FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码), 并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
    • FTP屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。

FTP的工作流程:

  • 主动模式:(TCP服务器主动发起传输数据的TCP连接,服务器传输数据的端口是20号固定的)

    1. 客户端向服务端21号发起TCP连接
    2. 双方建立传输控制命令的TCP连接
    3. 有数据要传输时,FTP客户通过命令通道告知FTP服务器来与自己的另一个临时端口号建立TCP连接,建立数据通道。
    4. FTP服务端通过端口20号主动和FTP客户端建立TCP连接
    5. 双方建立传输数据的TCP连接
  • 被动模式:(TCP服务器被动接收传输数据的TCP连接,服务器传输数据的端口是随机的)
    1. 客户端向服务端21号发起TCP连接
    2. 双方建立传输控制命令的TCP连接
    3. 有数据要传输时,FTP客户通过命令通道告知FTP服务器开启某个临时端口被动等待TCP连接,建立数据通道。
    4. FTP客户端通过自己的随机端口号和FTP服务端已经约定好的随机端口号建立TCP连接
    5. 双方建立传输数据的TCP连接

电子邮件

  • 电子邮件(E-mail) 是因特网上最早流行的一种应用,并且仍然是当今因特网上最重要、最实用的应用之一。
  • 传统的电话通信属于实时通信,存在以下两个缺点:
    1. 电话通信的主叫和被叫双方必须同时在场:
    2. 一些不是十分紧迫的电话也常常不必要地打断人们的工作或休息。
  • 而电子邮件与邮政系统的寄信相似。
    1. 发件人将邮件发送到自己使用的邮件服务器;
    2. 发件人的邮件服务器将收到的邮件按其目的地址转发到收件人邮件服务器中的收件人邮箱;
    3. 收件人在方便的时候访问收件人邮件服务器中自己的邮箱,获取收到的电子邮件。
  • 电子邮件系统采用客户/服务器方式。
  • 电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议。
    1. 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
    2. 邮件服务器是电子邮件系统的基础设施。因特网.上所有的ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。
    3. 协议包括邮件发送协议 (例如SMTP)和邮件读取协议(例如POP3,IMAP)。

电子邮件收发的工作流程:

  • 发送方用户代理与SMTP服务器的工作流程:(下图中的步骤是在建立了TCP连接之后),这个图先贴到这里不解读了,感觉这个协议不怎么用,后面有时间再看看吧。

  • SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象。
  • SMTP不能满足传送多媒体邮件(例如带有图片、音频或视频数据)的需要。并且许多其他非英语国家的文字(例如中文、俄文、甚至带有重音符号的法文或德文)也无法用SMTP传送。
  • 为解决SMTP传送非ASCII码文本的问题,提出了多用途因特网邮件扩展MIME (Multipurpose Internet Mail Extensions)
    1. 增加了5个新的邮件首部字段, 这些字段提供了有关邮件主体的信息。
    2. 定义了许多邮件内容的格式, 对多媒体电子邮件的表示方法进行了标准化。
    3. 定义了传送编码, 可对任何内容格式进行转换, 而不会被邮件系统改变。
  • 实际上,MIME不仅仅用于SMTP,也用于后来的同样面向ASCII字符的HTTP。

常用的邮件读取协议

  • 邮局协议POP (Post Office Protocol),POP3是其第三个版本, 是因特网正式标准。
    非常简单、功能有限的邮件读取协议。用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。不允许用户在邮件服务器上管理自己的邮件。(例如创建文件夹, 对邮件进行分类管理等)。
  • 因特网邮件访问协议IMAP (Internet Message Access Protocol),IMAP4是其第四个版本,目前还只是因特网建议标准。
    功能比POP3强大的邮件读取协议。用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IMAP是一个联机协议。
  • POP3和IMAP4都采用基于TCP连接的客户/服务器方式。
  • POP3使用熟知端口110,IMAP4使用熟知端口143。

基于万维网的电子邮件

  • 通过浏览器登录 (提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器。
  • 邮件服务器网站通常都提供非常强大和方便的邮件管理功能, 用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
  • 用户代理和邮件服务器之间使用HTTP协议,邮件服务器之间使用SMTP协议

万维网WWW

  • 万维网WWW (World Wide Web)并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网.上的一个分布式应用。
  • 万维网利用网页之间的超链接将不同网站的网页链接成一-张逻辑上的信息网。
  • 为了方便地访问在世界范围的文档,万维网使用统一资源定位符URL来指明因特网.上任何种类“资源”的位置。
  • URL的一般形式由以下四个部分组成:

超文本传输协议HTTP(HyperText Transfer Protocol)

  • HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。
  • HTTP/1.0采用非持续连接方式。 在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。
    1. 每请求一个文档就要有两倍的RTT的开销。若-一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间。
    2. 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。
  • 当使用HTTP/1.0协议进行通信的时候,要注意这已经使用了2RTT的时间,如果在后面需要请求,图片视频等其他文件,需要的时间会更长。因此使用HTTP的最小时间是2RTT。
  • HTTP/1.1采用持续连接方式。在该方式下,==万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。==这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。
  • 为了进一步提高效率,HTTP/1.1的持续连接还可以使用流水线方式工作,即浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文。这样的一个接一个的请求报文到达服务器后, 服务器就发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高了下载文档的效率。

HTTP的报文格式

  • HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串, 并且每个字段的长度都是不确定的。

HTTP的报文格式

  • 补充,如果后面有Cookie则表明这个网页之前被访问过。

HTTP的相应报文格式

Cookie


万维网缓存与代理服务器

  • 在万维网中还可以使用缓存机制以提高万维网的效率。
  • 万维网缓存又称为Web缓存(Web Cache),可位于客户机,也可位于中间系统上,位于中间系统上的Web缓存又称为代理服务器(Proxy Server)。
  • Web缓存把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源。


  • 同步问题在代理服务器上有过期时间,如果过期时间到了就向原服务器发送请求,如果文件没有更改则返回304,不需要更改,代理服务器重置过期时间。如果文件已修改,则将修改后的文件发送到代理服务器更新文件。



计算机网络基础学习笔记(下)相关推荐

  1. 计算机网络基础学习笔记(上)

    学习视频 在观看学习视频前,可以先了解一下大概:互联网是如何运作的 随看随记 TCP和UDP MAC和IP地址,从几个不同的角度讲的: CSDN博客 知乎 博客园 从我的角度来看,MAC地址是区分IP ...

  2. jQuery基础学习笔记(下)

    8.jQuery的扩展与noConflict 1.jQuery扩展 <script src="../../jquery-2.1.3.min.js"></scrip ...

  3. Oracle PL/SQL语句基础学习笔记(下)

    游标 游标: 游标(cursor)可以被看作指向结果集(a set of rows)中一行的指针(pointer).在oracle数据库中可以使用显示或隐式两种游标. 1.隐式游标 在执行一个sql语 ...

  4. guido正式发布python年份_Python 基础学习笔记.docx

    Python 基础学习笔记 基于<Python语言程序设计基础(第2版)> 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 计算机的概念 计算机是根据指令操作数据的设备, ...

  5. 计算机网络协议学习笔记

    title: "计算机网络协议学习笔记" url: "https://wsk1103.github.io/" tags: 学习笔记 OSI模型 开放式系统互联通 ...

  6. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    http://blog.jobbole.com/85008/ ASP.Net MVC开发基础学习笔记(5):区域.模板页与WebAPI初步 2015/03/17 · IT技术 · .Net, Asp. ...

  7. Python3 基础学习笔记 C08 【类】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  8. Python3 基础学习笔记 C07【函数】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  9. Python3 基础学习笔记 C01【变量和简单数据类型】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

最新文章

  1. 常用的函数式接口_Predicate接口_默认方法ornegate
  2. JQGrid 参数、属性API
  3. 【学习笔记】第一章——操作系统的系统调用(陷入指令、库函数、作用流程)
  4. FaceBoxes—官方开源CPU实时高精度人脸检测器
  5. FISCO BCOS java sdk 组装交易的代码位置
  6. java开启注解扫描,详解Spring框架注解扫描开启之配置细节
  7. [LeetCode][easy]Rank Transform of an Array
  8. 数据库可视化工具——HeidiSQL
  9. 基于SSM的志愿者管理系统
  10. Linux-002-常用命令02
  11. 按光在光纤中的传输模式可将光纤分为单模光纤和多模光纤两种
  12. TapTap物理画线游戏,使用Unity实现2D物理画线功能
  13. Spark期末考试练习题
  14. python学习第二天
  15. 利用PyTorch自定义数据集实现猫狗分类
  16. 数学建模系列---熵权法
  17. Win10浏览器打不开弹出Openwith.exe 没有注册类
  18. 金融数据中心环境下的SDN技术评测标准化思考与实践
  19. 参与社团活动的意义_学校开展社团活动有何意义
  20. 外贸公司企业邮箱如何开通?公司邮箱选择哪个好?

热门文章

  1. 解决FTPC 自带ireport对象调用打印机条码显示不全,反转,空白等问题
  2. Delph自定义皮肤(AlphaControls)
  3. 【Unity + Google Cardboard】 VR环境配置
  4. kafka对接mysql_【Canal】利用canal实现mysql实时增量备份并对接kafka
  5. Java图片操作-裁剪图片
  6. 教资计算机试题,2018上半年高中信息技术教师资格证面试试题(精选)第四批...
  7. MATLAB/Simulink——利用S-Function建立高超声速飞行器的纵向模型
  8. GdiplusFlat(4)单色画刷 和 线性渐变画刷
  9. 自学Python兼职赚取人生的第一桶金,他能做到为什么我却不行?原因到底是.....
  10. ABB机器人控制柜面板接口功能介绍