计算机网络(自顶向下方法)笔记

计算机网络由应用层,传输层,网络层,数据链路层,物理层构成

应用层

即基于计算机网络的应用,各个应用通过计算机网络来传递信息,典型的应用有: Web,文件传输,电子邮件,目录服务,P2P

应用层协议有:

SMTP,HTTP,FTP,SIP,Telnet等等,而这些应用层协议又以传输层协议作为支撑(TCP,UDP)

网络应用间通信实际是通过进程间通信,应用层本质是进程对进程间通信,

什么是套接字(socket)?

套接字是同一台主机内应用层与传输层间的接口,主机是一间房子,各进程是各个房间,而套接字就是各个房间的门.每个进程可以具有一个或多个套接字,套接字通过端口号进行标识

如何保证经过传输层的报文准确传输到某一主机的应用中?

主机由ip地址标识,发送进程将目标主机ip地址,目标socket端口号附加在分组中,传输层通过目标主机ip地址发送到目标主机,目标主机通过目标端口号来将分组发送给特定进程

运输层

运输层协议为运行在不同主机中的应用进程提供逻辑通信,运输层协议:TCP和UDP

应用层协议与传输层协议有何区别?

应用层协议比如:HTTP,SMTP,它约定了两进程间进行通信的格式,确保双方能读懂各自发来的信息,而传输层协议,用于传输他们进程间来往的信息(报文)

传输层直接将数据交付给进程吗?

不是的,传输层实际上是将数据交付给中间的套接字

什么是运输层的多路复用与多路分解?

将主机交付扩展到进程交付

什么是运输层的多路分解?

将运输层报文段中的数据交付到正确的套接字的工作叫做多路分解,类似于,将快递发送到各个买家手中

什么是运输层的多路复用?

在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(目的主机ip+目的进程socket端口),用于以后的多路分解,从而生成报文段,然后将报文段传递到网络层,所有的这些工作称为多路复用

通俗点理解就是,收集所有卖家的快递,放到一个集装箱中,并为每个快递贴上目的地点,收货人信息,统一运输

UDP

无连接,不可靠数据传输,提供差错检测,无拥塞控制

使用UDP的应用可以实现可靠传输吗?

可以的,不过要在应用层面进行设计,比如增加确认和重传机制

UDP检测到报文段受损会怎么做?

直接丢弃或者将受损的报文段交给应用程序并给出警告

UDP首部字段有哪些?

UDP首部有四个字段,每个字段占用两个字节,分别是:源端口号,目的端口号,长度,校验和

长度: 包括首部和数据,即UDP报文段的总字数

UDP套接字结构?

UDP套接字是一个二元组,包含有一个目的ip地址和目的端口号

TCP

可靠数据传输,面向连接,拥塞控制,差错检测

TCP套接字结构?

TCP套接字是一个四元组,分别是源主机ip地址,源端口号,目的主机ip地址,目的端口号

TCP首部结构?

TCP首部总共20字节

  • 源端口,目的端口各占2字节

  • 序号(4字节) : TCP把数据看做无结构,有序的字节流,并隐式的对每个字节进行编号,序号表示当前TCP数据流中首个字节的编号

  • 确认号(4字节): 表示当前希望接受的数据的字节编号

  • 窗口(2字节) : 用于流量控制,表示允许对方发送的数据量,它告诉对方当前TCP接受缓存区还能容纳多少数据

  • 数据偏移(0.5字节) : 表示TCP报文段首部距离数据段首部的距离,即指出了TCP报文段的首部长度,由于只有4位,最大可表示的数为15,数据偏移是有单位的,其单位是4字节,因此TCP首部字段最大长度为15*4B即60字节

  • 保留(0.75字节,6位) : 无用,设为0

  • TCP 标志字段(6位) :

    • ACK比特 (Acknowlegemt确认) : 用于对一个已被成功接收的报文段的确认
    • SYN比特(SYNchronization同步) : 当SYN=1时表示这是一个请求连接报文段
    • FIN比特(Finis终止) : 当FIN=1表示这是一个请求结束连接报文段
    • RST比特(Reset复位) : 表示TCP连接中出现严重错误,请求重新连接,当RST=1表示当前是复位报文段
    • URG比特(Urgent紧急) : 表示当前报文段有紧急数据,请求尽快传递,应不按原来排队顺序传送,需要配合首部紧急指针字段使用
    • PSH比特(PUSH推送) : 表示该报文段具有高优先级,应尽快传送,不用等缓存满了再传送.
  • 校验和(2字节)
  • 紧急指针(2字节) : 仅在URG=1才有效,它指出本报文段紧急字节的字节数,当URG=1时,TCP将紧急数据查到本报文段数据最前面
  • TCP选项(可选,变长) : 该字段用于发送方与接收方协商最大报文段长度(MSS)时,或在高速网络环境下用作窗口调节因子时使用.

如何确保可靠数据传输?

要考虑一下几个问题:

  • 报文段受损
  • 报文段丢失

对于报文段受损这个问题,可以通过重传机制来实现

对于接收端,对发来的报文段进行确认,如果报文段没有受损,则发送ACK回应,如果报文段受损,则发送NAK回应,发送端如果收到ACK回应,则继续发送下一个报文段,如果收到NAK则重发.

如果ACKNAK也受损怎么办?

  • 一种解决方法是 : 为ACKNAK增加校验位,来达到纠错的目的
  • 另一种解决方法是 : 当发送方收到含糊不清的回应时,重发报文段,但是这又产生了如下问题:

    接收方如何辨别报文段是否是重发的报文段

    • 解决方法 : 通过对数据分组进行编号,接收方通过识别当前报文段编号来确定是否是重发的报文段

对于会出现丢包情况的网络,该如何实现可靠数据传输呢?

当出现丢包情况,可能出现以下几种情况:

  • 发送方丢包,导致发送方迟迟收不到回应
  • 接收方发送的回应丢失,导致发送方迟迟收不到回应

这里可以通过设立一个定时器,当超过特定时间,发送方自动重发

TCP如何确保可靠传输?

  • 报文确认
  • 超时重传
  • 快速重传
  • 差错恢复
    • 回退N协议
    • 选择重传协议
    • 停止-等待协议

停止-等待协议

每发送一个报文段,等待接收回应,若超时未接收到回应,则重传

回退N协议(GBN/Go-Back-N)

又称滑动窗口协议,具有累计确认,超时重传,按序将数据交付给上层等特性

如果相比较于停止-等待协议,其传送分组是串行的,而回退N协议和接下来要讲的选择重传协议则是流水线形式,即一次发送多个分组

回退N协议中的N代表窗口大小,即发送方最多能发送的未被确认的分组的个数,接收方采用累积确认的方式.
比如,窗口大小N=4,发送方连续发送编号为0~2的分组,且接收方正确接收这些分组,则接收方发送ACK=2表示已成功接收0~2编号的分组.

GBN是如何对待出现差错的分组呢?

传输层要确保按序将数据传送给上下层,因此其对待出错的分组是简单,粗暴的丢弃未被确认,出现差错的分组,即使有些分组只是序号不对

举个例子,接上个例子,接收方已经接收到0~2编号的分组,当发送方发送3~6的分组时,编号为3的分组丢失,而其余分组正常到达,但是由于接收方一直没有接收到编号为3的分组,因此,接收方会简单,粗暴的将这些失序分组丢弃

发送方需要对每个分组进行计时吗?

不需要,只需对首个未被确认的分组进行计时即可,若超时,则重发以该分组为首的所有分组

选择重传协议

选择重传协议改善了回退N协议的一些问题,选择重传协议不会简单,粗暴的丢弃失序分组

选择重传采用何种确认机制?

由于选择重传只重传出错的分组,并不重传失序分组,因此有以下几种情况

  • 对于[rev_base,rev_base+N-1]内分组,能被正确接收,此种情况,收到的分组落在接收方的窗口内,一个ACK被回送给发送方(每收到一个分组,回应一个ACK),如果该分组之前未被缓存,则缓存该分组,如果该分组是接收窗口的基序号(rev_base),则将起始于基序号的连续的分组向上交付
  • 对于[rev_base-N,rev_base-1]内的分组能被正确的收到,必须产生一个ACK,即使是已经确认过的序号,否则,发送方不断重发该分组,使得发送方的窗口无法滑动.
  • 其他情况,忽略该分组

需要对每个分组计时吗?

需要,每个分组都是独立的各不影响,这与回退N协议不同(但由于这是理论上的设计,在实际中定时器的管理需要很大的开销,因此实际中仅使用单一的重传定时器)

窗口长度如何设置最好?

窗口长度必须小于或等于序号空间大小的一半,如果窗口长度比序号空间大小小1,则协议无法工作,会出现无法判断是一个新分组还是重传的情况

如何确定定时器的定时长度?

在大多数TCP的实现中,TCP采用超时间隔加倍的策略,TCP的初始重传 超时 时间间隔由加权平均往返时间和往返时间的方差决定的,每次发生重传,则将计时间隔加倍

什么是快速重传?

快速重传既是指:在没有发生超时的情况下,发送方重传分组,这边需要提到一个叫做冗余ACK的概念,冗余ACK既是指再次确认某分组的 ACK(在这之前已经有了该分组的ACK),当发送方收到3个某分组的冗余ACK时,则进行快速重传.重传冗余ACK之后的丢失的分组.

接收方何时发送冗余ACK?

当出现报文段丢失的情况,即所收到的报文段编号大于期望收到的编号,由于TCP不适用否定确认,因此,他会对已经接收到的最后一个有序数据进行重复确认,即发送冗余ACK

TCP采用的差错恢复是回退N还是选择重传?

TCP远比我们想象的复杂,可以简单的理解为TCP的差错恢复机制是GBNSR的混合体

流量控制服务

流量控制服务,是一个速度匹配服务,即发送方的发送速率与接收方接收速率相匹配

拥塞控制与流量控制有何区别?

拥塞控制与流量控制都是对发送方的遏制,但他们是针对不同的情况而采取的控制

流量控制是如何实现的?

TCP让发送方维护一个称为接收窗口的变量,来提供流量控制.

接收窗口根据可用缓存空间的数量来定的,由于TCP是全双工的的,因此连接两端的发送方都维护一个接收窗口

假设主机A向B发送一个大文件

发送方A如何知晓接收方B的剩余缓存空间大小?

TCP报文段首部有个占用2字节的窗口大小(Window size),接收方B通过将当前剩余的缓存空间大小写入到所要发送的报文段中,于是接收到该报文段的另一个接收者A会更新所维护的接收窗口

如果接收方B缓存已满,而且发送方A也受到B所发来的报文段,并成功更新接收窗口,接收窗口设为0,会出现什么情况?

如果接收方B不在发送报文段给A,则A所维护的接收窗口一直都为0,因此A就无法向B发送报文段,即使B中已经有了缓存空间

因此,为了解决此类问题,TCP规定,当主机B的接收窗口(主机A维护)为0时,主机A发送一个只有一个字节的报文段(用于更新接收窗口),该该报文将被接收方(主机B)确认,确认报文中含有最新的主机B的缓存空间大小

拥塞控制

由于网络层不能向端系统提供显式的拥塞反馈,因此TCP需要提供端到端的拥塞控制

简单来讲,如果TCP让每个发送方感知到传输层出现拥塞,则降低发送方发送速率

TCP发送方如何感知到传输层出现拥塞?

若出现超时和来自接收方的3个冗余ACK,说明出现丢包的现象,即出现拥塞

TCP发送方如何控制发送速度?

发送方维护一个变量拥塞窗口cwnd,它对速率进行控制

发送方发送的未被确认的报文段个数不能超过,接收窗口拥塞窗口的最小值

TCP发送方如何调控发送速率?

发送方如何确保,发送速度足够快,又不会造成拥塞?

TCP拥塞控制算法:

  • 慢启动
  • 拥塞避免
  • 快速恢复

慢启动和拥塞避免是TCP的强制部分

1
2
3
4
MSS:最大报文段大小
cwnd: 拥塞窗口
ssthresh : 慢启动阈值
RTT : 往返时间

什么是慢启动?

发送方每隔RTT发送的报文段个数从1开始指数递增(1–>2–>4–>8)

  • 当发送方检测超时发生时,重新进入慢启动

    1
    2
    ssthresh = 1/2 * cwnd
    cwnd = 1
  • 当发送方收到3个冗余ACK时,执行一次快速重传,并进入快速恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
即重传丢失分组
进入快速恢复状态
1.把ssthresh设置为cwnd的一半

2.把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)

3.如果收到冗余ACK,则cwnd加1

4.如果收到丢失分组,则结束快速重传状态

5.cwnd=ssthresh

6.进入拥塞避免状态
  • cwnd==ssthresh时,进入拥塞避免

什么是拥塞避免?

每过一个RTT,cwnd加一

拥塞避免阶段碰到超时和3个冗余ACK会怎样?

若出现超时则进入慢启动
如果碰到3个冗余ACK

1
2
3
4
网络继续从`发送方`向`接收方`交付报文段
ssthresh = 1/2 * cwnd
cwnd = 1/2 * cwnd
进入快速恢复状态


TCP三次握手,四次挥手

三次握手

假设A想跟B通话
A: 您好,我想跟你通话,你同意吗?
B: 您好,我同意.
A: 您好,我收到了您的同意通话的回复,现在我们可以正式通过了,我想对你说…(至此,AB正式建立连接,经过三次握手)


A:发送SYN报文段,SYN报文段中包含SYN=1,seq=一个随机数
B:发送SYNACK报文段,同意连接请求,并为该TCP连接分配缓存变量,服务器处于半连接状态
A:在收到SYNACK报文段后,客服端也许为该连接分配缓存和变量,客户端发送一个报文段对服务器端允许连接报文段的确认

这边有几点需要注意:

  • 第三次握手,因为连接已被建立,故SYN=0,且可以在报文段中附加客户端到服务器端的数据
  • 第一次和第二次握手不能附加数据
  • 第一次和第二次握手SYN=1,第三次SYN=0

什么是SYN泛洪攻击?

由于服务器会为每个TCP连接分配缓存和变量,因此,当客户端一直不完成第三次握手,则服务器就一直处于半连接状态,若同时有N多个客户端发送连接请求,同时不完成第三次握手,则服务器会不断为这些半开连接分配资源,直到服务器资源被耗尽

四次挥手

下图为四次挥手示意图,由于TCP是全双工,因此需要四次挥手

释放连接过程

在结束之前,通信双方都是处于 ESTABLISHED 状态,然后其中一方主动断开连接。
下面假如客户端先主动断开连接。

  • 第一次挥手:
    客户端向服务器发送结束报文段,然后进入 FIN_WAIT_1 状态。
    此报文段 FIN = 1, Sequence Number = M。
  • 第二次挥手:
    服务端收到客户端的结束报文段,然后发送确认报文段,进入 CLOSE_WAIT 状态。
    此报文段 ACK = 1, Sequence Number = M + 1。
    客户端收到该报文,会进入 FIN_WAIT_2 状态。
  • 第三次挥手:
    同时服务端向客户端发送结束报文段,然后进入 LAST_ACK 状态。
    此报文段 FIN = 1,Sequence Number = N。
  • 第四次挥手:
    客户端收到服务端的结束报文段,然后发送确认报文段,进入 TIME_WAIT 状态,经过 2MSL 之后,自动进入 CLOSED 状态。
    此报文段 ACK = 1, Sequence Number = N + 1。
    服务端收到该报文之后,进入 CLOSED 状态。
  • 关于 TIME_WAIT 过渡到 CLOSED 状态说明:
    从 TIME_WAIT 进入 CLOSED 需要经过 2MSL,其中 MSL 就叫做 最长报文段寿命(Maxinum Segment Lifetime),根据 RFC 793 建议该值这是为 2 分钟,也就是说需要经过 4 分钟,才进入 CLOSED 状态。
  • 下图为客户端TCP经历的状态序列
  • 下图为服务器端TCP经历的状态序列

网络层

主机到主机的通信服务,提供单一,尽力而为的服务

正因为网络层的这种特性,它能使各个局域网互联在一起.

两种重要的网络层功能

  • 转发 : 对于单个路由器而言,路由器负责将传入的分组`转发到合适的输出链路`
  • 路由选择: 当分组从发送方流向接收方时,网络层必须决定,分组所传输的路径,计算这些路径的算法叫做路由选择算法

虚电路和数据报网络

网络层也能够在两台主机间提供面向连接服务比如虚电路无连接服务比如数据报

虚电路

即模拟实际中的电话电路,面向连接

虚电路如何创建?

  • 传输层与网络层联系,指示目的主机ip地址,等待网络层创建虚电
  • 网络层通过路由选择决定源主机到目的主机的路径,即确定分组所要经过的一系列链路路由,
  • 网络层为路径上的每条链路决定一个VC号—>通过路由转发表
  • 网络层在沿路径的每个路由器的转发表中添加一个表项

虚电路如何拆除?

当发送方或接收方希望断开连接,它通知网络层,告诉它希望断开连接,网络层通知另一端的端系统结束呼叫,并更新路径上路由器转发表

路由器如何为链路分配VC号?

如下图为一个路由器的部分转发表

对于一个简单的虚电路(A-->R1-->R2-->B)

可知 A到R1的链路VC号为12,R1到R2的链路VC号为22,R2到B的链路VC号就由R2的路由转发表决定

数据报

数据报,类似于UDP,非面向连接,分组通过一系列的路由器传递,路由器通过分组的目的主机IP结合当前网络状态,将分组转发到合适的输出链路接口,最终到达目的地

路由器是如何转发数据报分组的?


路由器转发表利用目的地址前缀匹配的方式进行转发,且路由器使用的是最长前缀匹配规则,比如目的地址为11001000 00010111 00011000 11,则该目的地址在路由转发表中的第一二项都匹配,但是路由器将它转发到1链路接口

路由器内部结构

输入端口,输出端口

输入端口

  • 输入的物理链路通过该端口与路由器连接
  • 解析与之相连的物理链路发来的分组,得到目的地址(数据链路处理)
  • 查找 : 在路由转发表中根据目的地址,查找,并确定要转发的路由器的输出端口
  • 排队 : 如同时有多个传入的待解析的分组,则需进行排队,调度
  • 将排队的分组,以某种调度算法,依次转入交换结构

输出端口

  • 取出并处理存放在输出端口内存中的分组,并将其转发到输出链路上
  • 其流程大致与输入端口类似

交换结构

交换结构 : 将输入端口转发的分组传递/转发到输出端口

根据交换技术不同分为:

  • 经内存交换
  • 经总线交换
  • 经互联网络交换

网际协议(IPv4): 因特网中的转发和编址

IP分为IPv4IPv6

网络层的组件有哪些?

  • IP协议
  • 路由选择协议 : 决定了数据报从源到目的地的路径
  • ICMP协议(因特网控制报文协议) : 报告数据报中的差错,和对某些网络层信息请求进行响应的设施

数据报格式

网络层分组称为数据报

TCP首部

UDP首部

IPv4首部

TIP: 每行是32比特即4个字节,TCP,IP中不考虑可变字段选项的话,都为20字节大小,UDP为8个字节大小,在IPv6中已经取消选项字段,而且也不再分片

1
2
3
4
5
6
7
8
9
10
11
12

- 版本 : 区分Ipv4和Ipv6
- 首部长度 : 表明首部大小
- 服务质量 : 规定低延时,高吞吐率,可靠性等要求
- 数据报长度 : IP数据报总长度,包括首部和数据
- 标识,标志,片偏移用于分片
- 标识/Identity(16比特) : 由发送主机规定,是数据报的唯一标识,数据报的每个分片都具有相同的标识,一般发送主机每发送一个数据报,赋予数据报标识加一
- 标志/Flag(3比特) : 用于区分是否是最后一个分片,若flag=0,表示这是最后的分片
- 片偏移(13比特) : 用于表明该分片中所携带的数据,相对于完整的数据的偏移值
- 寿命(TTL/Time-To-Life) : 报文段每经过一个路由器转发,则TTL减一,当TTL=0时,数据报被丢弃
- 上层协议 : 表示,当数据报到达目的主机时,要将数据交付给何种传输层协议(UDP/TCP)处理
- 首部校验和 : 对数据报首部进行校验

传输层也有校验和,是否是多此一举?

不是

  • IP只对首部进行校验,而TCP/UDP对整个报文段进行校验
  • TCP能运行在不同的协议之上(比如ATM),而IP携带的数据不一定要传给TCP/IP

举个例子看看,IP分片的场景

对于一个4000字节的数据报(首部20字节),MTU=1500字节的链路上,偏移值单位为8字节(MTU:一个链路层帧所能承载的最大数据量)

需要注意的是,MTU规定的大小是1500字节,但是实际中数据报中所能承载的数据最大只能为1480,因为数据报首部占用20字节
ID有发送主机确定,各个分片ID相同,偏移值的单位是8字节

IP数据报是以分片方式传送,在哪个地方组装这些分片?

IPv4的设计者决定将数据报的组装工作放到端系统(主机中),而不是路由器中

IPv4编址

IPv4地址32位,我们把主机与物理链路之间的边界称为接口,例如:路由器的接口.而Ip标识的实际上是接口,不过每台主机都通过一个接口来接入网络,因此一个主机具有一个Ip地址

网络层用IP地址来标识一台主机,因此在一个局域网内,不能出现IP相同的主机,而整个互联网由各个局域网互联而成,这些独立的局域网称为子网

子网划分

192.0.1.0/24:其中/24称为子网掩码,它表示前Ip地址的前24位当做网络前缀,因此在一个子网当中的所有主机,都具有相同的网络前缀

什么是子网?

隔离的网络,通过接口连接这些隔离的网络,这些隔离的网络叫做子网

举个例子

上图,由三个路由器,每个路由器有三个端口(每个端口都具有Ip地址),
总共有六个子网

  • 存在主机的有三个
    • 223.1.1.0/24
    • 223.1.2.0/24
    • 223.1.3.0/24
  • 不存在主机的有三个
    • 223.1.9.0/24
    • 223.1.8.0/24
    • 223.1.7.0/24

在子网223.1.1.0/24中实际上还存在至少一个路由器,有至少三个接口,分别连接两台主机和一个路由器

什么叫做Ip的分类编址?

根据网络前缀/网络部分的长度进行分类
A类,B类,C类网络前缀长度分别为8位,16位,24位

  • A类IP段 0.0.0.0 到127.255.255.255 最高位0
  • B类IP段 128.0.0.0 到191.255.255.255 最高位10
  • C类IP段 192.0.0.0 到223.255.255.255 最高位110
  • D类IP段 224.0.0.1 到239.255.255.254 最高位1110
  • E类IP段 E类地址保留,仅作实验和开发用。 最高位1111

D类地址用于多点广播(Multicast)它是一个专门保留的地址。它并不指向特定的网络,多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机

全零(“0.0.0.0”)地址指任意网络。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址

什么叫做IP的无分类编址?

因特网的地址分配策略为无分类编址(CIDR) ,类似于a,b,c,d/x的形式

什么是DHCP?

DHCP动态主机配置协议,它是一种客户端-服务器模式,当接入的主机(还未被分配IP),通过DHCP获得IP

DHCP如何运作?

  • 客户端通过UDP方式,发送DHCP发现报文,搜索DHCP服务器,客户端以0.0.0.0作为源IP地址,目的地址为255.255.255.255(广播地址)
  • 可能有多个DHCP服务器收到报文,因此每个DHCP发送DHCP提供报文作为响应,目的主机IP仍为255.255.255.255
  • 客户端从这些报文中选择一个,并发送DHCP请求报文
  • 对应的DHCP服务器发送DHCP ACK报文回应
  • 客户端主机成功获取IP

外界与内网间是如何通信?

由于内网中的主机IP在内网中是唯一的,但是可能与外网中的某台主机IP冲突,为了解决此类问题,便有了NAT(network address translation)网络地址转换

NAT能使整个内网对于外界来说,是一个具有单一IP的单一设备,比如这个IP地址为138.76.29.7
因此,所有从这个内网流出的报文都具有相同的源IP138.76.29.7
所有流向这个内网的报文都有同一个目的Ip138.76.29.7

但是NAT是如何区分带有相同目的IP的报文?

NAT路由器,以IP地址+端口号的形式来标识报文段

NAT路由器维护一个NAT转换表

从10.0.0.1,3345 流出的报文,NAT将其转换成138.76.29.7,5001
如果流入内网的报文具有相同的IP和端口,则NAT路由器会将其转发给IP为10.0.0.1的主机

什么叫做NAT穿越?

若外界主机A想与NAT内的主机进行TCP连接

  • A能够通过一个中间对等方C与对等方B联系
  • 要求C不位于NAT内网内,且已经和B进行TCP连接
  • A借助C向B发起连接请求,请求返回对等方A的TCP连接
  • 从而建立起一个A到B的TCP连接
  • 这种雇佣关系也称为连接反转,用于NAT穿越

什么是UPnP

UpnP是一个允许主机发现并配置邻近NAT的协议

ICMP

ICMP报文用于指示网络层传输中的错误,或者发送命令,被主机和路由器用来沟通网络层信息

ICMP通常被认为是IP协议的一部分,但是从体系结构上讲,它位于IP之上,ICMP可作为IP就有效负载.(TCP/UDP也可以)

IPv6

  • IP地址长度为128位(IPv4为32位)
  • 定长首部有40字节,源/目的Ip地址各占18字节
  • 不分片
  • 有效载荷: 指明所承载数据大小
  • 跳限制 : 类似与TTL
  • 下一个首部 : 类似与上层协议
  • 流量类型 : 类似与服务类型

路由选择

默认路由器 : 主机通常直接与一台路由器相连,该路由器即为主机的默认路由器,也称为第一跳路由器

源路由器 : 源主机的默认路由器
目的路由器 : 目的主机的默认路由器

  • 全局式路由选择算法
    • 链路状态算法(Link State/LS)
  • 分散式路由选择算法
    • 距离向量算法(Distance-Vector/DV)

自治系统(Autonomous System)

AS通常由一组处在相同管理控制的路由器组成,相同AS下的路由器运行相同的路由选择算法

网关的作用?

负责向本AS外的目的地转发分组的路由器称为网关路由器,它们起着网关的作用

如果AS间有多条路径(通过多个链路和网关路由器)怎么办?

因特网中所有的AS都运行有相同的AS间路由选择协议–>BGP4

什么是热土豆路由选择(AS间路由选择原则)?

在热土豆路由选择中,As尽可能快(经济)的扔掉分组(让网关路由器向某网关路由器发送分组)

As系统内部的路由选择有哪些?

AS系统内部路由选择协议又称为内部网关协议

  • RIP(路由选择信息协议): 是一种距离向量协议
  • OSPF(开放最短路优先): 是一种链路状态协议Dijkstra最低费用路径算法

链路层

规定将运行链路层协议的任何设备称为结点,将沿着通信路径连接相邻结点的通信信道称为链路,

数据链路层的作用?

数据链路层的基本服务是将网络层的数据报从一个结点(主机,交换机,路由器,Wifi接入点)移动到相邻的结点

数据链路有哪几种类型?

  • 点对点链路(Point-To-Point link)
    • 点对点协议(Point-To-Point protocol/PPP)
    • 高级数据链路协议(high-level data link control/HDLC)
  • 多路访问链路/广播链路(broadcast link)–>通常用于局域网中
    • 信道划分协议
      • 时分复用协议(TDM)
      • 频分复用(FDM)
      • 码分多址(Code Division Multiple Access/CDMA)
    • 随机接入协议
      • 时隙ALOHA
      • ALOHA
      • 载波侦听多路访问(Carrier Sense Multiple Access/CSMA)
      • 具有碰撞检测的CSMA(CSMA/CD)(CSMA with Collision Detection)
    • 轮流协议
      • 轮询协议
      • 令牌传递协议

链路层能提供哪些服务?

  • 成帧 : 将每个网络层分组,用链路层帧封装起来,用于在链路层中运输
  • 链路接入 : 协调帧在链路中的传播
  • 可靠交付 : 保证无差错传输到目的地
  • 差错检测和纠正

链路层功能在何处实现?

路由器的线路卡实现链路层功能,链路层的功能有硬件实现,比如网卡,现在很多都集成在主板中

差错检测与纠正的技术有哪些?

  • 奇偶校验
  • *校验和(用于运输层,网络层)
  • 循环冗余检测(CRC)

多路访问链路协议

信道划分

  • 时分复用 : 分成N个时隙,分配给N个结点
  • 频分复用 : 分成N个频段,分配给N个结点
  • 码分多址 : 为每个结点分配不同的编码,每个结点对帧进行编码,抗干扰能力强

随机接入协议

时隙ALOHA

划分若干时隙+ALOHA

  • 一时隙传输一帧,每个结点都可以传,没有分配特定时隙给特定结点
  • 结点只在时隙起点传输
  • 所有结点都知道何时是一个时隙起点
  • 若在一个时隙中发生碰撞,在这个时隙结束前,所有结点都知道
  • 发生碰撞的帧,在后续的每个时隙中有P概率重发

ALOHA

非时隙,完全分散的协议

  • 当一个帧到达结点,则立即传输进广播信道
  • 若发生碰撞,则等待一个帧传输的时间以概率P重发

载波多路侦听(CSMA)

  • 说话前先侦听,看有没有人在说话,如果有人说话,则等到他们说话结束后再说话

CSMA规定,在发送帧时,先要侦听,看看是否信道中已经有正在传输的帧,如果有则等待,没有则发送

为何先侦听再发送,仍会发生碰撞?

可以简单的这么理解,每个结点侦听的范围有限,而帧在信道中的传播(双向)需要时间,比如结点A在T0发送一个帧,在T1时刻还未到达B所侦听的范围,因此,B在T1时刻也发送一个帧,这时就会发生碰撞


如上图

  • 横向的阴影,表示B,和D发出的帧传输的范围
  • T0时刻,B发送一个帧
  • T1时刻,D未检测到B所发的帧,D也发送一个帧
  • 当两者的帧相遇时,发生碰撞
  • 如果是CSMA/CD,带有碰撞检测,则B,D同时放弃所发的帧,等待一个随机时间重发

CSMA/CD

比CSMA多了一个碰撞检测,如果检测到还有其他的帧在信道传输(检测信号能量),则放弃所传输的帧,等待一个随机时间,重新侦听,发送

轮流协议

轮询协议

  • 指定一个主结点
  • 主结点,负责监管整个信道,规定每个结点各自所能传输的帧的最多数量,轮询每个结点
  • 比如主结点向结点A发送一个报文,告诉它能够发送的帧的最大数量
  • 在结点1传输这些帧后,主结点向结点B发送报文…

令牌传递协议?

  • 没有主结点,一个称为令牌的特殊帧,在结点间,以某种固定次序传递
  • 当一个结点持有令牌,就具有发送帧的权利

但是,如果,有结点故障,可能会使令牌丢失,则其余所有结点,都无法发送帧,如果令牌无法正常转发,则会造成整个系统瘫痪

交换局域网(以太网,802.11无线局域网)

上面都是提及协议,这次就看看,交换局域网所用到的技术

网络层以Ip表示主机,而链路层以MAC地址标识结点(主机,路由..)

实际上并不是主机或路由器具有MAC地址,而是他们的适配器(网卡等)具有MAC地址

路由器每个端口都有一个IP地址和一个MAC地址,维护着一个ARP转发表

ARP协议是什么?

ARP(Address Resolution Protocol)地址解析协议,可以通过目的主机的IP地址获得目的主机的MAC地址

交换机的作用?

交换机是链路层的分组交换机,即转发链路层的分组(帧)
路由器是网络层的分组交换机,即转发网络层的分组(数据报)

ARP协议是如何运作的?

适配器即类似于网卡设备,具有独一无二的MAC地址

在同一个内网中

若主机A想向主机C发送数据

  • 网路从网络层中得到的数据报,只有C的目的主机IP
  • 发送方主机A还需向它的适配器发送C的MAC地址’
  • 因此发送方A首先会查找在主机(适配器)中所维护的ARP表中的相关项,以便找到目的主机MAC地址
  • 若未找到,则发送方构建一个ARP分组,通过广播形式发送,同一个局域网内的主机都会收到
  • 当目的主机收到该广播分组后,发送回一个响应ARP分组,
  • 同时发送方主机A收到分组后,更新ARP表
  • 并将得到的目的主机MAC地址封装到链路层帧
  • 这只是在同一个局域网内ARP解析的方式

如何发送数据报到外网?

如上图所示,有两个子网,中间有路由器连接,路由器的每个接口都有ARP模块,每个子网内各有一台交换机,用于链路层的帧转发

若IP为111.111.111.111的主机A想向IP为222.222.222.222的主机B发送数据报,则

  • 发送方主机A发现目标主机不再同一个子网内,因此,它会先将帧发送给路由器(网关)
  • 利用ARP协议获得网关路由器MAC地址(E6-E9-00-17-BB-4B),
  • 网关路由器收到帧后,通过查询路由器上的转发表,将数据报转发到特定接口(IA-23-F9-CD-06-9B)
  • 该接口中利用ARP模块,和适配器获得目的主机MAC地址,并封装成,发送给目的主机

交换机与路由器有何区别?

  • 交换机是链路层设备
  • 路由器是网络层设备
  • 集线器是物理层设备(作用于每个比特,放大其能量强度)
  • 网桥(Bridge)是数据链路层设备,是连接两个局域网的一种存储/转发设备,网桥是一种对帧进行转发的技术,根据MAC分区块,可隔离碰撞。网桥将网络的多个网段在数据链路层连接起来。

  • 交换机不能阻止广播风暴,路由器可以
  • 交换机有生成树限制,路由器没有
  • 交换机即插即用,路由器需要配置
  • 交换机适用于小网络,路由器可用于大网络

以太网

最流行的有线局域网技术

以太网帧结构?

交换机的过滤与转发?

交换机的过滤与转发借助交换机表

过滤: 决定将一个帧转发到某个接口还是丢弃
转发: 决定一个帧转发到那个接口

什么是碰撞?

集线器会出现碰撞的情况,当某集线器同时从两个不同的接口接收到,将出现碰撞—>串行工作

现如今集线器已被交换机取代,交换机能并行进行转发工作,即不会出现碰撞的情况

交换机的优点?

  • 消除碰撞
  • 异质的链路,交换机将链路彼此隔离,不同链路可以以不同速率运行并且能够在不同媒体中运行
  • 管理,易于进行网络管理

参考资料

理解 TCP 和 UDP
计算机网络(自顶向下法)

本文标题:计算机网络(自顶向下方法)笔记

文章作者:定。

发布时间:2017年7月27日 - 22时07分

本文字数:14,086字

原始链接:http://cocofe.cn/2017/07/27/计算机网络(自顶向下方法)笔记/

许可协议: Attribution-NonCommercial 4.0

转载请保留以上信息。