【计算机网络】网络分层结构

应用层

软件

第二章节

传输层向应用层提供的服务:SocketAPI
传输层提供端口号,用于区分不同的进程
TCP和UDP都提供16位的端口号,65536个端口

在这里插入图片描述

socket就是整数

socket是在本机存储的,连接的对方并不知道

tcp_socket主键是四元组,代表着自己的IP 端口号和对方的IP 端口号,额外存连接状态信息

udp_socket主键是二元组,代表着自己的IP 端口号

数据安全性:SSL协议(应用层协议),在TCP之上
例如:HTTPS 就是使用了SSL协议
在这里插入图片描述
SSL也提供了SSL级别的Socket API

服务器的wait socket(listen一个端口):
来一个新的连接,再创建一个新的connect socket对应

HTTP应用层协议

HTTP1.0协议是无连接的,服务器发完数据,不维护连接状态,发一次就关连接。
在这里插入图片描述
HTTP1.1协议的默认方式:流水线方式,发送一个请求,在上一个请求没传完的情况下,继续发第二个请求。

在这里插入图片描述

HTTP1.1协议是有持久连接的,服务器发完一次数据,不关连接。
在这里插入图片描述
http本身是无状态协议,想要持续服务变成有状态协议,需要使用cookie机制

代理服务器:用户发来的请求,如果缓存里有,给目标服务器发HEAD请求,只要内容最后修改的时间,如果和本地缓存的时间一致,直接发给用户,否则当作缓存里没有;如果缓存里没有,给目标服务器发请求。
在这里插入图片描述

FTP协议

在这里插入图片描述
服务器主动和客户端21端口建立连接
FTP是有状态协议,控制连接需要一直存在
在这里插入图片描述

SMTP协议

在这里插入图片描述

用户代理

用户代理就是Email的客户端软件
帮用户把邮件发到邮件服务器的发送队列中,然后服务器再把它发走
用户代理需要从服务器拉取邮件信息

邮件服务器协议

客户端在25号端口接收
http是拉取的。smtp是推送的。
http一次传一个对象,带链接的需要额外再拉取。
smtp一次传多个对象,邮件里的图片等等
在这里插入图片描述
报文只能是ASCII码
中文字符怎么办?
多媒体数据、中文字符等需要通过base64编码
在这里插入图片描述
在这里插入图片描述
给服务器发邮件和服务器之间发邮件是用了SMTP协议
从服务器拉取邮件用POP3,IMAP.HTTP都可以

DNS协议

在网络边缘实现的,
互联网的复杂性主要在网络边缘

当一个DNS请求到达DNS服务器,DNS服务器可以选择一个特定的服务器IP地址返回(对于这个用户来说最优,一般是离得比较近的服务器)
在这里插入图片描述
在这里插入图片描述
域名划分是逻辑的,不是物理的
可以把同一个域下的域名分给天南海北的主机
在这里插入图片描述

把域的内部分为一个个区域,每个区域设置一个权威名字服务器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
中间的DNS服务器获取到其他DNS服务器的RR值,会缓存下来,这个缓存的TTL就是有限值
缓存:为了效率
删除:为了一致性
在这里插入图片描述
NS:Name放子域的名字,Value放子域的权威服务器域名,这样才能往下找下面的子域
对于上层服务器来说,需要知道两个信息,子域的名字是什么,子域权威服务器的IP地址是什么

在这里插入图片描述
在这里插入图片描述
递归查询:从根服务器开始查找,一直找到目标域名的权威名字服务器,就拿到了
缺陷是,所有查询都要让根服务器去一层层查。负载大

在这里插入图片描述
迭代查询:根只负责给出下一跳的地址,本地DNS去 根给的顶级域,本地DNS再去 顶级域给的下面的域

在这里插入图片描述

P2P

在这里插入图片描述

非结构化P2P

Peer和Peer之间建立边,互通有无,是逻辑的网络,不是物理的网络

集中式目录

集中式目录:上线时在目录服务器上注册,自己是哪个节点有哪些资源
在这里插入图片描述
缺点:目录服务器挂了,版权风险

完全分布式

先建立初始邻居关系(Overlay):在安装软件的时候,同时给定了一些常在线的结点列表。然后ping这些结点,这些结点返回然后帮助ping这些结点的邻居,本机随机选择其中8-10个保存起来,建立联系(这里是一个主机加入P2P网络的方式)。
退出的时候:跟这8-10个结点说我要下线了。然后这些结点和他断开联系,再从网络结点中补充一个结点的联系。
在这里插入图片描述

泛洪:向所有邻居查询,邻居再帮你查询相邻的邻居
泛洪的缺点:一个查询停不下来,十天半个月还在网络里游荡
解决方法:设置TTL(有限泛洪),记忆化(已经发过的目标就不再发了或者知道自己收过这个查询再收到这个查询就不再处理)

Gnutella网络的缺点:技术问题没解决好,有人说在他上面什么也找不到。被迫开源。

混合体

在这里插入图片描述
在这里插入图片描述

实践例子

在这里插入图片描述
bitmap方式将文件分块:互相交换各自拥有的块。
新加入的结点用户,没有任何块,要先随机拿4块容易拿到的,再优先请求稀缺的块,这样之后才能和别人交换块。
优先向贡献多的目标提供服务。
在这里插入图片描述
torrent文件中包含:tracking server(负责给你分配peer列表,把你拉到洪流中)

DHT 结构化P2P

Peer和Peer之间构成有序的关系,比如环、树

用户IP地址做哈希,根据哈希排列出来一个环或者树
文件也做哈希,哈希排列后,把一段范围内的文件交给一个用户负责
其他用户需要这一段文件直接算哈希去找他

优点:不需要重复存这个文件的副本,每个有序Peer关系里有一个人有这个文件就可以

CDN协议

在这里插入图片描述
在这里插入图片描述

CBR

压缩出来的码率基本不变的

VBR

可变码率

在这里插入图片描述
把视频切成一块一块的,每块可以维持8-10秒的播放
告示文件(manifest):

  1. 是什么文件
  2. 描述信息
  3. 切成多少块
  4. 每块有多久
  5. 有多少个版本
  6. 每个版本的URL

下载哪个服务器的哪些块是客户端决定的。
在这里插入图片描述
CDN运营商:用大量的缓存结点为ICP给用户提供CDN服务
在这里插入图片描述

CDN部署:

  1. enter deep:建立Local ISP,自己分布的服务器通过私有网络连在一起
  2. bring home:把服务器部署在距离上游ISP附近的地方,虽然跳数多,但是在关键位置服务质量也好。

CDN服务:

  1. 第一种方法,用户先从源服务器获得manifest文件,从文件中知道附近的结点
  2. 第二种方法,域名解析的重定向

在这里插入图片描述
用户向源主机请求视频,源主机的DNS权威服务器发出重定向,让用户去找CDN权威服务器,CDN权威服务器告诉用户去找哪个CDN主机获取视频

socket

服务器先运行
创建一个socket,目的是返回一个(操作系统给的)整数
但是这个整数什么都不是
再把这个整数和本地的IP端口捆绑
这个叫做Welcome Socket

之后再调用socket API的另一个函数,accept
来接收远端进程,和他握手的关系

没有人连接的时候,函数阻塞
连接成功,返回一个新的socket值,叫Connection Socket

客户端默认有一个bind,调用connect,之后阻塞,直到服务器同意连接
在这里插入图片描述
结构体 sockaddr_in:服务器守候的IP地址和端口号
在这里插入图片描述
在这里插入图片描述
结构体 hostent:是域名解析的返回值
在这里插入图片描述
在这里插入图片描述
listen的作用,队列长度,每次accept从请求队列中拿出一个
在这里插入图片描述
UDP socket 只与本地IP和端口绑定
UDP 和 IP协议的协议数据单元都叫数据报,要分辨需结合上下文看

UDP socket的空间和TCP socket的空间不重合,所以可以用相同的整数代表。

传输层

TCP UDP协议

TCP是以流的形式传输,不保证内容的界限
需要在应用层做界限的检测
TCP修正的IP的无序、丢失等问题
TCP无法降低延迟
TCP能否提高IP的带宽

UDP是以数据报的形式传输

TCP 多路复用 解复用

很多的应用进程复用一个TCP实体
在源端复用,在目标端解复用
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
TCP、UDP实体只有各一个
发送方接收本机多个进程打算发送的报文,用socket套接字的数据封装,
在这里插入图片描述

可靠数据传输

只负责分发 rdt1.0

假设下面的channel有两个特性,不出错不丢失
在这里插入图片描述
rdt_send deliver_data是和上层的接口
udt_send udt_rcv是和下层的原语接口形式

出错校验 rdt2.0

在这里插入图片描述
ACK:接收到了
NAK:需要重发
rdt2.0里rdt的发送方有两个状态:等待上层调用发送,等待ACK/NAK
接收方只有一个状态:等待下层的调用
在这里插入图片描述
rdt2.0的缺点:校验了P的正确,但是ACK/NAK也有可能出错

2.1加入序号,当感觉接收方发送的数据不对的时候,把数据重新发一遍,接收方发现自己收到了两个相同的数据,就明白自己发的数据可能出错了,让发送方发下一个序号的数据,也就是ACK+1
这个特征叫做停止等待协议(发完停止,等待对方确认)
这里的ACK只用了1位,代表需要发老的Packet还是新的Packet
出错了直接回NAK,不用再检查序号了。

状态机三种状态:一号分组正确收到,等待一号分组来了0号,来了个错误的分组。

在这里插入图片描述

2.2没有NAK只有ACK,但是对ACK编号
等1的时候,收到错误的数据包,在2.1中是发送NAK,请求重传
在2.2中,发送ACK0,告诉我收到的是上一个数据包,下次给我传1
语义上是一样的。

出错校验和丢失校验 rdt3.0

2.X的缺点,发送方发出分组丢失,发送方等确认,接收方等新的分组,形成死锁

超时重传机制,设置比正常往返稍微多一点的时间,超时就认为分组丢了
在这里插入图片描述
在这里插入图片描述
发送方等待ACK1,但是收到ACK0
这时发送方不立即发送P1,而是等到超时了再通过超时重传发送P1

缺点:超时定时器设置不合理,还可以正常工作,但是带宽占用,超时交错一次,之后往返就会更加频繁
在这里插入图片描述

那么超时会不会导致数据错误呢?比如我发了一堆P0,全都在路上,接收方会不间断的收到P0(这条信道很慢),接收方收到第一个P0之后,返回ACK0,发送方接收到ACK0,发送P1,这时候信道切换了,走了一条极快的信道,直接在剩余的P0还没完全到达接收方的时候,P1先到了,这样接收方就会正确的接收P1,但是马上又会有之前的古老P0过来,接收方下一个接收了错误的P0
这就只能靠链路层和网络层的信道控制来实现了,保证这次通信的每一跳的中转网络结点都不变。

老师也提到了我这种问题,说比较大的延迟就相当于对数据重新排序了,这种情况也会被检查出来,这个以后再讲

另一个缺点是信道利用率太低,发出去一个packet很快,但是等待时间长。
在这里插入图片描述
在这里插入图片描述
利用率0.027%

滑动窗口协议

在这里插入图片描述
当发送窗口SW=1,接收窗口RW=1的时候,是停止等待协议
当发送窗口SW>1,接收窗口RW=1的时候,是回退N步协议
当发送窗口SW>1,接收窗口RW>1的时候,是选择重发协议

在停止等待协议中,发送缓冲区是为了出现错误的时候重发而设置的,
在发送缓冲区中的分组可以直接发送走,发送完还留在缓冲区内以便于检错重发和超时重发。
如果没有用完发送缓冲区,上层用户还可以继续交分组进来。

发送窗口是发送缓冲区的一个范围,在发送窗口内的分组是已发送未确认的分组,发送窗口外的是指发送缓冲区还有空间,如果上层用户还有要发的数据可以放进来。

发送窗口初始为空,有分组发送出去了,才开始移动

当数据到达接收缓冲区,如果这个分组不在窗口序号内,这个分组会被抛弃掉。

对于接收窗口为1的情况,等待顺序到来的最高分组,给上一个的ACK
回退N步GBN的情况,对顺序到来的最高分组给ACK,代表我已经收到了这个分组以前的所有分组

对于接收窗口大于1的情况,来一个发一个ACK
在这里插入图片描述

流水线协议 pipeline

细分为 回退N步和选择重传
一次发送多个未经确认的分组,定义了缓冲区
在这里插入图片描述
在这里插入图片描述

TCP协议(重点)

面向字节流的服务,不出错不重复不丢失不失序,
不提供报文的界限:发送方发送两个报文,接收方并不一定收到两个报文,可能收到一个大的报文、四个小的报文

应用把报文交给TCP实体,TCP实体按照MSS(最大报文段)进行分割,
每个MSS的前面要加上TCP头部,形成TCP段,也叫做报文段
在这里插入图片描述
MTU最大传输单元:
在以太网协议中MTU为1500字节
20字节是IP的头部
20字节是TCP的头部
那么MSS就是1460字节
在这里插入图片描述
序号是字节流的偏移量
序号不从0或者1开始,防止对老的连接段对新的连接造成感染
在这里插入图片描述
ACK表示接收了这个序号之前的序号,不包括这个序号

首部长度:以4字节为单位
RSF三个标志位用于两个应用进程建立TCP连接

可选项:和20字节头部一起作为头部
在这里插入图片描述
有累计确认的含义,像GBN协议
ACK要置1,确认号才会生效
在这里插入图片描述
telnet协议:回写相同的字节
在这里插入图片描述
如果两台主机相离很远,那么他们直接的往返延迟变化很大
把最近一段时间的往返时间平均值加上4倍方差,作为超时时间。

当前时间的贡献值权重是1,
上一个时间的贡献值权重是1-α
上上个时间的贡献值权重是(1-α)^2
α建议为0.125

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
超时只发送最老的段
在这里插入图片描述
在发送过程中,窗口后沿会不断收到ACK前移,当窗口后沿到达Next的时候,关闭定时器。
在这里插入图片描述
这就是92.8 100.20在同一个窗口的情况,发送了92.8和100.20,收到ACK100,定时器不关,只有收到了ACK120定时器才关

接收方,如果收到了92.8 并不是立即发ACK100,要等一会比如500ms,如果100.20也到了,就直接发回去ACK120

接收方,如果先收到了100.20而不是92.8,那么立即把ACK92发回去,发现乱序直接重发,然后92.8到了,立即把ACK120发回去,不需要再等100.20了

如果是92.4 96.4 100.20在同一个窗口的情况
接收方,如果先收到了100.20而不是92.4,那么立即把ACK92发回去,发现乱序直接重发,然后92.4到了,立即把ACK96发回去,虽然只补齐了一小部分,但是也提醒发送方自己当前的状态。等96.4到了,再发ACK120。

发送方发现有冗余ACK,立即重传这个段,不等到定时器到期,这种重传称为快速重传。

在这里插入图片描述
接收方通过接收窗口头部字段告诉发送方,自己的缓冲区有多少是空的。
发送方就能确定,自己最多还能发多少字节给对方,实现流量控制。因为即使多发了,接收方也会溢出,等于白发。
在这里插入图片描述
连接建立:

  1. 对方知道要和自己通信
  2. 准备好资源,发送缓冲区接收缓冲区,控制变量初始化,窗口初始化
  3. 确定开始序号

2次握手可以吗?
客户端因为超时重传,发送了两个请求建立连接,服务器维持了两个连接,第一个是半连接,准备的缓冲区和初始化资源都浪费了。

如果客户端的数据发送到达早于第二次请求连接的到达(第二次请求连接在网络中滞留),服务器会把旧数据当成新数据来收了。

3次握手流程:

  1. 客户端请求建立:SYN=1是连接请求,Seq=x(SequenceNumber)告诉对方自己的开始序号
  2. 服务器响应:SYN=1是同意连接,Seq(SequenceNumber)告诉对方自己的开始序号,ACK=1是指明ACK生效,ACKNum=x+1是希望对方发送从x+1开始的字节流
  3. 客户端响应:ACK=1是指明ACK生效,ACKNum=y+1是希望对方发送从y+1开始的字节流,这个报文段可以带上数据内容了

可以用时钟的低32位作为初始序号,这样一段时间内重复的连接建立请求的初始序号不会重复,就不会导致滞留产生的相同端口不同时间段连接互相影响的问题了。

断开连接流程(并不完美,两军问题):
双方分别关闭自己的发送信道

  1. 自己发送FIN=1后,关闭发送连接,等待对方回复消息就完全关闭
  2. 对方收到FIN=1后,回ACK=1,关闭发送连接,等待一段时间没新的消息来就完全关闭

在这里插入图片描述
拥塞控制
在这里插入图片描述
A发给C,B发给D都通过一个路由器,
当进入速率增加的时候,离开速率也增加,最大增加到带宽的一半
但是从延迟的角度来看,速率接近带宽的一半,延迟就陡增

假设路由器缓冲区是无限大,发送方发出的和接收方收到的数据数量是一样的。
进一步,如果路由器缓冲区不是无限大,但是假设理想情况,发送方知道缓冲区剩余空间是多少,那么自己发送的数据都会进入缓冲区里,发送方发出的和接收方收到的数据数量也是一样的。

现实情况,会有丢失,发送方发出的速率增加的时候,接收方收到的速率也增加,但是增加到一定程度开始,发送方发出的和接收方收到的数据数量就不再相等了,变成发送方发的多,接收方收的少,因为有很多内容是超时重发的。
在这里插入图片描述
网络提供给端系统,网络有没有拥塞的信息,

如果网络不提供拥塞信息,端系统自己检查是否拥塞,调整发送速率。
比如:发送方发现超时,或者收到冗余ACK
在这里插入图片描述
ATM网络,曾经是互联网承载的网络——控制信息的拥塞控制
数据交换的单位叫信元,可以认为是一个小分组,只有53字节
5字节是头部

如果是线路交换,在每个节点消耗1个bit的存储时间
如果是分组交换,在每个节点消耗1个分组的存储时间(数千字节)
信元交换,53字节存储时间

NI字段:不再增加bit速率
CI字段:减少bit速率
ER字段:信道中能提供的最小的带宽

特点:ATM对网络核心,负担较重,需要提供精确控制信息。

TCP拥塞——端到端的拥塞控制
丢包的情况:网络拥塞溢出缓冲区,数据出错校验不通过被网络某个位置丢弃
判断网络拥塞:超时,3个冗余ACK
发送速度 = 发送窗口大小/往返延迟
在这里插入图片描述
SS:慢启动阶段
CA:拥塞避免阶段

联合控制:选择拥塞窗口和对方接收窗口大小中最小的一个
在这里插入图片描述
在这里插入图片描述
TCP大致公平,在两个主机使用同一链路,开相同数量TCP连接的时候。
不公平时:

  1. 一台主机开了较多的TCP连接
  2. 一台主机的往返延迟较小

网络层(数据平面)

实现源主机到目标主机的传输
IP协议

可能会丢失,可能失序、可能错误

工作设备:路由器、防火墙

这一层开始是网络的核心
在这里插入图片描述
在这里插入图片描述
网络层实体存在于主机和路由器

路由器插了很多网卡,接到不同的物理网络中
插以太网网卡接入以太网,插ATM网卡接入ATM网络
路由是选路径,全局的
转发是当前路由器从哪个网卡出,局部的

在这里插入图片描述
传统方式:分布式路由,不可编程(出厂时固定)
SDN:软件定义网络(集中式路由,可编程)
动作:转发、Block阻止、泛洪(广播)、修改字段等
在这里插入图片描述
在这里插入图片描述

路由器组成

路由器的每个输入输出端口,都有独立的物理层链路层网络层

其中的网络层有输入缓冲区,因为存在阻塞,有时候不同输入端口解析出来需要的输出端口是相同的,只能阻塞排队

输出缓冲区因为存在多个输入对一个输出的关系,维持两边速度平衡,用缓冲区

第一代路由器(通过内存交换)

通过两次总线
从输入端口接收到内存,然后发到路由软件匹配路由表,再输出

通过总线交换

共享总线,输入输出端口都可以使用总线

通过互联网络(CrossBar)交换

输入输出端口交错互相连起来

逻辑平面(靠后的内容,在SDN前面看)

测路由表(从其他路由器获得),做路由通告(告诉其他路由器)
路由器会告诉其他路由器,哪些子网号交给我。形成路由表。
路由表里查不到的,转发给默认网关。

由于路由器垂直集成了数据平面和逻辑平面。两者难以拆分,路由器出厂之后基本很难修改。
比如买华为的路由器,那么不能只要华为的路由器,不要里面的操作系统和路由软件。
再或者,想要给一个其他品牌的路由器安装华为的操作系统和路由软件,也有很大可能不成功。

IP协议 (数据平面)

主要实现了数据平面的转发功能
在这里插入图片描述
在这里插入图片描述
IPv4协议头固定长度20字节,还有可变长度
头部长度:单位是4个字节
数据类型:废弃不用,代表数据报里面载荷的类型,让分组调度有依据

分片之后到目标主机再重组,目标主机收到第一片的时候启动定时器,如果时间到了,分组没组齐,就扔了。

16bit的ID分组标识:标记同一个分组里的分片用同一个ID,重组时候区分用
告知是不是分组最后一片的标志位:1的话表示后面还有
片的偏移量:以8个字节为单位,区分分片的前后,重组时候排序用

TTL:每个路由器减1
upper layer:交给TCP还是UDP还是其他协议
checksum:校验头部是否出错
每个路由器都有一个IP,
有一种Option,每经过一个路由器,路由器都会把自己的IP打在Option中,让目标端知道路径

IP地址

是用来表示设备的接入点,而不是表示设备的。
一个路由器有多个网络接入点,它在不同接入点的IP地址是不同的。
网络内部怎么做分组的发送和接收,单位是帧,有线局域网借助于交换机,无限局域网借助于AP

在这里插入图片描述
子网:在同一个子网内部,分组交换不需要借助路由器,在IP的层面只有一跳,即使中间有很多交换机,但是都不计数
在这里插入图片描述
IP地址约定,全0和全1的网络号弃用,全0和全1的主机号弃用
A类:第一位为0,第一个字节其他7bit代表网络号,后面三个字节代表主机号
B类:前两位10,前两个字节其他14bit代表网络号,后面两个字节代表主机号
C类:前三位110,前三个字节其他21bit代表网络号(两百多万),后面一个字节代表主机号
ABC类地址统称单播地址
广播一般在计算机局域网范围内。
D类:前四位1110,
E类:预留
D类是组播地址,组播发给属于组播组的成员。

特殊约定:

  1. 网络号(子网)全0,代表本网络
  2. 主机号全0,代表本主机
  3. 主机号全1,代表广播给这个网络的所有主机
  4. 第一个字节是127,代表回路地址,如果TCP/UDP给IP向下递过来了127.X.X.X的地址,IP会把它反转朝上
  5. 内网地址(不会分配给实际的公共地址,只在内网中有含义):
    A类地址第一个字节是10,子网掩码255.0.0.0
    B类地址前两个字节是172.16,子网掩码255.255.0.0
    C类地址前两个字节是192.168,子网掩码255.255.255.0

在这里插入图片描述
路由器不转发内网地址,比如192.168.0.1这种地址,出不了路由器。

在这里插入图片描述
后来还没分配完的C类地址,采用按需分配的方式 (CIDR)
在这里插入图片描述
目标子网号,子网掩码、下一条IP、接口

设备如何获得一个IP地址

上网需要的4个信息,IP、子网掩码、local name server(本地DNS)、默认网关
在这里插入图片描述

DHCP协议

在这里插入图片描述
每次自动获得IP地址,IP地址有租用期
主机上线的时候要广播一下,有没有DHCP服务器,用目标IP地址32位全1
DHCP服务器回应分配的信息
主机向DHCP服务器发送单播请求,确定使用这个分配的信息
DHCP发送ACK,告诉主机这个IP租用时长,到了时间要收回地址

DHCP是UDP之上的服务

如何获得一个地址块

在这里插入图片描述
地址块是怎么产生的?
比如一个网络有20位的网络号,12位的主机号
它可以把12位主机号进一步划分,前三位作为子网号,后9位作为主机号,
这样就可以把子网分配出去。

在这里插入图片描述
最上级的机构是ICANN,负责第一层的IP分发。
在这里插入图片描述
内部地址块聚集后,通告给ISP

如果有多个表项和目标地址匹配,采用:最长前缀匹配

NAT (网络地址转换)

机构只申请了一个IP地址,给多个设备上网
在这里插入图片描述
用路由器对外网的端口号,来代表内网一个IP的端口
外网打算访问内网——NAT穿透的方法:

  1. 静态配置:写好端口映射关系
  2. UPNP:主机查询NAT表项,并在端口没有被占用的时候去添加
  3. 中继:内网(我)主动和外网连接,其他人借助中继,来把消息告诉我

在这里插入图片描述

IPV6协议

IPV4只是美国国防部的实验网,一个项目,没想到有这么多人用
在这里插入图片描述

  • IPV4的缺点:
  1. 每次转发都要改变TTL,因此也改变了checksum
  2. 分片的时候每个分片都要改头部,加重了路由器的负担
  • IPV6的变化:
  1. 头部长度40字节
  2. 传输过程中不允许分片:分组过大,直接抛弃,给源主机发送ICMPV6
  3. IP地址从IPV4的32位变成128位:可以为地球表面每一平方米,分配一千多万个地址

在这里插入图片描述
在这里插入图片描述

流标签:同一个IP发出的同一个会话的数据,可以打成同一个流。试图让网络对同一个IP同一个流的数据,做同样的处理。
next header:就是V4的upper layer,可以是TCP可以是UDP,还可以是一个Option,Option里面包含另一个next header,length,value;
hop limit:就是V4的TTL
checksum:被移除掉

IPV6网络目前还是一个个小岛,两个不同的IPV6网络之间要通信,需要在外面封装一层IPV4,然后通过IPV4发到另一个网络的IPV4接入点。

ICMP协议

除了IP协议,网络层还有ICMP协议
报错、测网络通不通
ping应用

SDN

在这里插入图片描述
SDN通过南向接口把流表发送给路由器中的每个控制代理
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

前面的跳数都是网络号起作用,只有最后一跳是主机号起作用

网络层 (控制平面)

路由选择算法

在这里插入图片描述
找到子网到子网的路径就可以了
路由就是找到从源子网到目标子网的路径
指标:跳数、延迟、花费的价格
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全局:有上帝视角,需要每个节点知道全局的网络拓扑信息,边的代价
局部:问每个邻居,到目标地址的代价

link state 链路状态算法

使用的就是迪杰斯特拉最短路径算法
获取全局拓扑的方法
把自己的链路状态分组,发给所有邻居,让邻居再泛洪出去,传到全网。

发现邻居的方法:向所有端口发送打招呼分组,拥有相同协议的邻居会回复。

如何有限泛洪:TTL(生命周期),版本号
可靠性:发送链路状态分组的一方如果一直没收到接收方的确认,就一直发。

在这里插入图片描述
Dijkstra算法:每个节点有二元组,到这里的代价和前驱节点

距离矢量路由选择

和邻居交换距离矢量,测每个邻居到目标的代价,找到一个最小值。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两种算法的比较

在这里插入图片描述
距离矢量只和邻居传输
链路状态要泛洪
距离矢量胜出

距离矢量会被一个欺骗的路由器搞崩
链路状态鲁棒
链路状态胜出

自治系统内部的路由选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链路层

相邻两点的数据传输以帧为单位的数据。

工作设备:交换机

解决:一个节点怎么发给子网内部的另一个节点

在这里插入图片描述

多点连接的方式

  • 同轴电缆
    在这里插入图片描述
    发送之后,信号充满整个链路,每一个链路上的节点都可以收到。

  • 交换机
    在这里插入图片描述
    在这里插入图片描述
    家里到ISP是点对点,
    家里局域网是多点连接

多点连接缺点:信道里有信息的时候,在中间的某个位置开始发,可能会把之前发送的上游正在传输的信息清掉(也叫碰撞)

IP层面相邻,可能链路层不相邻,中间隔着好多个交换机。

IEEE 802.11协议 出错率达到10-5、10-6

前向纠错:例如汉明码,采用一些校验位可以纠正错误。
在这里插入图片描述
网卡、网络适配器、网络接口卡、界面卡、NIC 都是网卡的意思
写死了自己的MAC地址

网卡把数据交给网络层(IP、IPX、苹果的AppleTalk)

在这里插入图片描述

CRC校验

在这里插入图片描述
在这里插入图片描述
用二进制位表示r次方多项式,双方约定的
然后给数据后面加上r位的冗余位,使得可以正好被生成多项式整除
在这里插入图片描述
这个符号是模二加
在这里插入图片描述
R是D*2r/G的余数

在这里插入图片描述
在这里插入图片描述

多点访问协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MAC协议

在这里插入图片描述

信道划分

在这里插入图片描述
时分方法:TDMA
在这里插入图片描述
频分方法:FDMA
在这里插入图片描述
码分方法:CDMA(第三代通讯技术,已过时)

随机访问

在这里插入图片描述
CSMA/CD是现在802.3以太网使用的:载波侦听、多路访问、冲突检测

CSMA/CA是现在802.11无线局域网使用的:载波侦听、多路访问、冲突避免

时隙ALOHA

在这里插入图片描述
把时间分为一个个等长的时隙

所有节点发送的帧都是等长的,能够持续一个时隙。

发送时可以检测到通道里的幅度,判断出有没有冲突。

如果有冲突,在下一个时隙,以概率P发送

成功发送的概率是 (我发送,其他N-1个人都不发送)
在这里插入图片描述
整个信道的利用率
在这里插入图片描述
计算导数,得到最值,
p=1/N
f(p)=36.7%

纯ALOHA

在这里插入图片描述
有数据帧形成了,立即发送
在这里插入图片描述
在这里插入图片描述
18.3%

提升效率的方法:发送之前监听网络中是否有人在发

但是不能避免冲突

局域网中最远两个节点距离越远,传播延迟越大,产生冲突的可能性也越大

CSMA/CD

在这里插入图片描述
CSMA指的是事前侦听
CD是边说边听

检测到冲突,立即停止当前帧的发送(实际上会持续一段时间再停止发送,因为检测冲突需要时间)

在这里插入图片描述
图里表达了,t0时刻从第二个主机发到第四个主机,t1时刻从第四个主机发向第二个主机,当第二个主机发现有冲突的时候隔了一段时间停止发送,当第四个主机发现有冲突的时候隔了一段时间停止发送。

在这里插入图片描述
发送强化冲突的原因:因为信号在信道中有衰减,可能被其他节点忽略掉了。发送强化冲突让信道中每一个节点都知道这里发生了冲突。

尝试重发:采用二进制指数退避算法
连续发生碰撞的次数k
在0~2k-1之间选一个值, (最大到1024)
如果k是1,那就在0~1之间选一个值,
如果是0立即发送
如果是1,等待r个单位*512位时

发送一个帧需要的时间叫帧时
发送一个位需要的时间叫位时

在这里插入图片描述

CSMA/CA

在这里插入图片描述
无线信号平方衰减
在这里插入图片描述
冲突检测失效:自己接收到自己发的信号最大。
冲突可能成功,不冲突也可能不成功。

在事前避免冲突,在发送前听信道,如果信道忙,就随机选一个值决定延迟多久发送。

在这里插入图片描述
确认帧的发送优先级比数据帧的发送优先级高,确认帧等待空闲时间比数据帧等待空闲时间短。比如:确认帧等5个时间空闲就可以发,数据帧等10个时间空闲才能发。

在这里插入图片描述

可选项
在这里插入图片描述
分为两种模式
基础设施模式
自组织模式

线缆接入网络

在这里插入图片描述
链路分为上行和下行。
下行只有一个用户CMTS
上行分成一个个时隙
有些时隙是竞争式的,有些是预约式的
竞争式时隙用于预约,
CMTS收到竞争式时隙的预约请求,会发送预约成功的信息,所有下行用户都能看到。

轮流协议

信道划分在高负载的时候效果好,低负载效果不好
随机访问在低负载的时候效果好,高负载效果不好

轮流协议在高负载低负载效果都好
在这里插入图片描述

轮询

在这里插入图片描述

令牌

在这里插入图片描述

MAC协议总结

在这里插入图片描述
MAC地址固定48位写死在网卡上
48位全1代表广播,局域网内全部收到

ARP协议

询问IP地址对应的MAC地址是什么
在这里插入图片描述
设备提供商要购买IEEE的MAC地址段

ARP协议在局域网内广播询问,给IP地址查MAC地址的对应关系

以太网

在这里插入图片描述
集线器:完全转发接收到的所有的信息给全部节点
交换机:存储转发,接收之后发送给特定端口(记录了连在每个网口的设备MAC地址,可以根据目标MAC地址找到对应的设备)

自学习交换表
源和目标MAC相同,不发
在这里插入图片描述

交换机解决了CSMA/CD模型,在高负载的弱点(碰撞),因为信道里只有一个主机在使用

在这里插入图片描述
前导码:7字节10101010和1字节10101011
网卡接收:

  1. 如果目标MAC和自己一样,就收
  2. 如果目标MAC全1,是广播地址,就收
  3. 网卡设置成混杂模式,监听网络数据包

在这里插入图片描述
有CRC校验

在这里插入图片描述

在这里插入图片描述

  1. 10Mbps 是一秒钟发送10M位
  2. 1位花费的时间就是0.1微秒

在这里插入图片描述

Base是基带

在这里插入图片描述
占两倍带宽
在这里插入图片描述
不取全1全0,错落有致

在这里插入图片描述
集线器内称为一个网段

VLANS

主机和主机直连,不通过路由器,也就没有网络层的网络交换设备

DC

在这里插入图片描述

PPP协议

链路层协议的第三种

物理层

光信号 电信号

在这里插入图片描述

网络边缘

在这里插入图片描述
在这里插入图片描述

网络核心

电路交换

在这里插入图片描述
资源独享,性能保障

在这里插入图片描述

分组交换

不再使用 频分、时分、波分
整个带宽发送
在这里插入图片描述
A要给B发送10个G,
要先分组,打成一个个包(packed)

包每到一个网络节点,先存下来,然后再转发,而不是立即发出去

如果到了网络节点直接转发,就是独占了线路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
统计多路复用是特殊的时分多路复用
在这里插入图片描述

虚电路要在网络层建立连接,每个节点路径上都有虚电路号标识

ISP

教育网是一种ISP网络

在这里插入图片描述
同一个区域可以有多个ISP,这些ISP互连需要IXP
不同区域的ISP互连,需要Regional ISP
在这里插入图片描述

分组交换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

处理延迟

目前达到微秒级,是专用CPU在处理
在这里插入图片描述

从A主机到B主机,每一跳都要花费这四个延迟

流量强度

在这里插入图片描述
I是流量强度
R是链路带宽 单位bps
L是每个分组的长度 单位bit/分组
a是单位时间内通过分组转发的数量 单位分组/s

La代表每秒钟需要通过链路转出的速度
R代表链路能转出的速度

流量强度在0-1之间,
0是比较轻载的时候,1是比较重载的时候

在这里插入图片描述
流量强度越趋近于1,排队延迟越趋近于无穷大

在这里插入图片描述
ICMP是Internet Control Message Protocol的缩写,它是一种网络层协议,用于网络设备之间进行诊断或控制。ICMP通常用于确定数据是否能够及时到达目的地,或者在IP操作中发生错误时生成响应。ICMP的一个常见应用是ping命令,它可以测试两个网络设备是否能够相互连接,也可以检测网络中的丢包和延迟 。

丢包怎么办?
分组因为溢出被丢弃的情况:

  1. 如果链路可靠,由上层节点重传。
  2. 如果链路不可靠,由源主机重传。
  3. 不重传

以太网协议对上层就是不可靠的,因为下层可靠了,就不再做得可靠
WIFI协议在数据链路层对上层是可靠的,因为下层不可靠,只能自己做的可靠

在这里插入图片描述

在这里插入图片描述
应用程序接口上面的函数就是原语
比如:socket API

需要握手的服务,就是面向连接的服务

在这里插入图片描述

数据单元

在这里插入图片描述

上层交给下层的数据单元叫SDU
ICI接口控制信息:其实就是本层加入的头部控制数据

上层传来的SDU加上本层的ICI,形成PDU

PDU交给下层,作为下层的SDU

一般上层对下层有 一对一,一对多,多对一 三种关系

应用层的PDU叫应用报文
传输层的PDU叫报文段
网络层的PDU叫分组,无连接的情况下叫数据报
链路层的PDU叫帧
物理层的PDU叫位或者其他的
在这里插入图片描述

五层模型(协议栈)

在这里插入图片描述

物理层

和链路层一起被封装在网卡中

链路层

发送端:把帧信号转化为物理bit信号,传输给物理层,
接收端:把物理层的bit信号,还原回帧

需要区分,哪些bit的组合是帧的开始,哪些是帧的结束

传输距离:从一个网卡到另一个网卡的传输(相邻两点传输)

有些链路层提供可靠服务:WIFI
有些链路层提供不可靠服务:网线

网络层

提供以分组为单位的传输

传输距离:端到端

重要的两个功能:转发、路由(找路)

传输层

提供从进程到进程的传输服务

借助socket机制,借助端口机制

另外,把网络层提供的可能不可靠的传输服务,变为可靠的服务

应用层

协议最多,有数千种,常见的几百种

七层模型

在这里插入图片描述
多出来的两层,一般由应用层自己做

表示层

内容的编码

会话层

会话管理

在这里插入图片描述

交换机(多个网卡,链路层和物理层设备)

从源Mac地址接收到数据,查询帧中的目标Mac地址,传出到目标Mac地址的网卡。
(好像是用多个网卡接收数据,多个网卡发出数据,集中在设备内处理)
解封装两层,再封装两层

路由器(多个网卡,网络层、链路层和物理层设备)

从不同的网卡,接收到不同的数据
取出来帧上层的分组数据,去查路由表
再通过网卡发出去
解封装三层,再封装三层

互联网早期

单种网卡标准

网络互联标准混乱
连IBM自己生产的不同型号的网卡之间都不能互连

公司内部标准

然后各个公司定义了自己内部的标准,使得自己公司的网卡之间可以互连

世界标准

OSI提出的网络互连标准:开放系统互连标准 (七层)
把原有的网络设备砸掉,重新购买符合OSI的设备

在这里插入图片描述
Cerf 和 Kahn 定义了到网络层的IP结构 (互联网之父)
这种结构具有包容性,兼容了以前的互联网设备,提供不可靠的服务

Unix免费开放TCPIP协议栈给公众使用

网络安全

特征

私密性:不明文
可认证:知道对方身份
报文完整性:不被篡改
可用的:服务器访问控制

网络攻击行为

在这里插入图片描述

对称加密

DES

已被破解

AES

1秒破解DES 需要 149万亿年破解AES

块密码

分块加密

密码块链

密钥依赖于前面发送的信息

非对称加密

公钥

下载网站的证书

证书里包含公钥

私钥

用户用公钥把内容加密,发送给网站服务器

网站自己有私钥,可以解密
链路上的其他节点没有私钥,不能解密

RSA算法

最著名的公开密钥算法
在这里插入图片描述
在这里插入图片描述
随机2个大质数p,q(5,7)
n=pq (35)
z=(p-1)(q-1) (24)
选择一个与z互素的数 e=5
选择d=29 使得ed-1能被z整除

在这里插入图片描述
加密的公钥是 n,e
解密的私钥是 n,d

在这里插入图片描述
d写错了 应该是29
算法关键公式

在这里插入图片描述
m是原文,c是原文加密后的密文,n和d是私钥

在这里插入图片描述
RSA算法的计算复杂度主要在解密,加密容易解密难,
但是RSA加密需要花费的时间达到对称加密的100倍~1000倍

RSA算法的推导

原理是数论中的大数质数的定理
在这里插入图片描述
在这里插入图片描述
me 可以拆成 me mod n + n的任意倍数
所以(me )d 可以等价于 (me mod n + n的任意倍数)d

( m e ) d = ( m e   m o d   n + n 的任意倍数 ) d (m^e )^d = (m^e\ mod\ n + n的任意倍数)^d (me)d=(me mod n+n的任意倍数)d

数论内容

根据组合数的方法和模运算的分配律,可以把d个乘数里的me mod n 和 n的任意倍数 依次组合起来,含n的任意倍数的项都会得0,最后得到
( m e   m o d   n + n 的任意倍数 ) d   m o d   n = ( m e   m o d   n ) d (m^e\ mod\ n + n的任意倍数)^d\ mod\ n = (m^e\ mod\ n)^d (me mod n+n的任意倍数)d mod n=(me mod n)d

所以结论是
( m e ) d = ( m e   m o d   n ) d (m^e )^d = (m^e\ mod\ n)^d (me)d=(me mod n)d

由于m比n小,所以m mod n = m

RSA的其他特性

在这里插入图片描述
数字签名特性

攻击者创建的分组

使用socket编程创建的传输层TCP UDP分组
甚至IP分组

防止重放攻击

对称加密:使用挑战码
接收方一开始发送一串明文,让发送方加密发回

在这里插入图片描述
非对称用自己的私钥加密挑战码

数字签名

报文计算出报文摘要,再用自己的私钥进行加密,得到数字签名
在这里插入图片描述
SHA-256:256比特长度

可信赖中介

用于交换密钥

在对称加密中是KDC
在非对称加密中是CA

证书:CA用私钥签署,一个人和他的公钥的捆绑关系

用CA的公钥可以验证这个证书

安全电子邮件 (应用层的安全性)

在这里插入图片描述

  1. 计算报文摘要
  2. 用自己的私钥加密报文摘要(得到数字签名)
  3. 报文和数字签名一起用对称加密的密钥加密
  4. 把对称加密的密钥用对方的公钥加密后一起发送

在这里插入图片描述
PGP是非常安全的电子邮件加密标准

SSL (传输层的安全性)

在这里插入图片描述
传输层(或传输层之上)的协议
在TCP之上
安全套接字层

是马斯克(造火箭那个)和商业伙伴开发的
想学习的话可以看SSL的RFC

IPsec(IP层的安全性)

在这里插入图片描述

AH协议

在这里插入图片描述

ESP协议

在这里插入图片描述

802.11 WEP (链路层的安全性)

key和要传输的内容做异或,得到密文

防火墙(网络安全设备)

网络中的设备通过路由器接入ISP网络,如果中间没有防火墙,等于上战场不带头盔。

在这里插入图片描述
只有两种动作:放行和阻止

防止DOS攻击(拒绝服务攻击)、DDOS攻击(分布式的拒绝服务攻击)

一般公司组网是:第一层防火墙、公司Web/FTP服务器、第二层防火墙、内网

以上是无状态分组过滤器

有状态分组过滤器:检查内外网设备连接状态

在这里插入图片描述

应用程序网关

在应用层,可以深度的审查报文内容

入侵检测系统 IDS

分析报文内容
如果发现有害内容,报警给网络管理员

在这里插入图片描述

一些连接问题(非学术)

python中的连接问题,SSL握手失败
clash的 setting 中打开 special protocol

考试强化内容

带宽

链路带宽是指发送端一秒钟能发送bit的数量
微观来看,是发送端发送bit的频率,
一秒钟发送10个bit,就是0.1秒发送一次bit

在这里插入图片描述

时延

在这里插入图片描述

分层协议架构

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AiTanXiing/article/details/130468046