高级程序员知识学习(计算机网络知识点) - Go语言中文社区

高级程序员知识学习(计算机网络知识点)


计算机网络中常考的知识点有:http协议(报文结构,断点续传,多线程下载,什么是长连接)/tcp协议(建连过程,慢启动,滑动窗口,七层模型)网络安全、网络的负载均衡、网络的访问、网络的API网关技术、TCP的流量控制和TCP的拥塞控制。

 


TCP/IP模型

HTTP和TCP UDP 只是一种的连接的协议。而不是的数据的传输的协议。

TCP/IP模型

HTTP和TCP UDP 只是一种的连接的协议。而不是的数据的传输的协议。

https://images2015.cnblogs.com/blog/983980/201611/983980-20161122175036159-1060298763.png

那一层

协议

应用层

HTTP、FTP、Telent、SMTP、TFTP、SNMP、DHCP

会话层

 

传输层

TCP、UDP、DCCP、SCTP、RTP、RSVP、PPTP

网络层

IP、IPX、RIP、OSPF

数据链路层

ARP、RARP、SDLC、HDLC、PPP、STP、帧中继

物理层

EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45、fddi

应用层:为应用程序提供服务并规定应用程序中通信相关的细节;包括的协议如下:

①:超文本传输协议HTTP:这是一种最基本的客户机/服务器的访问协议;浏览器向服务器发送请求,而服务器回应相应的网页。

②:文件传送协议FTP:提供交互式的访问,基于客户服务器模式,面向连接 使用TCP可靠的运输服务。 主要功能:减少/消除不同操作系统下文件的不兼容性

③:远程登录协议TELNET:客户服务器模式,能适应许多计算机和操作系统的差异,网络虚拟终端NVT的意义

④:简单邮件传送协议SMTP:Client/Server模式,面向连接 。基本功能:写信、传送、报告传送情况、显示信件、接收方处理信件

⑤:DNS域名解析协议:DNS是一种用以将域名转换为IP地址的Internet服务

⑥:简单文件传送协议TFTP:客户服务器模式,使用UDP数据报,只支持文件传输,不支持交互,TFTP代码占内存小

⑦:简单网络管理协议(SNMP): SNMP模型的4个组件:被管理结点、管理站、管理信息、管理协议。

SNMP代理:运行SNMP管理进程的被管理结点。 

对象:描述设备的变量

管理信息库(MIB):保存所有对象的数据结构

⑧DHCP动态主机配置协议: 发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名 Options –可选参数字段,参考定义选择列表中的选择文件。

表示层:将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式;主要负责数据格式的转换,确保一个系统的应用层信息可被另一个系统应用层读取。具体来说,就是将设备固有的数据格式转换为网络标准传输格式,不同设备对同一比特流解释的结果可能会不同;因此,主要负责使它们保持一致。

会话层:负责建立和断开通信连接(数据流动的逻辑通路),记忆数据的分隔等数据传输相关的管理。

传输层:只在通信双方的节点上(比如计算机终端)进行处理,而无需在路由器上处理,传输层是OSI中最重要、最关键的一层,是唯一负责总体的数据传输和数据控制的一层;

传输层提供端到端的交换数据的机制,检查分组编号与次序,传输层对其上三层如会话层等,提供可靠的传输服务,对网络层提供可靠的目的地站点信息主要功能。

在这一层,数据的单位称为数据段(segment)

主要功能:

①:为端到端连接提供传输服务

②:这种传输服务分为可靠和不可靠的,其中Tcp是典型的可靠传输,而Udp则是不可靠传输

③:为端到端连接提供流量控制,差错控制,服务质量(Quality of Service,QoS)等管理服务

包括的协议如下:

TCP:传输控制协议,传输效率低,可靠性强

UDP:用户数据报协议,适用于传输可靠性要求不高,数据量小的数据(比如QQ)

DCCP、SCTP、RTP、RSVP、PPTP等协议

网络层:将数据传输到目标地址;目标地址可以使多个网络通过路由器连接而成的某一个地址,主要负责寻找地址和路由选择,网络层还可以实现拥塞控制、网际互连等功能。

在这一层,数据的单位称为数据包(packet)

网络层协议的代表包括:IP、IPX、RIP、OSPF

数据链路层:负责物理层面上的互联的、节点间的通信传输(例如一个以太网项链的2个节点之间的通信);该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

在这一层,数据的单位称为帧(frame)

数据链路层协议的代表包括:ARP、RARP、SDLC、HDLC、PPP、STP、帧中继等

物理层:负责0、1 比特流(0/1序列)与电压的高低、逛的闪灭之间的转换。规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性;该层为上层协议提供了一个传输数据的物理媒体。只是说明标准。

在这一层,数据的单位称为比特(bit)

属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45、fddi令牌环网等

IP 来访问服务器详细流程

客户端和服务器端的连接方式:(长连接和端连接)

1、全量 C(IP+port) +S(IP +port)

2、下一跳机制:三个数据 1网卡的地址 2服务器的ip地址   3port 端口号

通过的IP和子网掩码做& 运算——网络号——通过ISP运营商——目标服务器

URL查找的全过程

1、输入地址

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

2、浏览器查找域名的 IP 地址  

  1、请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。

2、如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。

3、查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。

4、根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。

5、本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。

6、最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

Http三次和四次挥手机制

TCP 在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。

第一次握手:主机 A 发送位码为 syn=1,随机产生 seq number=1234567 的数据包到服务器,主机 B由 SYN=1 知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=( 主 机 A 的seq+1),syn=1,ack=1,随机产生 seq=7654321 的包

第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码ack 是否为 1,若正确,主机A会再发送 ack number=(主机 B 的 seq+1),ack=1,主机 B 收到后确认

四次挥手:(为了合理的释放资源)

TCP 建立连接要进行三次握手,而断开连接要进行四次。这是由于 TCP 的半关闭造成的。因为 TCP 连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个 FIN 来向另一方通告将要终止这个方向的连接。

1关闭客户端到服务器的连接:首先客户端 A 发送一个 FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位 FIN=1,序列号 seq=u

2服务器收到这个 FIN,它发回一个 ACK,确认号 ack 为收到的序号加 1。

3关闭服务器到客户端的连接:也是发送一个 FIN 给客户端。

4客户段收到 FIN 后,并发回一个 ACK 报文确认,并将确认序号 seq 设置为收到序号加 1。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

为什么不能用两次握手进行连接?

答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接

TCP和UDP的区别?

TCP

UDP

是可靠传输

是不可靠传输

面向连接

无连接

传输数据有序

不保证数据的有序性

不保存数据边界

保留数据边界

传输速度相对UDP较慢

比较快

有流量控制和拥塞控制

UDP没有

TCP是重量级协议

UDP是轻量级协议

TCP首部较长20字节

UDP首部较短8字节

HTPS的连接过程

建立连接获取证书

1)SSL 客户端通过 TCP和服务器建立连接之后(443 端口),并且在一般的 tcp 连接协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息, SSL 的服务器端会回应一个数据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证书里面包含了服务器信息:域名。申请证书的公司,公共秘钥)证书验证

2) Client 在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共秘钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。

数据加密和传输

3) 如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。然后发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。

Https的长连接和短连接 长轮训 短轮训

长连接:在一个TCP连接上可以发送多个数据包,但是如果没有数据包发送时,也要双方发检测包以维持这个长连接;三次握手后连接,不断开连接,保持客户端和服务端通信,直到服务器超时自动断开连接,或者客户端主动断开连接。

短连接:当双方需要数据交互的时候,就建立一个TCP连接,本次交互完之后就断开这个连接;三次握手后建立连接,发送数据包并得到服务器返回的结果后,通过客户端和服务器的四次握手后断开连接。

什么时候用长连接,短连接?

长连接:多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

短链接:WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

短轮询和长轮询

1. 短轮询:重复发送Http请求,查询目标事件是否完成,优点:编写简单,缺点:浪费带宽和服务器资源。

2. 长轮询:在服务端hold住Http请求(死循环或者sleep等等方式),等到目标时间发生,返回Http响应。优点:在无消息的情况下不会频繁的请求,缺点:编写复杂

我们日常是的一种的长连接的是使用但是有一个超时机制。超过一定时候就会默认断开。

浏览器发生302跳转背后的逻辑?301是永久重定向

浏览器重定向(302)次数限制问题。重定向限制是指浏览器设置,限制你的浏览器的次数。会接受“重定向”从一个主机到另一个。例如,一个网站可能已经从一个服务器或URL移动到另一个技术或其他原因,为了更方便用户,网站所有者可以实施了一项命令,告诉浏览器自动走到另一个位置(重定向)。重定向限制错误可能发生无意中当一个web页面或页面无意中创建一个循环。例如,如果页面重定向到本身,或B页面重定向回页面,那么您的web浏览器将开始构建连接在循环的每一根琴弦,直到超过限制。

SSL的交互流程?

安全套接字协议是Web浏览器与Web服务器之间安全交换信息的协议。SSL协议的三个特性

1保密:在握手协议中定义了会话密钥后,所有的消息都被加密。

2鉴别:可选的客户端认证,和强制的服务器端认证。

3完整性:传送的消息包括消息完整性检查(使用MAC)。

https://img-blog.csdn.net/20160317095155108?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

TCP的滑动窗口的原理

作用1. 提供TCP可靠性:对发送的数据进行确认2. 流量控制:窗口大小随链路变化

TCP窗口机制:TCP中窗口大小是指tcp协议一次传输多少个数据。TCP窗口机制有两种,一种是固定窗口大小,另一种是滑动窗口。数据在传输时,TCP会对所有数据进行编号,发送方在发送过程中始终保持着一个窗口,只有落在发送窗口内的数据帧才允许被发送;同时接收方也始终保持着一个接收窗口,只有落在窗口内的数据才会被接收。这样通过改变发送窗口和接收窗口的大小就可以实现流量控制。

TCP窗口大小:TCP的窗口滑动技术通过动态改变窗口的大小来调节两台主机之间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口,一个用于接收数据,一个用于发送数据。接收方设备要求窗口大小为0时,表明接收方已经接收了全部数据,或者接收方应用程序没有时间读取数据,要求暂停发送。

    TCP在传送数据时,第一次接受方窗口大小是由链路带宽决定的,但是接收方在接收到的数据后,返回ack确认报文,同时也告诉了发送方自己的窗口大小,此时发送方第二次发送数据时,会改变自己的窗口大小和接收方一致。

    当窗口过大时,会导致不必要的数据来拥塞我们的链路,但是窗口太小时,会造成很大的延时,比如为1时,发送方每发送一个数据,接收方就会返回一个ack报文,在发送方未接收到接收方的确认报文ack之前不会进行下一次发送。

窗口滑动协议:

窗口大小是指无需等待确认就可以继续发送数据的最大值,上图的窗口大小是4000字节(4段)发送前4段时,无需ACK,直接发送。收到第一个ACK后,滑动窗口向后移动,继续发送第五段的数据,操作系统内核为了维护这个滑动窗口,需要开辟发送缓冲区来记录当前还有哪些数据没有应答,只有应答的数据才会从缓冲区中删除,窗口越大,则网络的吞吐率就越高。

滑动窗口丢包原理

当某一段报文丢失了,图中(1001-2000)数据段丢失了,接收方没有接收到该数据段,则会一直给发送端发送ACK(下一个是1001),如果发送端连续收到同样的ACK(下一个是1001),就会将对应的(1001-2000)重新发送,这时候如果接收端收到1001后,再次返回的就是ACK(7001)。这种机制被称为“高速重发机制”(快速重传)

接收端的下一个2001丢失了,但是发送端收到了ACK(下一个3001),说明1-3000的数据段已经接收到了,数据已经传输到了发送端,所以不需要理会。

HTTP2.0

HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语义兼容的基础上,进一步减少了网络的延迟。实现低延迟高吞吐量。对于前端开发者而言,减少了优化工作。本文将重点围绕以下几点新特性的作用、工作过程以及如何更出色的完成了优化工作来介绍HTTP2.0。

1.1 什么是SPDY协议

SPDY是Speedy的昵音,意为“更快”。它是Google开发的基于TCP协议的应用层协议。目标是优化HTTP协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。SPDY协议的核心思想是尽量减少TCP连接数。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。

1.2 HTTP1.X的缺点

HTTP1.x有以下几个主要缺点:

1、HTTP/1.0一次只允许在一个TCP连接上发起一个请求,HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题,因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。

    2、单向请求,只能由客户端发起。

    3、请求报文与响应报文首部信息冗余量大。

    4、数据未压缩,导致数据的传输量大

HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据。基于文本的方式传输数据存在很多缺陷,文本的表现形式有多样性,因此要做到健壮性考虑的场景必然有很多,但是二进制则不同,只有0和1的组合,因此选择了二进制传输,实现方便且健壮。

二进制分帧

在HTTP2.0中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。为了保证HTTP不受影响,那就需要在应用层(HTTP2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层。在二进制分帧层上,HTTP2.0会将所有传输的信息分为更小的消息和帧,并采用二进制格式编码,其中HTTP1.x的首部信息会被封装到Headers帧,而Request Body则封装到Data帧。

首部压缩

HTTP1.1并不支持HTTP首部压缩,为此SPDY和HTTP2.0出现了。SPDY是用的是DEFLATE算法,而HTTP2.0则使用了专门为首部压缩设计的HPACK算法。

HTTP每次通讯(请求或响应)都会携带首部信息用于描述资源属性。

在HTTP1.0中,我们使用文本的形式传输header,在header中携带cookie的话,每次都需要重复传输几百到几千的字节,这着实是一笔不小的开销。

在HTTP2.0中,我们使用了HPACK(HTTP2头部压缩算法)压缩格式对传输的header进行编码,减少了header的大小。并在两端维护了索引表,用于记录出现过的header,后面在传输过程中就可以传输已经记录过的header的键名,对端收到数据后就可以通过键名找到对应的值。

多路复用

在HTTP1.x中,我们经常会使用到雪碧图、使用多个域名等方式来进行优化,都是因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。

HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。 通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。

请求优先级

把HTTP消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。

服务器推送

HTTP2.0新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求。

服务端根据客户端的请求,提前返回多个响应,推送额外的资源给客户端。如下图,客户端请求stream 1(/page.html)。服务端在返回stream 1的消息的同时推送了stream 2(/script.js)和stream 4(/style.css)

服务端推送是一种在客户端请求之前发送数据的机制。在HTTP2.0中,服务器可以对一个客户端的请求发送多个响应。如果一个请求是由你的主页发送的,服务器可能会响应主页内容、logo以及样式表,因为他知道客户端会用到这些东西。这样不但减轻了数据传送冗余步骤,也加快了页面响应的速度,提高了用户体验。

推送的缺点:所有推送的资源都必须遵守同源策略。换句话说,服务器不能随便将第三方资源推送给客户端,而必须是经过双方的确认才行。

TCP协议特点

TCP协议的主要特点

(1)TCP是面向连接的运输层协议;

(2)每一条TCP连接只能有两个端点(即两个套接字),只能是点对点的;

(3)TCP提供可靠的传输服务。传送的数据无差错、不丢失、不重复、按序到达;

(4)TCP提供全双工通信。允许通信双方的应用进程在任何时候都可以发送数据,因为两端都设有发送缓存和接受缓存;

(5)面向字节流。虽然应用程序与TCP交互是一次一个大小不等的数据块,但TCP把这些数据看成一连串无结构的字节流,它不保证接收方收到的数据块和发送方发送的数据块具有对应大小关系,例如,发送方应用程序交给发送方的TCP10个数据块,但就受访的TCP可能只用了4个数据块久保收到的字节流交付给上层的应用程序,但字节流完全一样。

TCP的可靠性原理

可靠传输有如下两个特点:

a.传输信道无差错,保证传输数据正确;

b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;

(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。

(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。

(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。、

  1. HTTP1.1协议

HTTP1.1的请求协议报文结构如下图,大体上可以分为三块,即请求行、头部、消息主体。

HTTP请求方法有哪几种?

常用的有GET、POST请求。

1、OPTIONS(options):返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

2、HEAD(head):向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

3、GET(get):向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

4、POST(post):向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资 源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT(put):向指定资源位置上传其最新内容

6、DELETE(delete):请求服务器删除Request-URL所标识的资源

7、TRACE(trace):回显服务器收到的请求,主要用于测试或诊断

8、CONNECT(connect):HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

Http的请求头部

头部可以分成三个部分,为常用头域、请求头域、实体头域。其中常用头域和实体头域部分内容在响应协议部分也有相同的定义。

HTTP响应协议详解

https://upload-images.jianshu.io/upload_images/5776456-c7bf755f6afb1f36?imageMogr2/auto-orient/strip|imageView2/2/w/576

Http的转态响应码

HTTP连接池实现原理

随着微服务的流行,服务之间的http调用越来越多

1、降低延迟:如果不采用连接池,每次连接发起Http请求的时候都会重新建立TCP连接(经历3次握手),用完就会关闭连接(4次挥手),如果采用连接池则减少了这部分时间损耗,

2、支持更大的并发:如果不采用连接池,每次连接都会打开一个端口,在大并发的情况下系统的端口资源很快就会被用完,因为TCP请求大部分都是在很短时间内内结束,每个连接关闭之后都有一个TIME_WAIT, 如果并发很大,TIME_WAIT会导致连接又不能及时关闭,短时间内就会消耗掉大量端口(一个TCP连接Client占用一个端口),而单机的端口是有限的,端口消耗完之后不能建立新连接

一个HttpRequestBase在被httpclient执行后,会经过一个链路被一个个组件处理。这里使用了职责链的设计模式,一个组件处理完后,就会交给下一个组件处理。这样做的好处就是如果要移除一个组件或者添加一个新的组件来实现对请求的一些处理非常方便。

连接池结构如下:

连接池管理器会为每个httpRoute单独的维护一个连接池。管理着available、leased、pending这些对象。同时,CPool本身也会维护一个总的available、leased、pending对象,是那些routeToPool中available、leased、pending的总和

分配连接 & 建立连接

回收连接 & 保持连接

  1. HTTP 2.0 协议详解

Websocket协议

WebSocket是HTML5一种新的协议,WebSocket是真正实现了全双工通信的服务器向客户端推的互联网技术,是一种在单个TCP连接上进行全双工通讯协议。Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP无关了。即:websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工的TCP连接。

服务器的推送

由于http是一种无状态的单向的协议, 是客户端发起一个请求建立一个连接把数据返回给客户端。但是常见的应用中的电商扫码登入和扫码付款 在线文档编辑?怎么解决?利用就是当服务器的数据发生变化的时候通知浏览器进行刷新?

解决方案的实现:

Ajax的短轮询:

就是通过定时向服务的发送的Ajax的请求处理。缺点;浪费服务器的性能、数据同步不及时。

基于http的长连接的服务的推送技术

Comet应用模型:基于的Ajax的长轮询 和基于长连接的服务推送模型

SSE原理(单项和协议 只能支持的文本协议)

SSE是server-sent-event 是html5的规范的一部分,和长轮训的方式很像,只有一点区别:就是在方流式在客户端请求服务端并建立连接后服务器不会关闭连接 每次有次数是就向客户端输出,而不像长轮训每一次输出后悔关闭连接。()

考虑到当tomcat相应完请求后会将关闭servlet的销毁。那怎么办?

将数据的以流的方式写回到客户端。可以实现这样一种避免servlet的销毁而不能连接的一种状态。

京东和淘宝都采用的是的段轮询的方式的做登入扫码(Ajax的短轮询)

微信的的是登入采用的是的Ajax的长轮询的

在线文档的编辑采用的websocket来访问

  1. 计算机网络安全

csrf攻击是什么?怎么防范

CSRF也被称为中文全称是叫跨站请求伪造

一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。常用于盗取账号、转账、发送虚假消息等。攻击者利用网站对请求的验证漏洞而实现这样的攻击行为,网站能够确认请求来源于用户的浏览器,却不能验证请求是否源于用户的真实意愿下的操作行为。

防范手段:

1 验证 HTTP Referer 字段:HTTP头中的Referer字段记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施 CSRF攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证Referer值来防御CSRF 攻击。

2 关键操作页面加上验证码,后台收到请求后通过判断验证码可以防御CSRF。但这种方法对用户不太友好。

3 在请求地址中添加token并验证:CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于cookie中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有token或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。这种方法要比检查 Referer 要安全一些,token 可以在用户登陆后产生并放于session之中,然后在每次请求时把token从session中拿出,与请求中的 token 进行比对,但这种方法的难点在于如何把 token 以参数的形式加入请求。对于GET请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。而对于 POST 请求来说,要在 form 的最后加上 <input type="hidden" name="csrftoken" value="tokenvalue"/>,这样就把token以参数的形式加入请求了。

4 在HTTP 头中自定义属性并验证:这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

什么叫 CC 攻击?什么叫 DDOS 攻击?

    CC攻击,主要是用来攻击页面的,模拟多个用户不停的对你的页面进行访问,从而使你的系统资源消耗殆尽。

    DDOS 攻击,中文名叫分布式拒绝服务攻击,指借助服务器技术将多个计算机联合起来作为攻击平台,来对一个或多个目标发动 DDOS 攻击。

怎么预防 CC 攻击和 DDOS 攻击?

防 CC、DDOS 攻击,这些只能是用硬件防火墙做流量清洗,将攻击流量引入黑洞。

DNS被劫持了怎么处理

DNS劫持是很多站长或企业网站运维人员常遇到的网络攻击事件,网站遭到DNS劫持轻则影响网速,重则不能上网,而且很有可能被可能会被恶意指向各种钓鱼网站,严重影响客户个人信息账户泄密的风险。今天墨者安全就来给大家说说DNS是如何被劫持的?会造成什么样的后果?

1、利用DNS服务器进行DDOS攻击

正常的DNS服务器递归询问过程可能被利用成DDOS攻击。假设攻击者已知被攻击机器IP地址,然后攻击者使用该地址作为发送解析命令的源地址。这样当使用DNS服务器递归查询后,DNS服务器响应给最初用户,而这个用户正是被攻击者。那么如果攻击者控制了足够多的肉鸡,反复的进行如上操作,那么被攻击者就会受到来自于DNS服务器的响应信息DDOS攻击。

2、DNS缓存感染

攻击者使用DNS请求,将数据放入一个具有漏洞的DNS服务器的缓存当中。这些缓存信息会在客户进行DNS访问时返回给用户,从而把用户客户对正常域名的访问引导到入侵者所设置挂马、钓鱼等页面上,或者通过伪造的邮件和其他的server服务获取用户口令信息,导致客户遭遇进一步的侵害。

3、DNS信息劫持

原则上TCP/IP体系通过序列号等多种方式避免仿冒数据的插入,但入侵者如果通过监听客户端和DNS服务器的对话,就可以猜测服务器响应给客户端的DNS查询ID。攻击者在DNS服务器之前将虚假的响应交给用户,从而欺骗客户端去访问恶意的网站。假设当提交给某个域名服务器的域名解析请求的数据包被截获,然后按截获者的意图将一个虚假的IP地址作为应答信息返回给请求者。这时,原始请求者就会把这个虚假的IP地址作为它所要请求的域名而进行连接,显然它被欺骗到了别处而根本连接不上自己想要连接的那个域名。

面对DNS劫持,墨者安全建议个人站长和企业网站运维人员,除了要加强自身网络安全意识,还要通过专业的网络安全公司接入防护措施,提高网站安全性能,保障网站正常运行

ARP劫持了怎么办

及时防止的办法是将ARP的网关MAC地址由动态更新改为静态绑定。

要学会如何通过IP或MAC地址寻找攻击根源。

电脑遭受ARP攻击之后,通常最明显的现象是电脑无故出现断网,并且网络时连时断。同时中ARP的电脑,也会成为扰乱局域网中其它电脑上网的罪魁祸首。因此确保局域网中每一台电脑的安全,是解决局域网遭受ARP攻击最彻底的方法。

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。

    所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

在局域网中,通过ARP协议来完成IP地址转换为第二层物理地址(即MAC地址)的,ARP协议对网络安全具有重要的意义。

ARP的工作原理

正常情况下,每台主机都会在自己的ARP缓冲区中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;

    如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。

如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。

1.要发送网络包给192.168.1.1,但不知MAC地址?

2.在局域网发出广播包“192.168.1.1的MAC地址是什么?”

3.其他机器不回应,只有192.168.1.1回应“192.168.1.1的MAC地址是00-aa-00-62-c6-09”

从上面可以看出,ARP协议的基础就是信任局域网内所有的人,那么就很容易实现在以太网上的ARP欺骗。更何况ARP协议是工作在更低于IP协议的协议层,因此它的危害就更加隐蔽。

ARP的欺骗原理:

ARP类型的攻击最早用于盗取密码之用,网内中毒电脑可以伪装成路由器,盗取用户的密码, 后来发展成内藏于软件,扰乱其他局域网用户正常的网络通信,下面我们简要阐述ARP欺骗的原理:假设这样一个网络,一个交换机连接了3台机器,依次是计算机A,B,C

    A的地址为:IP:192.168.1.1 MAC: AA-AA-AA-AA-AA-AA

    B的地址为:IP:192.168.1.2 MAC: BB-BB-BB-BB-BB-BB

    C的地址为:IP:192.168.1.3 MAC: CC-CC-CC-CC-CC-CC

第二步:正常情况下在A计算机上运行ARP -A查询ARP缓存表应该出现如下信息。

    Interface: 192.168.1.1 on Interface 0x1000003

    Internet Address Physical Address Type

    192.168.1.3 CC-CC-CC-CC-CC-CC dynamic

第三步:在计算机B上运行ARP欺骗程序,来发送ARP欺骗包。

    B向A发送一个自己伪造的ARP应答,而这个应答中的数据为发送方IP地址是192.168.1.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本来应该是CC-CC-CC-CC-CC-CC,这里被伪造了)。当A接收到B伪造的ARP应答,就会更新本地的ARP缓存(A可不知道被伪造了)。而且A不知道其实是从B发送过来的,A这里只有192.168.1.3(C的IP地址)和无效的DD-DD-DD-DD-DD-DD MAC地址。

第四步:欺骗完毕我们在A计算机上运行ARP -A来查询ARP缓存信息。你会发现原来正确的信息现在已经出现了错误。

    Interface: 192.168.1.1 on Interface 0x1000003

    Internet Address Physical Address Type

    192.168.1.3 DD-DD-DD-DD-DD-DD dynamic

上面例子中在计算机A上的关于计算机C的MAC地址已经错误了,所以即使以后从A计算机访问C计算机这个192.168.1.3这个地址也会被ARP协议错误的解析成MAC地址为DD-DD-DD-DD-DD-DD的。

    当局域网中一台机器,反复向其他机器,特别是向网关,发送这样无效假冒的ARP应答信息包时,严重的网络堵塞就会开始。由于网关MAC地址错误,所以从网络中计算机发来的数据无法正常发到网关,自然无法正常上网。

这就造成了无法访问外网的问题,另外由于很多时候网关还控制着我们的局域网LAN上网,所以这时我们的LAN访问也就出现问题了。

  1. 网络均衡负载

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带宽、增加

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41605937/article/details/105993239
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-26 22:43:47
  • 阅读 ( 1224 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢