计算机网络知识点1

计算机网络组成
节点
1.主机以及在主机上运行的程序
2.链路层交换机、路由器等进行网络交换得设备

数据链路:
1.接数据链路,主机连接互联网
2.主干链路

协议:
传递信息得标准,
信息传输就像送快递一样:交换机就像是快递中转站,将快递按照报文上地址,进行分组发送
规定了两个或者多个通信实体之间交换报文格式和次序

一个数据从发送到目的地,经过得路径(数据链路和分组交换机)称为该网络得路径。

链路层交换机和路由器并称分组交换机,用于数据交换得中转站和中继点

链路层交换机和路由器区别:
2. 工作层次不同

链路层交换机工作在OSI开放式系统互联模型的数据链路层,也就是第二层,而路由器则工作在OSI模型的网络层,就是第三层(中继器、集线器工作在OSI的第一层,即物理层),因此链路层交换机的原理相对简单,一般都是使用硬件电路来实现数据帧的转发,而路由器一般工作在网络层,肩负着网络互联的重任,需要实现更为复杂的协议,具有更加智能的转发决策功能,通常都会在在路由器中跑操作系统,实现复杂的路由算法。因此,与链路层交换机相比,路由器更加偏向于软件实现其功能。

  1. 数据的转发对象不同

**交换机是根据MAC地址转发数据帧,而路由器则是根据IP地址来转发IP数据报/分组。**数据帧是在IP数据包/分组的基础上封装了帧头(源MAC和目的MAC等)和帧尾(CRC校验码)。那有人就想了,数据帧为什么同时要包含MAC地址和IP地址呢,实际上,数据帧中的IP地址决定最终数据包要到达的主机,而MAC地址则是决定下一跳将要将数据传送给哪台设备(路由器或目的主机)。而且,IP地址是软件实现的,可以描述主机所在的网络,而MAC地址是硬件实现的,每一个网卡在出厂的时候都会将全世界唯一的MAC地址固化在网卡的ROM中,因此MAC地址是不可修改的,但是IP地址是可以由网络管理人员配置修改的。

  1. 分工不同

链路层交换机主要用于组建局域网,而路由器则主要负责连接外网并寻找网络中最合适数据传输的路径多台主机可以通过网线连接到交换机,这样局域网就组建好了,之后就可以将数据通过交换机发送给局域网中的其他主机了,如飞秋、极域电子教室等局域网软件就是通过交换机把数据转发给其他主机的,当然像极域电子教室这样的广播软件是利用广播技术让所有的主机都收到数据的。然而,通过交换机组建的局域网是无法访问外网的,这时就需要路由器来为我们打开外面精彩世界的大门了。局域网中的所有主机使用的都是私网IP,这时就必须借助路由器将私网IP转化为公网IP(NAT网络地址转换),这样才能访问外网。

  1. 冲突域和广播域

链路层交换机可以分割冲突域,但不能分割广播域,而路由器既能分割冲突域,又能分割广播域。由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在这种情况下会导致广播风暴和安全漏洞问题,而连接在路由器上的网段会被分配不通的广播域,路由器不会转发广播数据。需要说明的是单播的数据包在局域网中会被交换机唯一地送往目标主机,其他主机不会接收到数据,这是区别于原始的集线器的,数据的到达时间由交换机的转发速率决定,但是交换机会将广播数据转发给局域网中的所有主机。

路由器是让你见到广大世界得,建立局域网,数据链路交换机让你组件一个小圈子。

分组转发机制:
源将报文划分为很小数据块称为分组
计算机中的分组转发机制:分组交换器,接受到第一个比特开始,要一直接受到整个分组后,才会进行转发,先缓存满了之后,才会进行转发。
输出缓存队列:分组在交换机中准备被交换到某条链路,这条链路正在忙碌,所以该分组必须在输出缓存中等待。
缓存空间大小有限,一旦缓存空间满了,这种情况下,会出现丢弃掉正在排队的分组,或者要等待分组(丢包)

每个端系统都有IP地址(相当于坐标)
分组的头部:目的IP地址,分组交换器,会将分组转发向最近的路由器
所以说,很像发快递么

按照网络协议栈分为5层

报文、报文段、分组、包、数据报、帧、数据流的概念区别

1.报文(message)

应用层信息分组,称为报文

我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元,也是网络传输的单元。报文包含了将要发送的完整的数据信息,其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的首部,那些就是报文头。

2.报文段(segment)
运输层信息分组报文段
通常是指起始点和目的地都是传输层的信息单元。

3.分组/包(packet)
分组是在网络中传输的二进制格式的单元,为了提供通信性能和可靠性,每个用户发送的数据会被分成多个更小的部分。在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。它的起始和目的地是网络层。

4.数据报(datagram) == 分组 == 包,就是包
面向无连接的数据传输,其工作过程类似于报文交换。采用数据报方式传输时,被传输的分组称为数据报。通常是指起始点和目的地都使用无连接网络服务的的网络层的信息单元。

5.帧(frame)
帧是数据链路层的传输单元。它将上层传入的数据添加一个头部和尾部,组成了帧。它的起始点和目的点都是数据链路层。

6.数据单元(data unit)

指许多信息单元。常用的数据单元有服务数据单元(SDU)、协议数据单元(PDU)。

SDU是在同一机器上的两层之间传送信息。PDU是发送机器上每层的信息发送到接收机器上的相应层(同等层间交流用的)。

层次解决问题,将复杂问题简化去解决问题
某一层,向上一层提供服务,提供服务的意思是,我的功能通过接口,给你调用
对等层之间通过协议交换信息
对等层实体
计算机网络知识点1_第1张图片
比如运输层(tcp,udp)向网络层递交运输层报文段和IP地址
某一层向上层提供服务

应用层——信息分组是报文

传输层——数据段/报文段(segment) (注:TCP叫TCP报文段,UDP叫UDP数据报,也有人叫UDP段)

网络层——分组、数据包(packet)

链路层——帧(frame)

物理层——P-PDU(bit)

OSI七层模型中每一层的作用

每一层的作用如下:

物理层:物理层负责原始数据的比特流如何在传输媒体上的传输,该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。。其主要设备是中继器(Repeater)和集线器(Hub)。
数据链路层:将比特组装成帧,通过数据线路和链路层交换机,完成可靠的点到点的传输。
网络层:负责数据包从源到宿的传递和网际互连(包PackeT),传输以分组为单位的,端到端的数据传输。(可以主机到主机)
  网络层的目的是实现两个主机系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是“路径选择、路由及逻辑寻址”。

网络层中涉及众多的协议,其中包括最重要的协议,也是TCP/IP的核心协议——IP协议。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。具体的协议我们会在接下来的部分进行总结,有关网络层的重点为:

1> 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能;

2> 基本数据单位为IP数据报;

3> 包含的主要协议:

IP协议(Internet Protocol,因特网互联协议);

ICMP协议(Internet Control Message Protocol,因特网控制报文协议);

ARP协议(Address Resolution Protocol,地址解析协议)可看成是跨网络层和链路层的协议;

RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。

4> 重要的设备:路由器。
传输层:提供端到端的可靠报文传递和错误恢复(段Segment),传输以报文段为单位的分组数据,在网络层基础上,提供进程到进程的可靠数据传输,可以提供可靠传输服务,同时具有差错控制,拥塞控制和流量控制的能力。

会话层:建立、管理和终止会话(会话协议数据单元SPDU)
会话是指一个终端用户与交互系统进行通讯的过程。

比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。会话较多用于网络上,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。

Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

1、物理层:物理层处于OSI参考模型的最低层。物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以透明地传送比特流。

2、数据链路层:数据链路层在物理层提供比特流传输服务的基础上,在通信实体之间建立数据链路连接,传送以帧为单位的数据,通过差错控制、流量控制方法,变有差错的物理线路为无差错的数据链路。

3、网络层:网络层主要任务是通过执行路由选择算法,为报文分组通过通信子网选择最适当的路径。它是OSI参考模型七层中最复杂的一层。

4、传输层:传输层是向用户提供可靠的端到端服务,透明地传送报文。

5、会话层:会话层的主要目的是组织同步的两个会话用户之间的对话,并管理数据的交换。

6、表示层:表示层主要用于处理两个通信系统间信息交换的表示方式,它包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。

7、应用层:应用层是OSI参考模型的最高层。应用层提供各种各样的应用层协议,这些协议嵌入在各种我们使用的应用程序中,为用户与网络之间提供一个打交道的接口。

综上所述可知,ISO/OSI开放系统互联七层参考模型中,功能最复杂的一层是网络层。

按照OSI七层协议的描述,传输层与网络层在功能上最大区别是传输层提供进程通信能力。

http协议:
web应用层协议:比如网页,超链接什么的
应用层协议,需要TCP为他提供服务,无状态协议,并不需要维护客户之间的关系。cookie将客户端升级,变成升级版本的有状态协议
包含持续连接和非持续连接两种可能性:
默认是非持续连接。
三、HTTP1.0和HTTP1.1的一些区别
要区别主要体现在:

缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

1.新的二进制格式(Binary Format):
HTTP1.x的解析是基于文本。(文本的表现形式有多样性,要考虑的场景很多才能做到健壮性)

基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

2.HTTP2.0比HTTP1.0有路复用(MultiPlexing):
即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

3.header压缩:
HTTP1.x的header带有大量信息,而且每次都要重复发送,

HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

4.服务端推送(server push):
HTTP2.0也具有server push功能。

附注

HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?

HTTP/1.* 一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接;

HTTP/1.1 Pipeling解决方式为,若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞;

HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行;
具体如图:
————————————————
版权声明:本文为CSDN博主「sun cat」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/github_37130188/article/details/89442301

.
web缓存服务器:也叫代理服务器
相当于代理商,你买东西先从代理商这里拿,代理商如果没有,代理商会从老大哪里去拿的。

用户浏览器先访问web缓存器,如果有,我就把内容传递给你,如果没有,我就去主要服务器那里去把内容下载下来,然后我再传递给你。代理服务器既是服务器,又是客户。即使买东西的,也是卖东西的。
1.大大减少通信响应时间
2.大大减少服务器的通信量,可以很好减轻服务器的载嗬。

FTP协议,文件传输协议:
在TCP上跑的协议,两条TCP通道,一条用于传输数据,另外一条用于发送给控制信息
客户端和数据端建立连接,使用服务器21号端口,
21号端口是控制端口,用于完成服务器对客户端的识别命令,控制命令传输
在服务器21号端口完成控制之后,服务器会向客户端20号端口寻求连接,建立TCP通道,用于传输数据。
FTP协议是要维护用户状态的

SMTP协议,使用25号端口跑在TCP上
因特网邮件传输依赖三个东西:用户代理,邮件服务器,邮件传输协议SMTP
用户代理负责配置好端口号和IP地址,邮件服务器从队列中取走邮件,然后通过SMTP协议发送到目的的邮件服务器中,目的的邮件服务服务器收到邮件保存到自己队列中,然后用户代理从邮件服务器中通过http协议,拉走属于自己的邮件。
SMTP主要是一个推协议的协议,把有邮件从邮件代理服务器推到另外的邮件务服务器上
POP3是一个拉的协议可以从邮件服务器中把邮件拉出来拉给客户代理
运行在TCP上,,占用110端口。

DNS协议,运行在UDP上,使用53号端口,主要就是为了将IP地址映射为主机名,可以说是将坐标映射为省市县
主要工作在网络边缘部分,也就是主机终端上,在主机上应用层实现,
服务器是分布式排布的
一些小功能:
1.给主机起一个别名,就是小名,小名也可以访问到主机的服务器
2.邮件别名
3.负载分配,将繁忙的站点,分配在冗余的站点上,多态服务器之间进行分配,每一台服务器运行在不同的端系统上,不同服务器IP地址不同,将所有IP地址合集合并到一个规范主机名下面,这样客户对主机名发送DNS请求,服务器可以响应整个IP集合,让IP集合循环去响应,这样就把负载给分配好了。
DNS域名解析做法:
1.用户主机运行DNS客户端
2。浏览器从URL中抽出域名交给客户端
3.DNS客户端向主机发送一个包含主机名的请求
4.DNS服务器返回一个IP地址
5.浏览器通过80端口的http协议发送TCP连接和

由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。

    从语法上讲,每一个域名都是有标号(label)序列组成,而各标号之间用点(小数点)隔开。

计算机网络知识点1_第2张图片
计算机网络知识点1_第3张图片
分卸划归4大级别服务器管辖
分别是根DNS服务器· — 顶级域服务器 — 权威域服务器 —本地服务器
计算机网络知识点1_第4张图片

一、主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

   二、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机

————————————————
版权声明:本文为CSDN博主「老胡爱分享」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yipiankongbai/article/details/25031461

了提高DNS查询效率,并减轻服务器的负荷和减少因特网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

    例如,在上面的查询过程中,如果在m.xyz.com的主机上不久前已经有用户查询过y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询y.abc.com的IP地址,而是直接把告诉缓存中存放的上次查询结果(即y.abc.com的IP地址)告诉用户。

下面举一个例子演示整个查询过程:

    假定域名为m.xyz.com的主机想知道另一个主机y.abc.com的IP地址。例如,主机m.xyz.com打算发送邮件给y.abc.com。这时就必须知道主机y.abc.com的IP地址。下面是上图a的几个查询步骤:

    1、主机m.abc.com先向本地服务器dns.xyz.com进行递归查询。

    2、本地服务器作为代理采用迭代查询。它先向一个根域名服务器查询。

    3、根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。

    4、本地域名服务器向顶级域名服务器dns.com进行查询。

    5、顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。

    6、本地域名服务器向权限域名服务器dns.abc.com进行查询。

    7、权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。

    8、本地域名服务器最后把查询结果告诉m.xyz.com。

————————————————
版权声明:本文为CSDN博主「老胡爱分享」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yipiankongbai/article/details/25031461

    由于名字到地址的绑定并不经常改变,为保持告诉缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

    不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

说人话就是:
当在浏览器上输入一个网址之后
1.浏览器从URL中将域名交给DNS本地客户端
2.本地客户端将URL交给本地DNS服务器查看有没有缓存
3.本地没有情况下本地服务器作为代理,向DNS根服务器发送请求
4,跟服务器向顶级域服务器 — 权威域服务器一级一级进行查询,直到完全得到IP地址之后交给本地服务及,本地服务器交给本地主机进行解析

传输层:传递的是报文段,网络层为传输层协议提供服务,但是网络层的传递方式是会出错的,需要传输层作为大佬,对网络层传输的东西,进行纠错,毕竟是领导么,领导要及逆行纠正错误。网络层IP协议,会出错,比如乱序,丢失等等问题。
传输层可以通过端口号的存在,完成不同主机之间进程到进程之间的通信问题,根据端口号区分进程。

UDP报文头部:
计算机网络知识点1_第5张图片
UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,

可靠性传输原理:
TCP需要进行可靠性传输,但是TCP所依赖的的网络层的IP是不可靠的,说白了就是,你要依靠不可靠的IP协议,向上层提供可靠的服务,就是说你属下很完蛋,但是你要向上级交付完整的工作,你太难了。
网络层在传输过程中很容易丢包,或者分组乱掉,下层水平不可靠,你只能靠自己创造可靠的上层
发送成功情况下,会发送ACK确定回复,发送失败情况下接收方会发送NAK否定确认
可靠性传输依赖:差错检验 接受反馈(NAK,ACK)、重传收到错误报告时候进行重新传送

TCP报文格式:
TCP报文是全双工的,点对点的
计算机网络知识点1_第6张图片

TCP拥塞控制:
拥塞的标志
1.重传计时器超时
2.接收到三个重复确认
计算机网络知识点1_第7张图片
慢开始与拥塞避免
慢开始
1.慢开始不是指cwnd的增长速度慢(指数增长),而是指TCP开始发送设置cwnd=1。
2.思路:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。这里用报文段的个数的拥塞窗口大小举例说明慢开始算法,实时拥塞窗口大小是以字节为单位的。如下图:

3.为了防止cwnd增长过大引起网络拥塞,设置一个慢开始门限(ssthresh状态变量)
当cnwd<ssthresh,使用慢开始算法
当cnwd=ssthresh,既可使用慢开始算法,也可以使用拥塞避免算法
当cnwd>ssthresh,使用拥塞避免算法

拥塞避免(按线性规律增长)
1.拥塞避免并非完全能够避免拥塞,是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
2.思路:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞控制窗口加一。

无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。
加法增大与乘法减小
乘法减小:无论是慢开始阶段还是拥塞避免,只要出现了网络拥塞(超时),就把慢开始门限值ssthresh减半
加法增大:执行拥塞避免算法后,拥塞窗口线性缓慢增大,防止网络过早出现拥塞

快重传
1.快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。
计算机网络知识点1_第8张图片
2.由于不需要等待设置的重传计时器到期,能尽早重传未被确认的报文段,能提高整个网络的吞吐量。

快恢复(与快重传配合使用)
1.采用快恢复算法时,慢开始只在TCP连接建立时和网络出现超时时才使用。
2.当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。
3.考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。
腾讯面试题
TCP的拥塞控制机制是什么?请简单说说。
答:我们知道TCP通过一个定时器(timer)采样了RTT并计算RTO,但是,如果网络上的延时突然增加,那么,TCP对这个事做出的应对只有重传数据,然而重传会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这就导致了恶性循环,最终形成“网络风暴” —— TCP的拥塞控制机制就是用于应对这种情况。
首先需要了解一个概念,为了在发送端调节所要发送的数据量,定义了一个“拥塞窗口”(Congestion Window),在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。
拥塞控制主要是四个算法:
1.慢启动:意思是刚刚加入网络的连接,一点一点地提速,不要一上来就把路占满。
连接建好的开始先初始化cwnd = 1,表明可以传一个MSS大小的数据。
每当收到一个ACK,cwnd++; 呈线性上升
每当过了一个RTT,cwnd = cwnd*2; 呈指数让升
阈值ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”
2.拥塞避免:当拥塞窗口 cwnd 达到一个阈值时,窗口大小不再呈指数上升,而是以线性上升,避免增长过快导致网络拥塞。
每当收到一个ACK,cwnd = cwnd + 1/cwnd
每当过了一个RTT,cwnd = cwnd + 1
拥塞发生:当发生丢包进行数据包重传时,表示网络已经拥塞。分两种情况进行处理:
等到RTO超时,重传数据包
sshthresh = cwnd /2
cwnd 重置为 1
3.进入慢启动过程
在收到3个duplicate ACK时就开启重传,而不用等到RTO超时
sshthresh = cwnd = cwnd /2
进入快速恢复算法——Fast Recovery
4.快速恢复:至少收到了3个Duplicated Acks,说明网络也不那么糟糕,可以快速恢复。
cwnd = sshthresh + 3 * MSS (3的意思是确认有3个数据包被收到了)
重传Duplicated ACKs指定的数据包
如果再收到 duplicated Acks,那么cwnd = cwnd +1
如果收到了新的Ack,那么,cwnd = sshthresh ,然后就进入了拥塞避免的算法了。

说白了就是,当拥塞窗口一开始从一开始,咱们慢慢来不着急,成指数增加,速度拼命上涨,每次都是前面两倍
当发生超时重传丢包之后,说明网络拥塞了,这时候记录一下拥塞窗口大小 / 2 作为警戒阈值,然后将拥塞窗口设置为1,开始慢启动,当慢启动到境界阈值的时候,改为拥塞避免模式,快到上次拥塞点了,我慢点涨,改为每次增加1的线性增涨状态,等丢包了之后,我接着记录当前拥塞窗口大小除2作为阈值,然后将拥塞窗口变成1,进入慢启动等过了阈值,接着进入拥塞避免

进入快速回复的前提是快速重传,当接受到三个冗余ACk,这时候快速重传机制启动,网络将速度减半,当收到第一个丢失的报文的ACK回复后,进入拥塞避免状态,说白了就是,当我收到三个冗余ACK的时候,说明虽然发生了拥塞,丢包了,但是网络状态还凑合,我并不需要直接把速度降为1从头开始,而是直接进入拥塞避免阶段,这样我还保留了一些速度,不至于速度实在太低。

ARP;协议,网络层到数据链路层的协议
将IP地址,转化为数据链路层的MAC地址
只能在一子网的主机和路由器接口进行解析
主机或者路由器的内存中有一个ARP表,表中可以看到从IP – mac地址映射关系和寿命
当主机要发送一个数据包,这个数据包要在网上寻找另一个主机或者路由器,发送机需要得到给定主机或者路由器的MAC地址,如果RAP表中由地址,那直接取出缓存地址,如果没有,发送方将发送一个特殊分组ARP分组,这个分组广播发给子网上所有的所有路由器和主机,询问这个IP地址的MAC地址,将帧传输进子网中,相当于有人在大厅里大喊(XXX的社保号是多少),这个查询帧可以被子网中所有路由器收到,收到分组的人会检查自己MAC地址和给出的IP地址是不是相同,如果相同会给请求的主机一个回应,告诉他你请求得IP地址对应的MAC地址是多少。这是一个即插即用的技术。计算机网络知识点1_第9张图片

TCP粘包问题
1 什么是粘包现象
  TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

2 为什么出现粘包现象
  (1)发送方原因

我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一起发送。

所以,正是Nagle算法造成了发送方有可能造成粘包现象。

(2)接收方原因

TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一 来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。

3 什么时候需要处理粘包现象
  (1)如果发送方发送的多个分组本来就是同一个数据的不同部分,比如一个很大的文件被分成多个分组发送,这时,当然不需要处理粘包的现象;

(2)但如果多个分组本毫不相干,甚至是并列的关系,我们就一定要处理粘包问题了。

4 如何处理粘包现象
  (1)发送方

对于发送方造成的粘包现象,我们可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。

(2)接收方

遗憾的是TCP并没有处理接收方粘包现象的机制,我们只能在应用层进行处理。

(3)应用层处理

应用层的处理简单易行!并且不仅可以解决接收方造成的粘包问题,还能解决发送方造成的粘包问题。

解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到所有的数据都被处理;但是如何判断每条数据的长度呢?

两种途径:

1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候一定要注意每条数据的内部一定不能出现开始符或结束符;

2)发送长度:发送每条数据的时候,将数据的长度一并发送,比如可以选择每条数据的前4字节是数据的长度(一个int来储存数据长度大小),应用层处理时可以根据长度来判断每条数据的开始和结束。

IP地址:IP网络层通信协议,用于表示通信地址的
IPV4,IPV6
IP地址网络位加主机位构成:
网络位表示相当于小区,主机位相当于地址

对称加密和非对称加密
对称加密:
通信双方各自拿一个密钥,互相加密和解密,但是问题i是,这个加密算法!这个密钥我怎么发送给你呢??怎么确保发送时候不会被人拦截呢?
非对称加密:
使用一对非对称密钥,公钥和私钥匙,公钥对外发布(就像一个安全的保险箱子,你申请了CA证书,就相当于CA机构,给你背书了,让你知道,你收到的箱子是和你通信的这个个网站发过来的),然后你将自己的数据,装进保险箱里,发送给服务器,服务器用私人钥匙将保险箱子打开。

但是这里涉及到一个问题,就是非对称加密虽然很安全,但是效率低,需要资源很大,所以一般我们都选择对称加密和非对称加密结合,通过非对称加密方式,安全将对称加密密钥发送到对方手里,然后我们就可以使用对称加密方式进行通信。
所谓的私钥就是在加密算法上再加一层安全加密,就是加一个变量进行控制。

公钥和私钥主要用于数字签名和认证,我们也称为对称加密和解密
认证是安全通信的前提
A如果不是和B聊天,而是和一个假冒的C聊天那一切都没意义。

CA中存放AB的证书,证书中有各自公钥和加密算法。

公钥和私钥类似保险箱和钥匙的关系
通过申请CA证书,双发拿到公钥,服务器通过CA背书,交给客户一个箱子,客户把数据放进箱子里(公钥加密),回传给服务器,服务器用私钥打开箱子。

通信前
A向CA请求B的数字证书,CA将B数字证书和CA签名交给A
计算机网络知识点1_第10张图片
计算机网络知识点1_第11张图片

你可能感兴趣的:(笔记,JAVA)