计算机网络(学习笔记)

计算机网络(学习笔记)

看B站-中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 学习笔记

概述

1.1什么是互联网

  • 构建的角度来看
    是由节点还有协议组成。
    -----节点:分成主机节点(手机,PC…)和数据节点(路由器、交换机)。
    -----边 :接入链路(连接主机的就叫接入链路)和骨干链路(数据节点之间连接的叫骨干链路)
    -----协议:两个或多个应用通信时遵守的标准,例如、字段、时序、语义、等。。。。
  • 服务角度来看
    1.分布式的应用
    2.为分布式的应用提供通行服务的基础设置
    分布式应用是网络存在的理由。(如果没有这些分布式应用互联网就没意义)
  • 结构系统角度来看
    1.边缘系统:(主机、应用程序)
    2.核心系统: 互联的路由器
    3.接入网:有线或无线通信链路
    在这里插入图片描述

1.2 网络边缘

边缘部分(主机、应用程序):端系统之间的通信可以分为两种方式——客户/服务器方式(CS方式,例如浏览器和服务器,获取资源的方式都是从服务器中获取),对等方式(P2P方式peer to peer,迅雷就是采用P2P模式,获取资源可以从不同的地方获取)

1.3 网络核心

线路交换:类似于电话线的连接方式例如这条线路支持的带宽是1.56Mbps,会采用分片的方式分成24片,每片的贷款就只有56kbps.先建立连接,再传输数据,在期间这条线路是独享的,关闭连接后再释放。综上:线路交换 好处:线路独享,但支持用户数量固定,资源存在浪费。
分组交换:占用这条线路的所有带宽。例如:A主机发送一个10M的文件到B主机,在这期间,当A主机通过接入网到路由器,路由器会将数据存储下来之后,再发送到另外一个路由器,另外一个路由同理,在这期间路由发送会有排队的情况,先来的先发送,后来的后发送,如果路由器的队列满了以后,会存在丢数据的情况。综上:分组交换好处是资源共享,坏处是排队延迟,和数据丢失。
计算机网络不适合采用线路交换
1.连接建立时间长
2.计算机之间的通信有突发性,如果使用线路交换,会浪费很多资源。(连接之后是不能被其它所使用)
3.可靠性不高?

总结
通信网络
—电路交换
--------FDM 平分
--------TDM 时分
—分组交换
--------数据报网络 (发送数据携带目标主机的ip,交换机通过ip查询路由表进行转发,不用维护路由器之间的线路)
--------虚电路网络(会建立起一个连接,连接建立完成之后,发送数据会根据标记进行转发,每个路由器之间需要维护线路)

在这里插入图片描述

1.4 接入网和物理媒体

大致介绍了住户的网络边缘如何接入到网络核心的。

1.5 Internet结构和ISP

ISP
ISP(Internet Service Provider) 因特网服务提供方(电信,联通,移动)
IXP(Internet Exchange Provider) 因特网交换提供方(ISP之间数据交换)
Regional I S P(Regional Internet Service Provider) 区域因特网服务提供方 (各个区域的ISP,重庆移动、北京移动都会接入到中国移动)
ICP(Internet Context Provider) 因特网内容提供方(百度 Google)
== 网络的网络 ==
在这里插入图片描述
ISP之间的连接
在这里插入图片描述

1.6分组延迟、丢失和吞吐量

  • 节点处理延迟

检查bit级差错
检查分组首部和决定将分组导向出处
通常是微妙数量级或更少

  • 排队延迟

在输出链路上等待传输的时间
依赖于路由器的拥塞程度
取决于拥塞程度

  • 传输延迟

R=链路的带宽(bps)
L=分组长度(bits)
将分组发送到链路上的时间=L/R
对低速率的链路而言很大,通常为微妙级到毫秒级

  • 传播延迟

d=物理链路的长度
s=在媒体上传播的速度
传播延迟就=d/s
几微妙到几百毫秒

以上是一段所需的时间,节点处理延迟+排队延迟+传输延迟+传播延迟。

  • 丢失情况

1.由上一个节点重新补发数据
2.由源主机补发数据
3.如果使用UTP不补发数据

  • 吞吐量

A主机发送到B主机有效的数据,取最小的一个值,作为吞吐量。

1.7协议层次和服务模型

  • 协议层次

一个复杂的网络系统是通过分层来实现的,每层实现自己特有的功能,为上层提供更好的服务。对等层的通信是调用需要遵守协议,并下层总和提供的服务实现,通过自身逻辑处理,像上层提供更好的服务。

  • 服务和服务访问点

服务:低层实体向上层实体提供它们之间的通信能力
原语:上层使用下层服务的形式,高层使用低层提供的服务,以及底层向高层提供服务都是通过服务访问原语来进行交互的–形式。例如:应用层调用传输层,调用的方式是使用socket Api,那这个socket Api就是原语
服务访问点SAP(services access point):上层使用下层提供的服务通过层间的接口——地点:
一个服务实体可以为多个应用提供服务,服务访问点用来区域谁在使用。
例子:邮箱
地址(address):下层的一个实体支撑着上层的多个实体,SAP有标志不同上层实体的作用
可以有不同的实现,队列
例子:传输层的SAP,端口(port)‘

  • 服务和协议的差别

服务:底层实体向上层实体提供他们之间的通信能力,是通过原语来操作的,方向是垂直
协议:对等层实体质检在相互通信的过程中,需要遵守的规则。

  • 服务和协议的联系

本层协议的实体要靠下层提供的服务来实现
本层实体通过协议为上层提供更高级的服务

  • Internet 协议栈

应用层:最顶层,达到app的功能,为人类提供服务。(例如:查询订单)
传输层:借助于网络层提供的端到端的服务,有两个作用:1将不可靠的信号变可靠,2.网络层只是主机到主机,还没有进程到进程,所以这层通过端口的方式实现进程到进程之间的通信。TCP/UDP
网络层:将源主机的分组传到目标主机(端到端)主要是转发和路由,但这层是不可靠的通信。转发是从哪个端口进到哪个端口出,路由是找到下一个节点.IP协议,路由协议
链路层:上层的分组变更为帧进行传输(帧头帧尾,中间这部分就是数据),提供相邻的两点之间的帧传输(相邻的两个路由器)
物理层:相邻两点之间将数字信号转换成物理信号发送,将接收到的物理信号转换成数字信号
在这里插入图片描述

1.8历史

这节主要讲了一下网络的发展史,当听故事了,没做笔记。

1.9总结

在这里插入图片描述

2.应用概述

在这里插入图片描述

2.1 应用层原理

  • 客户-服务器(c/s)体系架构

    • 服务器
      一直运行
      固定的ip地址和周知的端口号(约定)
      扩展性:数据中心进行扩展,扩展性差

    • 客户端
      主动与服务器通行
      与互联网有间歇性的连接
      可能是动态IP地址
      不直接与其它客户端通行

    性能达到一定阈值的时候,呈断崖式的下跌。

  • 对等体(P2P)体系架构
    (几乎)没有服务器在一直运行
    任意端系统质检可以仅限通行
    每一个节点及是客户端又是服务器(当添加了新的Peer节点带来新的服务能,同时也带来新的服务请求)
    参与的主机间歇性连接且可以改变IP地址
    例如:Gnutella,迅雷
    在这里插入图片描述

  • c/s和P2P体系架构的混合体
    在这里插入图片描述

  • 进程通行
    在这里插入图片描述

  • 分布式进程通行需要解决的问题
    在这里插入图片描述

    • 问题1:对进程进行编址(addressing)
      在这里插入图片描述
      目标地址,目标端口,使用的协议

    • 问题2:传承提供的服务-需要穿过层间的信息
      在这里插入图片描述
      需要发送方的ip地址+端口,接收方的ip地址+端口,传输的报文(SDU),但每次传输都提供这些内容非常麻烦,下面就是简化和管理

    • 问题2:传输层提供的服务-层间信息的代表
      在这里插入图片描述
      个人理解(tcpSocket = new Socket(“源IP”,“源端口”,“目标IP”,“目标端口”)),tcpSocket 对象就是这个句柄,下次调用就用这个对象(句柄)就可以了,不用再提供"源IP",“源端口”,“目标IP”,“目标端口”
      在这里插入图片描述
      在这里插入图片描述
      上面提到的这个句柄就是这socket值,就是一个表项,通过这个值,就可以找到源Ip端口,和目标ip和端口,以及状态
      在这里插入图片描述
      不同的socket代表不同的会话关系,在上图中,s:222222代表与s:111111会话 s:222223代表与s:333333的会话

    • 问题2:传输层提供的服务-层间信息代码
      在这里插入图片描述
      UDP的socket中保存的之后自身的ip和端口,因为UDP是无连接,但是在发送的时候仍提供对方的IP和端口。用java的方式理解就是:udpSocket =new(“源IP”,“源端口”),发送的时候就是:udpSocket.send(“目标ip”,“目标端口”,“发送的内容”)
      在这里插入图片描述

在这里插入图片描述
udp的socket只要自己的ip和端口,状态也没有,因为是无状态连接。udp代表两个端的一端

  • 问题3:如何使用传输层提供的服务实现应用
    在这里插入图片描述
    在这里插入图片描述
  • 引用需要传输层提供什么样的服务
    在这里插入图片描述
    在这里插入图片描述
  • UDP存在的理由
    只靠ip协议只能定位到目标主机,但不能定位到目标进程,需要端口来确定。
    在这里插入图片描述
  • 安全性
    在这里插入图片描述
    例如:https 就是运行在SSL层之上的应用。

2.2 Web and HTTP

  • HTTP概况
    在这里插入图片描述
    在这里插入图片描述
    http是超文本传输协议,默认端口号为80,http是无状态的连接

  • Http1.0和Http1.1 版本差别
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在HTTP1.0的时候,一次请求完之后会关闭这个连接,下次请求需要再次建立连接

    • 响应模型
      在这里插入图片描述
  • 持久的HTTP
    在这里插入图片描述

    • 非流水方式的持久HTTP
      如:向同一台服务器发送5个请求,在建立连接之后,每次发送的请求都需要等待上一个请求响应回来之后才可以发送后续的请求
    • 流水方式的持久HTTP
      如:想同一台服务器发送5个请求,在建立连接之后,不用等待这次请求响应回来再发送下一个请求,而是发送完一个请求之后,可以马上发送下一个请求
  • HTTP请求报文
    在这里插入图片描述

2.3FTP

这节主要介绍了FTP协议
在这里插入图片描述
在这里插入图片描述
相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个 Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。
FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口)。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了

  • 主动模式
    当控制连接连建立之后,客户端会开一个端口,由服务器来进行连接客户端,通过这个端口进行数据传输。
  • 被动模式
    第一个端口连接服务器的 21 端口,提交 PASV (被动)命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
    上诉介绍来自于:https://blog.csdn.net/zhubao124/article/details/81662775?ops_request_misc=&request_id=&biz_id=102&utm_term=ftp%E5%8D%8F%E8%AE%AE&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-81662775.nonecase&spm=1018.2226.3001.4187

2.4EMail协议

在这里插入图片描述

在这里插入图片描述
我们发送邮件到这个邮件服务器是采用SMTP协议,邮件服务器发送对目标邮件服务器,也是采用SMTP协议,当对方查看邮件的时候是采用POP3或者HTTP协议都可以查看邮件。

2.5DNS

DNS应用是给应用所使用的应用
在这里插入图片描述

  • DNS系统需要解决的问题
    在这里插入图片描述

    • 历史
      在这里插入图片描述
    • DNS的总体思路和主要功能
      在这里插入图片描述
      有两个名称,第一个是别名也就是我们常常使用的例如"www.baidu.com",第二个名称用于管理的规范名称,标注在那个位置,例如:中国.北京.XX机房.www.baidu.com。所以dns服务器需要提供别名来找到规范名称,再转成IP
      负载均衡,在一个域名下可能存在多个服务器,可以通过dns服务器进行负载均衡的作用,例如通过请求者的ip分配到最近的一个服务器ip地址上去。
    • 问题1:DNS名字空间
      在这里插入图片描述
      在这里插入图片描述
      例如:www.baidu.com,百度的域名直接是挂到com下,www表示的是主机,com顶级域下面挂了一个baidu的二级域
      在这里插入图片描述
    • 问题2:解析问题-名字服务器
      存到类似数据库中一样,有ND TTL Class Value Type 这些字段,这里ND就是域名,Value对应的就是IP地址,下面对type不同类型值对应的也不同有做解释。
      在这里插入图片描述在这里插入图片描述
      用来维护顶级域名,指向二级域名的地址
      在这里插入图片描述
    • 大致工作过程
      在这里插入图片描述
      采用迭代查询的方式
      在这里插入图片描述
      例如输入www.ustt.edu.cn,先本地网络的DNS服务器先进行解析,如果没有,则找根DNS服务器(.cn),返回一个二级服务器域名地址(edu),再从二级域名中获取,往返这样,直到找到ustt域名对应的DNS服务器,返回这个主机的IP地址,此时这个本地的DNS服务器也会缓存这个域名和ip的映射。
      缓存是为了效率,删除是为了一致性
  • DNS协议、报文
    在这里插入图片描述
    重点是这个id,当本地NDS收到一个解析查询的时候会携带一个id,本地没有则会请求根DNS,在这个时候本地服务器收到其它解析工作时,又可以工作。请求别的DNS服务器回来后,通过Id进行比对提交给对应的解析请求。

  • 提供性能:缓存
    在这里插入图片描述

  • 问题3:维护问题,新增一个域
    在这里插入图片描述

  • DNS攻击
    在这里插入图片描述

2.6P2P应用

  • P2P架构
    在这里插入图片描述
    • 非结构化P2P
      在这里插入图片描述
      每个节点启动的时候向目录管理中心进行注册,汇报自己的ip和内容。当某个客户端需要获取某个资源的时候,就从目录管理中查询,目录管理中心返回有该资源的客户端,客户端就可以从对应的目标客户端获取数据。此时目标客户端就充当的是服务器。

      存在的问题
      单点故障,性能瓶颈,侵犯版权
    • 结构化的P2P
      每个perr加入进来之后,将ip进行hash运算

2.7CDN

在这里插入图片描述
采用CDN来解决上诉的问题

  • 多媒体流化服务:DASH
    在这里插入图片描述
    在这里插入图片描述
    视频播放的方式边下载变播放,而不是全部下载完在播放。一部视频被切分成不同的块,每一个部块又分成不同的解析度。用户播放前,会先下载一个告示文件,告示文件中描述了视频不同块的url和解析度,解析告示文件下载对应的视频块进行缓存。
    • 存在的一些问题
      在这里插入图片描述
      服务器本身优化是足够的,但是无法保证链路上存在的问题,且资源重复下载的一个问题(两个人都在同时下载这一片段)。
  • 解决:内容分发
    在这里插入图片描述
    第一种方式:将内容部署到较底层的ISP中,这样离用户近节点少,但是管理起来比较困难。
    第二种方式:部署在少数(10个左右)的关键位置,如将服务器安装在数据中心的附件,数据中心离底层的ISP也比较近,这样也可以起到较好的效果。
    在这里插入图片描述
    视频上线之前,先购买CDN的服务,将资源部署到各个节点上。当用户点播的时候,先从源服务器上获取告示文件,通过告示文件解析出得到不同清晰度的视频和视频的url地址,用户播放时终端会从最近的CDN节点上获取资源,提供一个较好的服务。

  • CDN的一些问题
    在这里插入图片描述
    这些问题是研究生学的

  • 示例
    在这里插入图片描述

2.8TCP编程

  • Socket编程
    在这里插入图片描述
    在这里插入图片描述

  • 数据结构体
    sockaddr_in
    在这里插入图片描述
    用来表示自己身的ip和端口,ip通过下面的hostent获得
    hostent
    主要作用代用域名解析函数时的参数返回后,将IP地址拷贝到sockaddr_in的IP地址部分
    在这里插入图片描述
    在这里插入图片描述

    Socket提供了2中服务
    TCP:可靠的字节流服务
    在这里插入图片描述
    服务端

//1.服务端先创建一个welcome socket
welcomeSocket=Socket(...); //...表示是建立TCP还UDP
//2.将welcomesocket进行ip和端口的绑定 sad就是本机的ip和端口,就是上面所说的sockaddr_in
bind(welcome,&sad);
//3调用连接socket,等待客户端来进行连接后返回一个连接成功的socket对象,如果没有则阻塞在这里。
connectionSocket=accept(welcomesocket,&cad);
//7.收到客户端发送的数据,进行大致处理
read(connectionSocket);
//8.返回处理后的结果
write(connectionSocket,"发送内容...");

客户端

//4.客户端创建socket 参数是tcp还是udp
ClientSocket=Socket(...) 
//客户端会有隐式的bind cad就是本机的ip和端口这些,就是上面所说的sockaddr_in
bind(ClientSocket,&cad);
//5.调用connect去连接服务端,这里的sad就是服务端的ip和端口
connect(Clientsocket,&sad);
//6.连接建立之后,可以发送数据调用write
write(ClientSocket,"发送内容...");
//9.接收响应内容
read(ClientSocket);
//10.关闭连接
close(ClientSocket);

2.9UDP编程

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

2.10小结

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

3.传输层服务

3.1概述和目标

在这里插入图片描述

  • 概述
    传输层提供的是进程到进程之间的通信,网络层是主机到主机的通信。
    在传输层可以对IP层提供的服务进行进一步的加强,但是有些是不能加强的。
    例如:无法将网络带宽变大,无法扩大吞吐量。
    在这里插入图片描述
    在这里插入图片描述
    • TCP提供:
      多路复用、解复用
      流量控制
      拥塞控制
      建立连接

    • UDP提供:
      多路复用、解复用
      没有为尽力而为的IP服务添加更多的其它额外的服务,只是进程到进程

    • 都不提供的服务:
      延迟保证
      带宽保证

3.2多路复用/解复用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
TCP:应用程序发送消息的时候,需要携带socket和消息内容,这里的socket里面已经包含了自己身的ip端口,目标的ip端口。到传输层,将数据封装成段,头部是目标端口和自身端口,传输层在将内容发送给网络层,网络层在封装头部包含了目标IP和源IP,这样就可以通过IP发送给目标主机。当目标主机收到后,在网络层将body部分取出,此时的body就是目标端口和源端口和报文,传输层通过IP和端口就可以找到哪一个应用进程了,从而将报文发送给它。

UDP:应用程序像传输层提供:消息、socekt、cad,socket包含了自己的ip和端口,cad就是目标的ip和端口,(如果忘了,看上面的2.8TCP编程),将整个数据报发送给目标主机,目标主机就可以通过端口来进行对应的进程,将数据发送给它.

  • UDP例子
    在这里插入图片描述
  • TCP例子
    在这里插入图片描述

3.3无连接传输:UDP

在这里插入图片描述
在这里插入图片描述
应用程序提交数据有多快,发送得就有多快,UDP不用考虑网络阻塞,和对方接收情况。

  • UDP校验
    在这里插入图片描述

3.4可靠数据传输原理

在这里插入图片描述
在传输层下面所提供的服务不是可靠的, 如何通过本层将下面不可靠的服务变成可靠,提供给上层可靠的服务

  • 面临的问题
    在这里插入图片描述
    • 逐步处理的方式来解决
      在这里插入图片描述

    • Rdt1.0管道是可靠的服务
      在这里插入图片描述
      当管道是可靠的,发送方就需要接收上层数据、封装数据、发送数据,接收方就需要解封装,交付数据

    • Rdt2.0就有比特的差错的信道
      在这里插入图片描述
      处理办法
      发送方:
      ​ 1.等待上层调用:
      2.收到上层调用:备份数据,打包数据,发送数据,checksum加密
      3.等待响应结果:如果是ACK 状态置换为等待上层调用,如果是NCK,则重复2,3步骤
      接收方:
      1.等待接收数据:
      2.收到数据:checksum解密
      3.验证通过:发送ACK
      4.验证不通过:发送NCK

    • Rdt2.0的缺陷和处理办法Rdt2.1
      如果在接收方返回的这个ACK/NCK出错了,发送方这边无法解析,照成发送方不知所措

      解决
      发送方:
      ​ 1.等待上层调用:
      2.收到上层调用:备份数据,打包数据加上编号,发送数据,checksum加密
      3.等待响应结果:如果是ACK 状态置换为等待上层调用,如果是NCK,则重复2,3步骤
      4.如果返回的ACK/NCK无法识别,则再次发送之前的数据包
      接收方:
      1.等待接收数据:
      2.收到数据:checksum解密,如果数据包的编号和之前的编号一致,则进行丢弃,也会返回ACK/NCK
      3.验证通过:发送ACK
      4.验证不通过:发送NCK

      在这里插入图片描述

    • 2.1Rdt2.1的运行
      在这里插入图片描述

      • Rdt2.2无NAK
        在之前2.1存在一个问题,如果一次发送多个报文,这会产生大量的ack和nak,在接收方返回的ack/nak中也无法确认是否有确认的确认,智能通过后续的数据编号来判断。由此出现了Rdt2.2
        在这里插入图片描述
        在这里插入图片描述
        在原来的基础之前吧nck取消了,取而代之的是ack+编号,如果发送的是P1返回的也是ACK1,很好没问题继续发送后续内容。如果发送的P1返回的确实ACK0,那说明出现了问题,则重发。如果ack出错,与rdt2.1相同
        发送方:
        ​ 状态1.等待上层调用:
        状态2.收到上层调用:备份数据,打包数据加上编号,发送数据,checksum加密
        状态3.等待响应结果:如果是ACK+编号与发送的编号相同重新回到"状态2",不相同则重复状态2.3
        状态4.如果返回的ACK/NCK无法识别,则再次发送之前的数据包
        接收方:
        1.等待接收数据:
        2.收到数据:checksum解密,如果数据包的编号和之前的编号一致,则进行丢弃,也会返回ACK+编号
        3.验证通过:发送ACK+编号
        4.验证不通过:发送ACK+上一个编号
    • Rdt3.0信号有数据丢失
      假设一种情况,如果发送方发出的消息丢失了,或者接受方返回的ack丢失了如何处理。
      在这里插入图片描述
      引入一个超时重传的机制
      发送方:
      ​ 状态1.等待上层调用:
      状态2.收到上层调用:备份数据,打包数据加上编号,发送数据,checksum加密,开始超时重传
      状态3.等待响应结果:如果是ACK+编号与发送的编号相同重新回到"状态2",不相同则重复状态2.3,如果时间超时了还没有接收到返回的ACK,则再次重复状态2.3。
      状态4.如果返回的ACK/NCK无法识别,则再次发送之前的数据包
      接收方:
      1.等待接收数据:
      2.收到数据:checksum解密,如果数据包的编号和之前的编号一致,则进行丢弃,也会返回ACK+编号
      3.验证通过:发送ACK+编号
      4.验证不通过:发送ACK+上一个编号

    • Rdt3.0的性能
      在这里插入图片描述
      在传输中:1KB=1000X8bits,L=1KB R=10Gbps,发送一个KB数据需要花费:1000*8/10^9=0.000008/秒,就等于8微秒
      在这里插入图片描述

  • 流水线协议
    rdt3.0存在一个问题,就是利用率不高,一次发送一个,等待会来之后再次发送。处理这个问题采用流水线协议
    在这里插入图片描述
    • 先了解缓冲区

在这里插入图片描述
在这里插入图片描述
发送一个数据后,存到缓冲区,用户重发。收到方的缓冲区用来收到内容后,放到缓冲区提交给上层应用。

  • 发送窗口
    是指已经发送出去,但是没有得到确认的区域是发送窗口,发送窗口是发送缓冲区的一部分或全部
    在这里插入图片描述
    在这里插入图片描述
    例子:发送缓存区的大小是0-4,最开始发送缓冲区还没有已发送的数据,此时,滑动窗口的前沿和后沿是贴在一起的,当发送方发送了0号数据的时候,滑动窗口的前沿向前移动到1号数据,依次类推直到4号数据。如果0号数据收到之后,滑动窗口的后延向前一格到1号数据,整个缓冲区的就是从1-5号数据这么大,这时候的5号数据是空闲的可以接收应用发送的数据,进行发送。
  • 接收方
    在这里插入图片描述
    在这里插入图片描述
    累计确认:接收方窗口只能接收1个数据的时候,发送连续收到的最大的分组确认,因为在之前的数据已经是接收确认过了,所以是累计确认。

    非累计确认:接收窗口可以接收多个数据的时候,因为不确认之前的分组是否有收到过,所以是非累计确认。

    例子:
    在这里插入图片描述
  • 异常情况
    在这里插入图片描述
    例子:发送方先发送了0号数据,再发送了1号数据,但是0号数据被丢失了1号数据没有丢失。接收方等待接收的0号数据,但收到了1号数据,此时会丢弃1号数据,窗口不动。发送方这里由于超时机制,会把0号数据和1号数据都发送一遍,接收方收到了0号数据,返回ACK0,接收方窗口的后沿和发送缓冲区后沿都向前滑动。

在这里插入图片描述

例子:发送方发送了0,1,2号数据,但是0号数据丢失了,在接收方中,只收到了1,2号数据并返回了ACK,0号数据没有收到。当0号数据的超时后,会重新发送0号数据,1,2号数据不会进行重发。当接收方收到0号数据之后,接收缓冲区和滑动窗口整体向前滑动。

  • GBN和SR差别
    在这里插入图片描述
  • 总结
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • GBN和SR对别
    在这里插入图片描述

3.5面向连接的传输TCP

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
序号:是指的在body部分第一个字节流的编号,例如第一个mss的body中的需要是0,每个mss大小是1460,第二个mss头部的序号就是2920。编号的计算方式,第一个字节设置为X, x+mess*n =offset

确认号:从发送方角度来说,如果我收到了ACK155,那么说明,我发送的154及之前的数据都已经手打了,可以从155之后开始发送。

在这里插入图片描述

  • 可靠数据传输
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 快速重传
    如果接收到3个重复冗余的ack,此时超时定时器还没有到,也会发送这部分数据,避免超时定时器,过长,造成的延迟。

在这里插入图片描述

  • 流量控制
    在这里插入图片描述
    在这里插入图片描述

  • 在接收到数据之后,同时也会发送ack给发送方,在tcp协议中有resev window,里面标注了接收方缓冲区剩余大小。

  • 连接管理
    在这里插入图片描述

  • 两次握手带来的问题
    在这里插入图片描述

  • 三次握手
    在这里插入图片描述

  • TCP断开连接
    在这里插入图片描述
    在这里插入图片描述
    TCP的四次挥手是两边加起来的次数,例如 S–R断开连接时,S向R发送断开的请求,R返回同意断开。R又向S发送断开连接的请求,S返回统一断开连接。所以一共是4次。而且TCP的断开连接是不可靠的,有可能另一边维持的半连接状态。

3.6拥塞控制原理

在这里插入图片描述

主要是依靠的网络设备提供自身的资源情况,如果轻度拥塞返回NI=1如果重度拥塞=CI=1,主机则不在增加发送。
在这里插入图片描述
###3.7TCP拥塞控制
TCP是通过自身的判断来断定网络是否拥塞,不是采用网络设备提供的资源情况。
在这里插入图片描述

  • 如何检测拥塞
    在这里插入图片描述
    在这里插入图片描述
    超时:拥塞控制窗口设置成1个MSS大小,进入慢启动阶段,收到一个RTT,增加拥塞控制窗口大小增加原来的一倍。例如:收到超时收,拥塞控制窗口设置成1460byte,进入慢阶段,收到一个往返后窗口大小增加原来的一倍,也就是1460*2;

    3个重复ack:拥塞控制窗口设置成1个mss,收到一个RTT之后拥塞控制窗口+1,也就是1460+1460;

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

4.网络层(数据平面)

4.1导论

在这里插入图片描述

  • 目标
    在这里插入图片描述
  • 网络层的作用
    在这里插入图片描述
  • 转发和路由
    在这里插入图片描述
    转发:是从某个端口入合适的端口出,这是局部的在数据平面。
    路由:是通过ip查询路由表,通过对应网卡发送出去,是觉得主机到主机之间的路径,是全局的在控制平面。
    在这里插入图片描述
    在这里插入图片描述
    传统方式,每个路由器是单独查询路由表进行转发。如果升级的话所有的都要进行升级。
    在这里插入图片描述
    SDN方式:有路由控制器来通过不同的字段来决定干什么事,例如:转发,泛洪,拦截等,来了一个ip分到对应的路由器上进行处理。是可编程的

在这里插入图片描述

  • 网络层的服务模型
    best effort 尽力而为什么都保证不了。
    在这里插入图片描述

4.2路由器组成

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

  • 调度机制
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4.3 IP Internet Protocol

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

  • ip分片
    在这里插入图片描述
    在这里插入图片描述
    == 例子:一个4000字节的数据报传输,头部占用20个字节,3980的数据部分,MTU(最大传输单位):1500。第一节把上面的头部拷贝下来,数据部分就是3980-1480等于2500,偏移量是1480/8等于185,第二部分同样把头部保存来,2500-1480等于1020,偏移量是2960/8等于370;第三部分同理头部保存下来,剩下的1020就是数据部分。==
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    来了一个IP之后先根据IP与和Mask(子网掩码)进行&的操作,跟这个Destination进行匹配,找到NextHop找到下一条的接地,从对应的接口发出去。如果没有匹配上就执行默认的

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
运行在UDP上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 作用
    内网访问外网的时候,外网不能识别内网地址,NAT就把内网地址换成外网地址,端口也换成一个没有使用的端口,并记住这个映射关系。当请求回来的时候根据这个映射再返回给对应的内网主机

  • IPV6
    在这里插入图片描述
    ipv6不进行分片,通知源主机更改分组大小

  • IPV4过度到IPV6
    在这里插入图片描述
    如何解决ipv4到ipv6的通信:
    现在把IPV4比喻成一篇海洋,全是ipv4,当出现了ipv6时,就像一块岛屿,当ipv4要和ipv6通信的时候,ipv4载荷(body)部分存放的是完整的IPV6信息,到目标之后再进行解封装。

4.4通用转发和SDN

在这里插入图片描述

  • 缺陷
    在这里插入图片描述
    在这里插入图片描述
  • SDN
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 实现的功能
    在这里插入图片描述
    在这里插入图片描述

5.网络控制平面

5.1导论

在这里插入图片描述

5.2路由选择算法

有两种算法

  • link state (线路状态)
  • distance vector(矢量距离)

路由选择算法
在这里插入图片描述

  • 路由概念
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • SDN方式
    路由服务器通过网卡收集各个路由器到目标子网的信息,通过服务器来汇总找出最优路径。

    • 例子:路由服务器连接了3个路由,分别是routeA,routeB,routeC。现在主机A到主机B,三个路由器都可以到,routeA的代价是3 routeB代价是4、routeC代价是5,这三个路由器把信息给服务器,服务器就可以选择代价最小的路由器,进行发送。
  • LS(link state)链路状态算法
    在这里插入图片描述
    在这里插入图片描述
    每个路由节点收集自身有哪些邻居和代价是多少,采用泛洪的形式,让其它节点也这样做,就可以收集到一个完整的网络TOP图了。

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

在这里插入图片描述

在这里插入图片描述
开始有两个容器分别是N[]和N1[],N存放已搞定的节点,N1[]存放未搞定的节点。先对N进行初始化,N容器第一个元素就是自己所以是{0,A},然后找到A的邻居,B、G他们的代价是{2,A},{5,E},因为A到G的代价是6,而A-B-E-G的代价是5所以是{5,E},依次循环得到最终的所有路径

在这里插入图片描述

  • 距离矢量算法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5.3自制系统内部的路由选择

  • RIP(采用距离矢量算法)
    在这里插入图片描述

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

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

5.4 ISP之间的路由选择:BGP

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

  • 边界网关协议
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
内部网关关注的性能,外部网关关注的政策类和经济策略

5.5SDN控制平面

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

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

5.6总结

在这里插入图片描述

6.链路层和局域网

6.1 引论和服务

在这里插入图片描述

  • 单点连接和多点连接
    • 单点连接
      一般用于广域网的路由器,这个节点到另一个节点只有一条链路。
    • 多点连接
      在局域网内部,例如交换机这样就是一天设备连接了多个点。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

6.2 差错检测和纠正

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

6.3多点访问协议

在这里插入图片描述

  • 面临的问题
    在这里插入图片描述
    多个设备使用同一个信道,如何处理多个设备同时发送消息,引发的消息碰撞的问题
  • 解决办法
    在这里插入图片描述
    均分使用
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 随机访问
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • CSMA(carrier sense multiple access)

  • 在发送信号之前先侦听一下是否有其它端在发送,如果没有再发送,如果有则推迟。
    在这里插入图片描述
    采用这种方式仍然有可能信号冲突,例如t0时刻,A端发送数据侦听信道是否有被使用,结果是没有,A端进行发送。t1此时B端发送数据侦听信道是否被使用,这是A端的数据还没有到信道中,结果也是没有,所以A和B发送之后,就会出现碰撞,如上图。

  • CSMA/CD(冲突检测)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    二进制指数规避算法
    大概意思就是发生冲突之后,通过这个算法, 得到一组值,由每个端从这组值中抽取一个数字比较,小的先发,大的后发,相同的时候再进行比较。
    在这里插入图片描述
    在这里插入图片描述
    在无线局域网当中,冲突和成功是没有关联的。在有线局域网当中,不冲突等于成功原因:情况1-在有线局域网中,信号衰减很弱,可以错CA(侦听),但是在无线网中,面积的增加衰减非常快。如上图,A端和C端中间有一座阻挡,导致A和C的无线信号不能识别到,但是A和C同时发送到B端,这个时候是会有冲突的。对于发送的A或B来说,发送没有检测到冲突,但是B接受的时候有冲突无法接收到,所以没有不冲突不等于成功。情况2-(下图)B发送给A,C发送给D,B和D在同一个范围,但是B到D的信号非常弱,几乎不受影响,也能发送,所以冲突也不等于不成功。
    在这里插入图片描述
    无线局域网发送
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • LANs

在这里插入图片描述
ARP协议主要是将ip地址换成MAC地址,传到相应设备的网卡中。MAC地址是在同一个网络中,区分不同的设备,IP地址分层的,MAC地址是平面的。
在这里插入图片描述
主机到主机之间,N-1跳是IP在路由,从链路的角度来看,也是将IP地址转成MAC地址发送给不同的路由器。最后一条是将IP转成MAC地址交给对应的设备
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4链路虚拟化

58秒是的视频,啥也没讲

6.5数据中心网络

机房中,一个机柜中服务器跟服务器或跟数据存储设备,的网络相比普通局域网带宽更大,更可靠。

6.6 Aday in the life of web request

把之前的5层说了一下。
在这里插入图片描述

7.未讲(后面看书补上)

8.网络安全

在这里插入图片描述

8.1 什么是网络安全

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

在这里插入图片描述

在这里插入图片描述

8.2 加密原理

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

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

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

8.3 认证

在这里插入图片描述
在这里插入图片描述
Alic告诉Bob 我是Alic,Bob 给Alic一个挑战码,这个挑战码之前没用过,这次用完之后就不用了。然后Alic用Key加密发给Bob,Bob用Key解密,如果成功就认证成功。(这里采用对称加密关于key的分发后面会介绍)
在这里插入图片描述
跟上面一样但是采用非对称加密的方式,Alic用私钥加密,Bob用公钥解密。
在这里插入图片描述
同上,Bob给一个挑战码,但是被Trudy劫获了,把自己的公钥给了Bob。Trudy然后告诉Alic挑战码,并给出公钥。当Alice发送消息的时候Trudy就通过Alic的公钥解密获取明文。然后再用自己的秘钥加密发送给Bob,在任何一方看来都是正常的。

综上的例子就是怎么样可靠拿到公钥

在这里插入图片描述

8.4 报文完整性

保证报文在传输的过程中或事后没有被修改。
在这里插入图片描述
在这里插入图片描述
如何签名:
报文使用私钥进行加密,得到的密文就是签名,然后通过公钥进行解密。
在这里插入图片描述
如果报文非常长,计算的代价非常大,所以摘取报文一部分H,进行加密。M(KbH(M))
在这里插入图片描述
接收方先通过摘要算法,从报文中获取到摘要部分。然后通过公钥解密签名部分得到的报文摘要进行对比,如果相同那说明是完整没被改过。

在这里插入图片描述

8.5 秘钥分发和证书

在这里插入图片描述

在这里插入图片描述

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

8.6 各个层次的安全

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

8.7 防火墙

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

8.8 攻击和对策

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值