计算机网络

一、三次握手和四次挥手

1.TCP报文格式简介:

1.序号(sequence number)

Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记

2.确认号(acknowledgement)

Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ACK=Seq+1.

3.标志位

URG:紧急指针
ACK:确认序号有效
PSH:接受方应该尽快将这个报文交给应用层
RST:重置连接
SYN:发起一个连接
FIN:释放一个连接
需要注意的是:不要将确认序号Ack和标志位中的ACK搞混,确认方Ack=发起方Seq+1

2.三次握手

1.首先客户端向服务端发送一段TCP报文。
其中标记位为SYN,表示请求建立连接;序号为Seq=X(X一般为1);客户端结束CLOSED状态进入SYN-SENT阶段。
2.服务端接收到来自客户端的TCP报文之后,结束LISTEN阶段,并返回一段TCP报文。
标志位为SYN和ACK,表示客户端的报文Seq序号有效(服务端能正常接受客户端发送的数据),并同意创建新连接。序号为Seq=y。确认号为Ack=X+1,表示守到客户端的序号Seq并将其加1作为自己确认号Ack的值,随后服务器端进入SYN-RCVD阶段。
3.客户端收到来自服务端的确认收到数据的TCP报文之后,明确了从客户端高到服务端的数据传输是正常的,结束SYN-SENT状态,并返回最后一段TCP报文。
其中标志位为ACK,表示收到了服务端同意连接的信号了。
序号为Seq=x+1,表示确认收到服务端的确认号Ack,并将作为自己的序号值。
确认号为Ack=y+1,表示收到服务器端序号seq,并将其加1作为自己的确认号Ack的值。
客户端进入ESTABLISHED阶段。
为什么要进行三次握手?
为了防止服务器开启一些无用的连接增加服务器的开销以及防止已失效的拦截请求报文段突然又传送到了服务端,因而产生错误。
由于网络传输是有延时的,在传输过程中,客户端发起了创建连接的请求,然后服务端收到并创建了这个连接并返回包含SYN,ACK和Seq等内容返回给客户端,这个数据包因为网络传输原因丢了,丢失之后客户端一直没有接收到服务端返回的数据包。客户端可能设置了一个超时时间,时间到了就关闭连接创建的请求,而服务端是不知道的,这样就会造成服务端开销的严重浪费。
还有一个情况是已经失效的客户端发出的请求信息,由于某种原因传输到了服务器端,服务器端以为是客户端发出的有效请求,接收后产生错误。
若是四次就会造成浪费,因为经过三次,通信双方就已经确定了各自都可以发送消息,且能收到对方的消息

3.四次挥手

1.首先客户端想要释放连接,向服务端发送一段TCP报文。
标记为FIN,表示请求释放连接
序号为Seq=U;
随后客户端进入FIN-WAIT-1阶段,即关闭阶段,并且停止在客户端到服务端方向上发送数据,但是客户端可以接受服务端传输来的数据
2.服务端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务端进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文。
标记为ACK,表示接收到客户端发送的释放连接的请求;
序号Seq=V,确认号为Ack=U+1,表示是在接收到客户端报文的基础上,将其序号Seq+1作为本段报文确认号Ack的值;
随后服务端开始准备释放服务器端到客户端方向上的连接
3.服务端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务端到客户端方向上的连接准备,再次向客户端发出一段TCP报文。
标记为FIN,ACK,表示已经准备好释放连接。
序号为Seqd=W;
确认号为Ack=U+1;表示是在收到客户端报文的基础上,将其序号Seq+1作为本段报文确认号ACK的值。
随后服务端结束CLOSED-WAIT阶段,并且停止在服务端到客户端上发送数据,但是服务端仍然能够接受从客户端传输过来的数据。
4.客户端收到从服务端发出的TCP报文,确认了服务端已经做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT,并向服务端发送一段报文
标记为ACK,表示接收到了服务器准备释放连接信号。
序号为Seq=U+1,表示是在收到了服务端报文的基础上,将其确认号Ack作为本段报文序号的值。
确认号为Ack=W+1,表示是在收到了服务器端报文的基础上,将其序号Seq值作为本段报文确认号的值,随后客户端开始在TIME-WAIT阶段等待2MSL。

客户端为什么要等待2MSL?
MSL是Maximum Segement Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。网络中可能存在来自发送方的数据包,当这些发送方的数据包被接受方处理后又会向对方发送响应,所以一来回需要等待两倍的时间。

经过2MSL这个时间,足以让两个方向上的数据包都被丢弃,使得原来连接的数据包在网络中都自然消失,再出现的数据包都是新建立连接所产生的。
等待足够的时间以确保最后的ACK能然被动关闭方接受,从而帮助其正常关闭。

为什么连接的时候是三次,关闭的时候是四次?
因为当服务端收到客户端SYN连接请求报文后,可以直接发送SYN+ACK连接报文。其中ACK报文是用来直接应答的,SYN报文是用来同步的
但是当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,(你发送的FIN报文我收到了)。只有等到服务端所有的保温都发送完了,我们才能法FIN报文,因此不能一起发送,需要四次挥手。

二、TCP/IP四层模型和OSI七层模型

在这里插入图片描述

1.TCP/IP四层模型

应用层:应用程序间沟通的层,如简单电子邮件(SMTP)文件传输协议(FTP)网络远程访问协议(Telent)域名解析协议(DNS)等。
传输层:负责节点之间的数据传输,如传输控制协议(TCP),用户数据保护协议(UDP),将数据传送到网络层。
网络层:实现数据包的选路和转发,通常使用众多分级的路由器来连接分散的主机,因此,通信的两台主机一般不是直接相连的,而是通过多个节点(路由器)连接的。网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。

网络层最核心的协议是IP协议其次是ICMP协议,IP协议根据数据包的目的IP地址来决定如何投递他。如果数据包不能直接发送给目标主机,那么IP协议就会为它寻找一个适合的下一条路由器,并将数据包交付给该路由器来转发。

网络接口层:实现了网卡接口的网络驱动程序,用来处理数据在物理媒介(比如以太网、令牌环等)上的传输,主要有ARP(地址解析协议)和RARP(逆地址解析协议),它们实现了IP地址和机器物理地址(MAC)之间的相互转换。

2.OSI七层模型

物理层:实现了相邻计算机节点之间比特流透明传送。传输单位为bit,主要包括的协议为:IEE802.3 CLOCKRJ45
数据链路层:接受来自物理层的位流形式的数据,并封装成帧,传送到上一层,同样,也将上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差别控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。传输单位为帧,主要协议包括为MAC VLAN PPP。
网络层:将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。传输单位为包,主要协议包括IP ARP ICMP。
传输层:在源端与目的端之间提供可靠的透明数据传输,使上层服务用户不必关系通信子网的实现细节。传输单位为报文,主要包括协议为TCP UDP。
会话层:是用户应用程序和网络之间的接口,负责在网络中的两节点之间的建立、维持和终止通信。传输单位为SPDU,主要包括的协议为RPC NFS。
表示层:他对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。主要协议JPEG ASII
应用层:允许访问OSI环境的手段,传输单位为APDU,主要包括的协议为FTP HTTP DNS。

三、从输入URL到详细页面的展示的详细过程。

1.输入地址

当我们开始在浏览器中输入网址的时候,浏览器已经在智能的匹配可能的URL了,他会从历史记录,书签等等地方,找到已经输入的字符串可能对应的url,然后给出智能提示,让你可以补全url地址。对于goole的chrome的浏览器,他甚至会直接从缓存中把页面展示出来,就是还没按Enter,页面就出来了

2.DNS解析IP地址

请求一旦发起,浏览器首先要做的就是解析这个域名,一般来说,浏览器首先会查看本地硬盘的hosts文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用hosts文件里面的ip地址。
如果在本地的hosts文件没有能够找到对应的ip地址,浏览器就会发出一个请求到本地DNS服务器。查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有这条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器查询。
根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并且给出域服务器的地址。这种过程就是迭代的过程。本地DNS服务器继续向域服务器发出请求,域服务器告诉本地DNS服务器,你的域名的解析服务器的地址。
本地DNS服务器向域名的解析服务器发送请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

DNS(域名系统),因特网上作为域名和ip地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。

DNS域名称空间的组织方式

在这里插入图片描述

DNS负载均衡:
当一个网站有足够多的用户的时候,假如每次请求的资源都位于同一台机器上面,那么这台机器随时可能崩掉。处理办法就是用DNS负载均衡技术,原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。例如可以根据每台机器的负载量,该机器里用户地理位置的距离等

3.浏览器向web服务器发送一个HTTP请求

拿到域名对应的IP地址之后,浏览器会以一个随机端口(1024-65535)向服务器的WEB程序(常用的有httpd,nginx)80端口发起TCP的连接请求。这个连接请求到达服务器端后,进入到网卡,然后进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的拨开),还有可能要经过NetFileter防火墙的过滤,最终到达WEB程序,最终建立了TCP/IP连接。

4.服务器处理请求

经过前面的重重步骤,我们终于将我们的http请求发送到了服务器这里,其实前面的重定向已经是到达服务器了。
后端从固定的端口接收到TCP报文开始,他会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。
一些大一点的网站会将你的请求反向代理服务器中。此时客户端不是直接通过HTTP协议访问某些网站应用服务器,而是先请求到Nginx,Nginx在请求服务器,然后将结果返回给客户端,这里Nginx的作用就是反向代理服务器。同时也带来一个好处,一台服务器挂了,只要其他的没事,就不会影响用户使用

反向代理
客户端本来可以通过HTTP协议访问某网站的应用服务器,网站管理员可以在中间加上一个Nginx,客户端请求Nginx,Nginx请求应用服务器,然后将结果返回给客户端,此时Nginx就是反向代理服务器
在这里插入图片描述

5.服务器返回一个HTTP响应

响应体由三部分组成:
响应行:协议版本、状态码及其描述组成。
响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会他回送的数据
响应体:响应体就是响应的消息体,如果是纯数据就返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码

6.浏览器显示HTML

在浏览器没有完整接受全部HTML文档时,他就已经开始显示这个页面了,这里主要说下webkit的渲染过程。

解析HTML以构建dom树->构建render树->布局render树->绘制render树
在这里插入图片描述

浏览器在解析html文件时,会自上而下的加载,并在加载过程中进行解析渲染。在解析过程中,如果遇到外部请求资源,比如图片、外连接的CSS等,请求过程是异步的,并不会影响html文件进行加载
解析过程中,浏览器首先会解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕之上。这个过程涉及两个概念:reflow(回流)和repain(重绘)。
DOM节点中的各个元素都是以盒模型的形式存在,这些都需要浏览器去计算其位置和大小等,这个过程成为relow;当盒模型的位置,大小以及其他属性确定下来后,浏览器便开始绘制内容,这个过程称为repain。
页面在首次加载时,必然会经历reflow和repain。

四、GET和POST的区别

GET参数通过URL传递,POST放在Request body中。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
GET比POST更不安全,因为参数之间暴露在URL上,所以用来传递铭感信息。
GET请求只能进行url编码,而POST有支持多种编码方式。
GET产生一个TCP数据包,POST产生两个数据包

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200,请求成功。
对于POST方式的请求,浏览器会先发送http header给服务端,告诉服务端等一下会有数据过来,服务器响应100 countinue,告诉浏览器我已经准备接收数据,浏览器再POST一个data给服务端,服务端响应200,请求成功

五、HTTP请求报文格式

一个HTTP请求报文有请求行(request line),,请求头部(header),空行和请求数据四个部分
在这里插入图片描述

1.请求行

请求行有请求方法字段、URL字段和HTTP协议版本字段3个字段组成,他们用空格分隔。例如GET /index.html HTTP/1.1.常见的方法有GET、post。

2.请求头部

请求头部有关键字字/值对组成,每行一队,关键字和值用英文:分割,请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Ageht:产生请求的浏览器类型
Accpet:客户端可识别的内容类型列表
HOST:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

3.空行

最后一个请求头之后是一个空行,发送回车符合换行符,通知服务器以下不会再有请求头

4.请求数据

请求数据不再GET方法中使用,而是再POST方法中使用,POST方法适用于需要客户填写表单的场合,于请求数据相关的请求头时Content-Type和COntent-length。

HTTP响应也由三个部分组成:状态行、消息报头、响应正文

5.HTTP中常见的状态码

1xx:信息状态码,表示服务器已经接收了客户端请求,客户端可继续发送请求

100 Continue
101 Switching Protocols

2xx:成功状态码,表示服务器已经成功接受到请求并进行处理。

200 OK 表示客户端请求成功
204 NO Content 成功,但不返回任何实体的主体部分
206 Partial Content 成功执行了一个范围请求。

3xx:重定向状态码,表示服务器要求客户重定向。

301 Moved Permanently 永久性重定向,响应报文的Location首部应该有该资源的新URL
302 Found 临时性重定向,响应报文的Location首部给出的URL来临时定位资源。
303 See Other 请求得资源存在着另一个URI,客户端应该使用GET方法定向获取请求的资源。
304 Not Modified 服务器内容没有更新,可以直接读取浏览器缓存
307 Temporary Redirect 临时重定向。与302 Found含义一样。302禁止POST变换为GET,但实际使用时并不一定,307则更多浏览器可能会遵循这一标准,但也依赖于浏览器具体实现。

4xx:客户端错误状态码,表示客户端的请求有非法内容。

400 Bad Request 表示客户端请求有语法错误,不能被服务器所理解
401 Unauthonzed 表示请求未经授权,该状态码必须与WWW-Authenticate报头域一起使用
403 Forbidden 表示服务器收到请求,但是拒绝提供服务,通常会再响应正文中给出不提供服务的原因。
404 Not Found 请求得资源不存在,例如输错了URL。

5xx:服务器错误状态码,表示服务器未能正常处理客户端的请求而出现意外错误。

500 Internel Server Error表示服务器发生不可预期的错误,导致无法完成客户端请求
503 Service Unavilable 表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

六、TCP和UDP的区别

**TCP的优点:**可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……
UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

七、TCP保证可靠性传输的机制

1.校验和

在发送数据时,为了计算数据包的校验和,应该按如下步骤:
1.把校验和字段置为0
2.把需要校验的数据看成以16位为单位组成的数字组成,依次进行二进制反码求和。
3.把得到的结果存入校验和字段中。在接受数据时,计算数据包的数4校验和相对简单,依次进行二进制反码求和,包括校验和字段
3.1.把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括检验和字段。
3.2.检查计算出的校验和的结果是否等于零(反码应该是16个1)。
3.3.如果等于0,说明被整除,校验和正确,否则就是错误的,协议栈就要抛弃这个数据包。

2.序列号

TCP将每个字节的数据都进行了编号,这就是序列号。
序列号的作用:
1.保证可靠性(当接收到的数据包少了某个序号的数据时,能马上知道。)
2.保证数据按序到达。
3.提高效率,可实现多次发送,一次确认。
4.取出重复数据。数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现。

3.确认应答机制(ACK)

TCP通过确认应答机制实现可靠的数据传输,在TCP的首部中有一个标志位—ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确定首部的确认字段是否有效。

4.超时重传机制

第一种情况:数据包丢失,当数据发出后在一定的时间内未收到接受方的确认,发送方就会进行重传(特定的时间间隔)。
第二种情况:**确认包丢失,**当接受方收到重复数据(通过序列号识别)的时候将其丢弃,重新发送ACK。

5.连接管理控制

三次握手和四次挥手

6.流量控制

接收端处理数据的速度是有限的,如果双方发送数据的速度过快,导致接收端的缓
冲区满,而发送方继续发送,就会导致丢包,继而引起丢包重传等一系列连锁反
应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就
是流量控制。

在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16位窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接受方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口设置为0,发送方收到后将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

7.拥塞机制

如果出现拥塞,分组将会出现丢失,此时发送方会继续重传,从而导致网络堵塞程
度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但
是出发点不同,流量控制是为让接受方能来得及接收,而拥塞控制是为了降低整个
网络的拥堵程度

拥塞控制方法分为:慢开始、拥塞避免、快重传、快恢复

1、发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并动态变化。
拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但是要网络出现拥塞,拥塞窗口就减少一些。
判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(发生超时重传)。
2.方法将拥塞窗口作为发送窗口,即swnd = cwnd;
3.维护一个慢开始门限ssthresh状态变量:
当cwnd=ssthresh时,使用慢开始算法;
当cwnd>ssthresh时,停止使用慢开始算法而改变拥塞避免算法

传输过程:

RRT:一个传输轮所经历的时间就是往返时间RRT,一个传输轮次就是发送方给接受方发送数据报文段,接收方给发送方发回相应的确认报文段的过程。

在TCP双方建立罗连连接关系时,拥塞窗口cwnd的值被设置为1,还需设置慢开始门限sstresh,然后执行慢开始算法,发送方每收到一个对新报文的确认时,拥塞窗口的值就增大(指数增长)
当拥塞窗口增长到慢开始门限值时,使用拥塞避免算法拥塞窗口线性增长(每次+1)
发生超时重传时,说明可能发生了网络拥塞,将慢开始门限的值更新为发生拥塞时拥塞窗口的一半;将拥塞窗口值变为1,并重新开始执行慢开始算法
在这里插入图片描述

1.慢开始

从1开始指数增长到限定大小的过程。

一开始cwnd=1,而发送窗口等于拥塞窗口,因此发送方只能发送一个数据报文段,接收方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2.发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文段后,将拥塞窗口的值变为4,发送方此时可以连续发送四个报文段。

当拥塞窗口cwnd的值等于慢开始门限值时,采用拥塞避免算法。

2.拥塞避免

超过限定大小之后线性增长的过程,以及发送丢包(发生了拥塞)后将拥塞窗口改为1,并把限定大小减半的过程。

每个传输轮次,拥塞窗口cwnd只能线性加1,并非指完全能够避免拥塞,而是只在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。当发生超时重传时,ssthresh=cwnd/2,cwnd=1.重新开始慢开始算法。

慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法,但是有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这就导致发送方超时重传,并误认为网络发生了拥塞。发送方错误启动慢开始算法,从而降低传输效率。

3.快重传

发送方只要一连接收到三个重复确认就应该立即重传对方尚未接收的报文段,而不必等重传计时器超时后发送。由三个重复应答判断有包丢失,重新发送丢包的信息。
在这里插入图片描述

4.快恢复

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法:
发送方将慢开始门限ssthresh和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法。
也有的快恢复实现十八快恢复开始时的拥塞窗口调整为当前窗口的一半,也就是新的ssthresh+3。因为收到3个重复确认,就表明由三个数据报文段已经离开了网络,所以可以增大拥塞窗口。
在这里插入图片描述

八、对称加密和非对称加密以及CA

1.对称加密

对称加密也叫私钥加密指加密和解密使用相同的密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,他要求接受方和发送方在安全通信之前,商量一个密钥。对称加密算法的安全性依赖于密钥,泄露密钥就意味着任何人都可以对它们发送或接受的消息解密,所以密钥的保密性对通信至关重要。

特点:
算法公开,计算量小,加密速度快,加密效率高。
缺点:
交易双方都使用相同的钥匙,安全性得不到保证。此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一钥匙,这会使发收双方所拥有的钥匙数量呈几何数增长,密钥管理成为用户的负担。对称加密算法分布在网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高

常见的对称加密算法有:DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、AES。

2.非对称加密

非对称加密算法需要两个密钥:公开密钥和私有密钥
公开密钥和私有密钥是一对,如果公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称算法。
非对称加密算法实现信息交换的基本过程:

甲方生成一对密钥并将其中一把作为公钥向其他方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。

常见的非对称加密算法:RSA、ECC、Diffe-Hellman、EI、 Gamal、DSA(数字签名用)。

3.CA证书

如果你自己通过RAS算法生成了一个私钥和公钥,在公钥发送给客户端的过程中有可能被篡改其他的公钥,而客户在没有其他措施的保护下是不知道该公钥是否就是服务器那边的私钥对应的公钥。公钥有可能在分发的过程中被篡改。因此就需要一个第三方机构来证明客户端收到的公钥是没被篡改的。这个中间机构,就是数字证书认证机构,其颁发的证书也就是我们常说的CA证书。

证书签名、证书分发以及证书验证的过程
1.服务端在分发公钥之前需要向CA机构申请将要给分发的公钥进行数字签名
2.对于CA机构来说,其也有两个密钥,我们称之为CA私钥和CA公钥,CA机构先将服务端的公钥用数字摘要算法生成摘要。然后用CA私钥将这个摘要进行加密处理,生成数字签名。服务端将数字签名和公钥绑定在一起形成数字证书,发送给客户端。
3.当客户端收到数字证书之后,会验证其有效性,大部分客户端都会预先装CA机构的公钥。客户端使用CA公钥对数字证书上的签名进行验证,就是使用CA公钥对CA私钥加密的内容进行解密,将解密后的内容与服务端的公钥经过数字摘要算法生成的摘要进行匹配,如果匹配成功,说明该证书合法,就是相对应的服务端发送过来的,否则就是非法证书。
4.验证完服务端公钥的合法性后,就可以使用该公钥进行加密通信了。

九、HTTP和HTTPS的不同

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能够加密传输,于是网景公司设计了SSL协议用于对HTTP协议传输的数据进行加密,从而诞生了HTTPS。

1.区别

1.HTTPS协议需要用到CA申请证书,一般免费证书较少,因而需要一定费用。
2.HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SLL加密传输协议。
3.HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.HTTP的连接很简单,是无状态的,HTTPS协议是由SLL+HTTP协议构成的可进行假面传输、身份认证的网络协议,比HTTP协议安全。(无状态的意思是其数据包的发送、传输和接受都是独立的,无连接的意思是指通信双方都不长久的维持对方的任何信息。)

2.HTTPS的工作原理

1.client_hello

客户端发送请求,以明文传输请求信息,包含版本信息,加密套件候选列表、压缩算法候选列表、随机数、扩展字段等信息
支持的最高TSL协议版本Version。
客户端支持的加密套件列表,每个加密套件对应TLS原理中的四个功能组合:认证算法、密钥交换算法(密钥协商)、对称加密算法(信息加密)、信息摘要(完成行校验)。
支持的压缩算法列表,用户后续的信息压缩传输。
随机数random_C,用于后续的密钥生成。
扩展字段,支持协议与算法的相关参数以及其他辅助信息。

2.server_hello+server_certificate+sercer_hello_done

server_hello:服务端返回协商的信息结果,包括选择使用的协议版本,选择的加密套件,选择的压缩算法,随机数random_S等,其中随机数用于后续的密钥协商。
server_certificate:服务端配置对应的证书链,用于身份验证与密钥交换;
sercer_hello_done:通知客户端server_hello信息发送完成。

3.客户端验证数字证书的合法性

验证公钥是不是相应的服务端发送过来的,防止中途被篡改。

浏览器用内置的CA公钥对数字证书的数字签名进行解密,并用数字摘要算法对数字证书中的公钥进行处理生成本地的数字签名,然后与CA解密后的数字签名进行匹配,确认数字证书的有效性。如有问题,则提示风险。

4.客户端生成随机数Pre_master,并用公钥加密发送给服务端

此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数random_C和random_S与计算产生的Pre_master。计算得到协商密钥。

enc_Key = Fuc(random_C,random_S,Pre_master)

客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。encrypted_handshake_message,结合之前所有通信参数的hash值与其他相关信息生成一段数据,采用协商密钥session secret与算法进行加密,然后发送给服务器用于数据与握手验证。

5.服务端用自己的私钥进行解密得到随机数,生成通信密钥。

服务器用私钥解密后得到的Pre_master数据,基于之前交换的两个明文随机数,计算得到通信密钥。
change_cipher_spec,验证通过之后,服务器同样发送change_cipher_spec以告知客户端后续的通信都采用协商的密钥与算法进行加密通信。

6.双方enc_key密钥进行通信

7.总结

个人认为:HTTPS通信的核心就是浏览器用非对称加密算法对密钥进行加密,服务端解密获得密钥后用该密钥进行传输。就是非对称加密算法+对称加密算法。而CA证书只有一个作用,因为非对称加密需要传送公钥,CA就是确保这个公钥中途没有被修改,是相应的服务端发来的。

十、HTTP长连接、短链接

在HTTP/1.0中默认使用短链接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或者其他类型的WEB页中包含有其他的Web资源(JavaScript文件,图片,CSS),遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1开始,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议会在响应头加入这行代码:

Connection:Keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器端之间用于传输HTTP数据的连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持,他有一个保持时间,可以在不同的服务器软件中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短链接,实质上是TCP协议的长连接和短链接。

1.TCP短链接

模拟一下TCP短链接的情况:client向server发送连接请求,server接收到请求,然后双方建立连接,client向server发送消息,server回应client,然后一次请求就完成了。这时候双方任意都可以发起close操作,不过一般都是client先发起close操作。短链接一般只会用在client/server间传递一次请求操作。
短链接的优点:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段。

2.TCP长连接

模拟一下长连接的情况:client向server发起连接,server接受client连接,双方建立连接,client与server完成一次请求后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。
TCP的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图在服务器端检测到这种半开放的连接。
如果一个给定的连接在两小时内没有任何动作,服务器就像客户端发送一个探测报文段,根据客户端响应探测4个客户端状态:
1.客户端主机依然正常运行,且服务器可达。此时客户的TCP响应正常,服务器将保活定时器复位。
2.客户主机已经奔溃,并且关闭或者正在重新启动。上述情况客户端都不能响应TCP。服务端将无法收到客户端对探测的响应。服务器总共发送10个这样的探测,每个间隔75秒。若服务器没有收到任何一个响应,他就认为客户端已经关闭并终止连接。
3.客户端崩溃并且已经重新启动。服务器将受到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
4.客户机正常运行,但是服务器不可达,第二种类似。
长连接的优点
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。

十一、路由器和交换机的区别

这两个主要的工作都是转发数据。
1.路由器是工作在网络层的,交换机工作在链路层。
2.路由器:寻址、转发(依靠IP地址);交换机:过滤,转发(依靠MAC
地址)
3.路由器内有一份路由表,里面有他的寻址信息,他收到网络层的数据包后,会根据路由表和选路算法将数据包转发到下一站(路由器、交换机、目的主机)。
4.交换机内部有一张MAC表,里面存放着和他相连的所有设备的MAC地址,它会根据收到的数据帧的首部信息内的目的MAC地址在自己表中查询,如果有就转发,没有就放弃。
每个路由器与其之下连接的设备,其实构成一个局域网,交换机工作在路由器之下,也即是交换机工作在局域网之内,交换机用户局域网内网的数据转发,路由器用于连接局域网和外网

举个例子:我们每个人相当于主机,路由器相当于快递员,宿管阿姨相当于交换机,学校就是个局域网。
快递员根据学校地址(IP)把包裹送到学校,再根据公寓号(子网IP)把快递交给这个楼的宿管阿姨,宿管阿姨根据你的名字(MAC)交给你

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值