原创不易,如果需要转载请附上本连接
计算机网络
1. 三次握手和四次挥手
-
建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
-
服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
-
客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
-
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
-
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
-
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
-
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
-
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
-
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
TCP的三次握手与四次挥手理解及面试题(很全面)
2. TIME_CLOSE 和 TIME_WAIT 的状态和意义
TIME_CLOSE 表示接受到了对方申请关闭连接的请求,但是这个时候可能你的应用层还有事情需要处理。
TIME_WAIT 会默认等待2MSL时间后,才最终进入CLOSED状态。
3. TCP 如何保证可靠传输
-
确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
-
数据校验
-
数据合理分片和排序:TCP会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
-
流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
-
拥塞控制:当网络拥塞时,减少数据的发送。
4. 流量控制和拥塞控制
流量控制
- 滑动窗口
数据的传送过程中很可能出现接收方来不及接收的情况,这时就需要对发送方进行控制以免数据丢失。利用滑动窗口机制可以很方便地在TCP连接上对发送方的流量进行控制。 - 延迟ACK
如果TCP对每个数据包都发送一个ACK确认,那么只是一个单独的数据包为了发送一个ACK代价比较高,所以TCP会延迟一段时间,如果这段时间内有数据发送到对端,则捎带发送ACK,如果在延迟ACK定时器触发时候,发现ACK尚未发送,则立即单独发送。
拥塞控制
- 慢启动
- 拥塞避免
- 快重传
- 快恢复
5. CRC 循环校验的算法
现实中通信链路都不会是理想的,比特在传输的过程中可能会出现差错,0变成1,1变成0.这就叫做比特差错。因此为了保证数据传输的可靠性,在计算网络传输数据时,必须采用各种检验措施来处理比特差错。在数据链路层广泛使用的是循环冗余的CRC检错技术。
CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。
6. 如何使用 UDP 实现可靠传输
最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。
1、添加seq/ack机制,确保数据发送到对端
2、添加发送和接收缓冲区,主要是用户超时重传。
3、添加超时重传机制。
7. 为什么不能是两次握手
标准答案:第三次握手时为了防止已失效的连接请求报文段有传送到B,因而产生错误。
8. SYN FLOOD 是什么
SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击。效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求。
说到原理,还得从TCP如何建立连接(Connection)讲起。通信的双方最少得经过3次成功的信息交换才能进入连接全开状态(Full-Open),行话叫建立TCP连接的3次握手(TCP three-way handshake)。
9. HTTPs 和 HTTP 的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
HTTPS和HTTP的区别主要如下:
- HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
- HTTP是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
HTTP与HTTPS的区别
10. HTTPS 的原理,客户端为什么信任第三方证书
这个前提是Bob知道Susan的公钥。更重要的是,和消息本身一样,公钥不能在不安全的网络中直接发送给Bob。
此时就引入了证书颁发机构(Certificate Authority,CA),CA数量并不多,Bob客户端内置了所有受信任CA的证书。CA对Susan的公钥(和其他信息)数字签名后生成证书。
Susan将证书发送给Bob后,Bob通过CA证书的公钥验证证书签名。
Bob信任CA,CA信任Susan 使得 Bob信任Susan,信任链(Chain Of Trust)就是这样形成的。
事实上,Bob客户端内置的是CA的根证书(Root Certificate),HTTPS协议中服务器会发送证书链(Certificate Chain)给客户端。
11. HTTP 方法了解哪些
- GET:向特定资源发送请求,查询数据
- POST:向指定的资源,提交数据进行处理请求,有可能创建或修改已有数据
- HEAD:和Get请求相一致,只不过不会返回响应体,这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。(用于获取报头)
- OPTIONS:返回服务器对特定资源所支持的http的请求,可以用来向Web服务器发送请求来测试服务器的功能性
- PUT:向指定资源位置上传最新的内容
- DELETE:请求服务器删除Request-URI所标识的资源
- TRACE:回显服务器收到的请求,主要用于测试或诊断
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
12. HTTP 异常状态码知道哪些
HTTP状态码是当用户在浏览网页的时候,浏览器会返回一个HTTP状态码,来响应浏览器的请求HTTP状态码一般是3位数
常见HTTP状态码:
200:请求成功
301:资源(网页)别永久转移到其他URL
404:请求的资源不存在
500:服务器内部错误
HTTP状态码分类:
1**:服务端收到请求,要求请求方继续执行操作
100 继续,客户端继续请求
101 切换协议 服务器根据客户端的请求切换协议
2**:成功,操作被成功接收并处理
200 请求成功,一般用于get、post请求
201 已创建 请求成功并创建新的资源
202 已接受 请求已接受,但还没处理
204 接受了请求并处理,但是还没有返回内容
3**:重定向,需要进一步的操作以完成请求
301 端请求的网页别永久的移动到其他地方
4**:客户端错误
400 客户端语法错误
401 请求要求用户验证信息
403 禁止访问
404 找不到网页
5**:服务端错误
500 服务器内部错误
503 用于超载或系统维护,暂时无法处理客户端请求
HTTP的状态码知道那些?分别什么意思?
13. HTTP 长连接短连接使用场景是什么
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
而像WEB网站的HTTP服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。
HTTP长连接、短连接究竟是什么?
14. ARP 攻击
ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址。
ARP 病毒攻击是局域网最常见的一种攻击方式。由于TCP/IP协议存在的一些漏洞给ARP病毒有进行欺骗攻击的机会,ARP利用TCP/IP协议的漏洞进行欺骗攻击,现已严重影响到人们正常上网和通信安全。当局域网内的计算机遭到ARP的攻击时,它就会持续地向局域网内所有的计算机及网络通信设备发送大量的ARP欺骗数据包,如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况。
ARP攻击
图解ARP协议(一)
图解ARP协议(二)ARP攻击篇
15. NAT 原理
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明
16. DNS 服务器与提供内容的服务器的区别
DNS 全名叫 Domain Name Server,中文俗称“域名服务器”,在说明 DNS Server 之前,可能要先说明什么叫Domain Name(域名)。正如上面所讲,在网上辨别一台电脑的方法是利用 IP地址,但是 IP用数字表示,没有特殊的意义,很不好记,因此,我们一般会为网上的电脑取一个有某种含义又容易记忆的名字,这个名字我们就叫它“Domain Name"。
17. 怎么实现 DNS 劫持
DNS劫持:
DNS劫持又称域名劫持,是bai指在劫持的网络范围内拦du截域名解析的zhi请求,分析请求的域名,把审查范围以dao外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。
技术实现:
理论上说,运营商掌握了HTML页面的全部代码,它可以做任何的事情,真正无缝地植入广告,然后返还给用户。但是,这种广告的植入是批量的行为,如果要针对不同的网站页面分别去设置广告代码,代价未免太高了一点。另一方面,植入的JavaScript代码片段很容易受到不同DOM环境和JavaScript代码环境本身的影响,而植入广告,不能影响到原有网站页面的展示和行为。为了尽可能地减少植入广告对原有网站页面的影响,运营商通常会通过把原有网站页面放置到一个和原页面相同大小的iFrame里面去,通过iFrame来隔离广告代码对原有页面的影响。
基本原理:
DNS(域名系统)的作用是把网络地址(域名,以一个字符串的形式)对应到真实的计算机能够识别的网络地址(IP地址),以便计算机能够进一步通信,传递网址和内容等。由于域名劫持往往只能在特定的被劫持的网络范围内进行,所以在此范围外的域名服务器(DNS)能够返回正常的IP地址,高级用户可以在网络设置把DNS指向这些正常的域名服务器以实现对网址的正常访问。所以域名劫持通常相伴的措施——封锁正常DNS的IP。
如果知道该域名的真实IP地址,则可以直接用此IP代替域名后进行访问。比如访问百度域名,可以把访问改为202.108.22.5,从而绕开域名劫持。
18. 对称加密和非对称的区别,非对称加密有哪些
对称加密和非对称的区别
- 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
- 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
- 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
非对称加密有哪些?
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用于密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
19. AES 的过程
20. 安全攻击有哪些
一、被动攻击
被动攻击的本质就是窃听和监听数据传输。攻击者的目标是获取传输的数据信息。
被动攻击的两种形式是消息内容泄露攻击和流量分析攻击
被动攻击是非常难以检测,因为它们没有改变数据。尽管如此,防范这些攻击还是切实可行的,通常使用加密的方式来去实现。因此,对付被动攻击的重点是防范而不是检测。
- 消息内容泄露攻击
这个我们很容易理解,电话交谈,电子邮件消息和传输文件中都有可能包含敏感或机密的信息。我们需要阻止攻击者获取这些信息。 - 流量分析攻击
流量分析攻击更加的巧妙。假设我们已经有一种方法可以掩盖消息内容或者其他信息,确保攻击者即使获取信息,他们也不能从中读取有用的信息,通常掩盖信息的方法是加密。如果我们已经做了适当的保护,但攻击者仍然可能观察到这些信息的模式。攻击者可以得知其位置和身份,并且得到交换信息的频率和长度。对于猜测信息的性质很有帮助。
二、主动攻击
主动攻击包含改写数据流和错误数据流的添加,它可以划分为4类:假冒、重放、改写信息和拒绝服务。
- 假冒
即假冒身份,经过实体认证,得到一些权限,进行权限攻击。 - 重放
重放涉及被动获取数据单元并按照它之前的顺序重新传输,此外来产生一个非授权的效应。 - 改写
是指合法消息的某个部分被篡改,或者消息被延迟,被重排,从而产生非授权效应 - 拒绝服务
可以阻止或禁止对通信设备的正常使用和管理。这个攻击可能有一个特殊目标:比如一个实体可能禁止把所有的消息发送到一个特定的目的地;另一种拒绝服务的形式是对整个网络的破坏,是网络瘫痪或消息过载从而丧失网络性能。
21. DDOS 有哪些,如何防范
-
SYN Flood
SYN Flood攻击是利用TCP协议三次握手的机制来进行攻击,通过对服务器主机发送大量伪造源IP和源端口的SYN或ACK包,耗尽服务器资源,导致服务器拒绝访问。 -
LAND attack
LAND attack攻击与SYN floods类似,区别在于LAND attack攻击包中的原地址和目标地址都是攻击对象的IP,导致系统被陷入死循环,直至系统资源被耗尽而死机。 -
IP Spoofing
IP Spoofing攻击常见的攻击手段之一,攻击者向服务器发送一个虚假包,包中的地址设置为错误值,导致服务器接收到这个虚假包后会返回接收,但因为这个包的地址是错误的,所以是永远回不到发送该包的电脑处,这就使得服务器一直开启监听端口且一直处于等待状态,浪费系统资源,导致正常用户访问出现问题。 -
ICMP floods
ICMP floods攻击可能是所有攻击手段中最容易避免的了,ICMP floods攻击是向那些没有设置好的路由器大量发送广播信息,导致系统资源被占用,从而让正常用户无法使用互联网。 -
Application
Application攻击与上面几种攻击方式都有所不同,它主要是针对应用层攻击,类似我们常遇到的游戏人数过多导致“暴服”有点类似,也是以消耗系统资源来达到攻击目的。