答:OSI七层协议是一种网络模型,有物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
这个模型的目的是为了提供一个通用的框架,使得各种不同的网络技术和设备可以进行互操作。每层都有各自的功能和职责,同时各层之间又通过接口相互通信。
以下是各层的主要功能:
- 应用层:为应用程序提供服务,比如FTP、SMTP、HTTP等。
- 表示层:负责数据格式转换,比如HTML、CSS、JPEG等。
- 会话层:建立、维护和管理会话。
- 传输层:建立和维护端到端的连接,包括TCP和UDP。
- 网络层:负责数据传输线路的选择和路由选择,比如IP和ICMP。
- 数据链路层:提供介质访问和链路管理,比如ARP、RARP和MAC。
- 物理层:以二进制形式在物理媒介上传输数据。
分层的好处主要有以下几点:
- 易于实现和标准化:各层独立,可以将大问题分解为多个小问题,更容易实现和标准化。
- 灵活性好:如果某一层发生变化,只要接口不变,不会影响其他层。
- 分层后,用户只关心用到的应用层,其他层用户可以复用。
- 各层之间相互独立:高层不需要知道底层的功能是采取硬件来实现的,只需要知道通过底层的接口来获得所需要的服务。
答:
- 应用层:这一层负责处理特定的应用程序细节,例如HTTP、FTP等协议。
- 传输层:这一层主要负责提供端到端的数据传输服务,其中最主要的协议是TCP和UDP。TCP是一种可靠的传输协议,它确保数据在传输过程中不丢失、不重复或无序,而UDP则是一种不可靠的传输协议,它不提供任何可靠性保证。
- 网络层:这一层主要负责处理网络级别的通信,其中最主要的协议是IP协议。IP协议负责将数据包从一个主机发送到另一个主机,它可以根据网络拓扑和路由选择最佳路径来传输数据。
- 链路层:这是最低的层次,负责处理硬件级别的通信,例如以太网协议。
相比之下,OSI(开放系统互联)模型是一种网络设计和协议规范,它定义了七层协议栈,从高到低分别是应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。OSI模型旨在提供一个通用的网络模型,以便不同类型系统的互操作性。然而,OSI模型在实际应用中并没有得到广泛采用,而TCP/IP协议已经成为互联网的标准协议。
答:TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。
UDP(用户数据报协议)是一种无连接,基于数据包的通信协议,它不需要在传输前建立连接,也不保证数据的可靠性和顺序性。
答:
序列号(seq)、确认号(ack)、同步序列号(syn)和结束标志(fin)
三次握手是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。(SYN,ACK)
第一次握手:客户端向服务端发送数据包(SYN),服务端收到。服务端知道客户端"发"和自己"收"没问题
第二次握手:服务端向客户端返回数据包(SYN+ACK),客户端收到。客户端知道服务端"收发"和自己"收发"没问题
第三次握手:客户端向服务端返回数据包(ACK),服务端收到。服务端知道客户端"收"和自己"发"没问题
为了保证可靠,连接重要,断开当然也重要,所以有四次挥手。
第一次挥手:客户端向服务端发送断开信号(FIN)。
第二次挥手:服务端回答说我知道了你等会(ACK)。。。
第三次挥手:服务端说,好了,你断开吧(FIN)。
第四次挥手:客户端说,好,我断开了。(ACK)
答:如上,如果只有两次握手,服务端不会知道客户端能不能接收到自己的数据,无法保证连接可靠
答:因为第二次挥手后,服务端要确保自己的数据发送完毕,可能出现数据传输未完成就断开连接的情况。
避免不必要的连接重置,由于TCP是一个全双工协议,两个方向都有数据传输。如果只进行两次挥手,即客户端和服务器都只发送一个FIN报文,那么会导致连接重置,因为两个方向都还存在数据传输。而通过四次挥手,可以等待两个方向都没有数据传输时才断开连接,避免了不必要的连接重置。
答:全双工协议是一种允许两个方向独立同时传输数据的通信方式。
半双工协议则是一种通信方式,它在某一时刻只允许一个方向传输数据。
答:TCP粘包是指,当应用程序通过TCP发送数据时,由于TCP的发送窗口大小和接收窗口大小不匹配,以及网络状况的复杂性,导致发送的数据并没有按照应用程序预期的格式被接收。
TCP 传输数据基于字节流,从应用层到 TCP 传输层的多个数据包是一连串的字节流是没有边界的,而且 TCP 首部并没有记录数据包的长度,所以 TCP 传输数据的时候可能会发送粘包和拆包的问题;
解决方法:
- 定长帧:这是一种最简单的解决方案,即规定每个数据包的长度是一定的。这样,接收方每次只需读取固定长度的数据,然后解析。但是这种方法的缺点是可能会浪费带宽。
- 标志位:在每个数据包的开头和结尾添加标志位,如开始标志和结束标志。接收方在接收到数据后,通过检查标志位来判断数据是否完整。
- 滑动窗口协议:这是一种更复杂的解决方案,涉及到TCP的滑动窗口协议。具体来说,发送方在发送数据时,同时也告诉接收方自己的发送窗口大小。接收方根据这个信息调整自己的接收窗口大小,确保每次只接收一个完整的数据包。
- 字节流处理:这种方法需要应用程序在发送数据时,对数据进行适当的处理,使得每个数据包都是完整的。例如,可以在每个数据包的末尾添加一个校验和,这样即使多个数据包粘在一起,也可以通过校验和来判断数据是否完整。
答:TCP的滑动窗口机制是一种控制数据流量和确保数据可靠传输的协议。它通过调整发送方和接收方之间的数据窗口大小来控制数据的发送和接收。
具体来说,TCP的滑动窗口协议实现了以下功能:
- 流量控制:TCP的滑动窗口机制可以限制数据的发送速度,以防止接收方因处理速度跟不上而造成数据丢失。接收方通过通告自己的窗口大小来控制发送方的发送速率,接收方会根据网络负载和自身处理能力调整窗口大小。
- 拥塞控制:当网络出现拥塞时,TCP的滑动窗口机制可以调整发送方的数据流量,以减轻网络的拥塞。当接收方检测到网络拥塞时,会通告发送方减小窗口大小,以减少数据的发送速率。
- 可靠传输:TCP的滑动窗口机制实现了数据的可靠传输。发送方在发送数据时,会根据接收方的确认(ACK)来确认数据是否已经被接收。如果接收方没有及时发送确认,发送方会重发数据,直到收到确认或者超过重传次数限制。
答:TCP通过以下几种机制来保证有效传输:
- 检验和:TCP在发送数据前计算一个检验和,接收方在收到数据后会再次计算检验和。如果两个检验和不一致,接收方会认为数据在传输过程中发生了错误,要求发送方重新发送。
- 序列号:TCP给每个字节分配一个唯一的序列号,这样接收方可以按正确的顺序重新组合收到的数据。
- 确认应答:当接收方收到正确的数据时,会向发送方发送一个确认应答(ACK),告诉发送方哪些字节已经收到。
- 重发控制:当发送方没有收到确认应答或者收到表示数据错误的确认应答时,会重新发送数据。重发次数有限,如果超过限制,发送方 会放弃重发并通知应用层。
- 连接管理:TCP通过三次握手(3-way handshake)来建立连接,通过四次挥手(4-way handshake)来关闭连接。这可以确保双方都清楚连接的状态。
- 窗口控制:TCP使用滑动窗口机制来控制发送方可以发送的数据量。窗口大小是接收方告诉发送方的已准备好接收的字节的数量。
慢开始和拥塞避免:在发送方维护一个拥塞窗口(cwnd),大小等于发送窗口,通过出现了超时来判断网络出现拥塞。慢开始的思路是一开始发送方发送一个字节,在收到接收方的确认后,发送的字节数量增大一倍(也就是按照指数增长的速率),从小到大逐步增大cwnd,直到cwnd达到慢开始门限(ssthresh)。当cwnd < ssthresh时使用慢开始算法,当cwnd = ssthresh时可以使用慢开始算法也可以使用拥塞避免算法,当cwnd > ssthresh时使用拥塞避免算法。拥塞避免算法思路是增长速率变为线性增长,也就是每经过一个往返时间RTT就把发送方的cwnd加1。
快重传和快恢复:快重传算法是当接收方收到一个失序的报文段后就立即发出重复确认,这样可以迫使发送方早些重传失序的报文段。快恢复算法是当发送方收到三个重复的确认就执行快恢复算法,而不是等待出现超时才能进行判断网络出现拥塞。快恢复的思路是先把cwnd减小一些,然后转入拥塞避免算法。
答:
HTTP1.0 HTTP1.1 HTTP2.0 TCP连接 每次请求都建立新的TCP连接 支持同一TCP连接发送多个请求 用二进制协议,支持同一TCP连接并发处理多个请求和响应 缓存处理 HTML标记实现缓存控制 用二进制格式,支持更多的缓存控制策略。 网络连接优化 断点续传 多路复用,减少连接建立和关闭的开销 管道化请求 不支持管道化请求,只有在收到上一个请求的响应后才能发送下一个请求 支持管道化请求,可以在同一TCP连接内同时发送多个请求 Host头处理 在请求头中包含Host信息 请求头中不再包含host信息,而是将其移到了帧的流标识符部分。 头部压缩 使用HPACK算法对请求头进行压缩,减少需要传输的数据量,提高传输速度想·
答:
- 200 OK:请求成功,用于表示正常的响应。
- 201 Created:请求成功,并且创建了新的资源。
- 202 Accepted:请求已接收,但未处理完毕。
- 204 No Content:请求成功,但无内容返回。
- 301 Moved Permanently:请求的资源已被永久重定向到新的URL。
- 302 Found:请求的资源临时重定向到新的URL。
- 304 Not Modified:请求的资源未修改,可以使用缓存。
- 400 Bad Request:请求格式错误。
- 401 Unauthorized:请求需要身份验证。
- 403 Forbidden:请求被拒绝。
- 404 Not Found:请求的资源未找到。
- 500 Internal Server Error:服务器内部错误。
- 501 Not Implemented:服务器不支持请求的方法。
- 502 Bad Gateway:服务器作为网关时,收到无效的响应。
- 503 Service Unavailable:服务器无法处理请求。
- 504 Gateway Timeout:网关未在规定时间内收到响应。
答:
- 浏览器根据输入的URL进行DNS解析,以找到对应的IP地址。这包括检查浏览器缓存、系统缓存和路由器缓存,以及向DNS服务器发送请求。
- 浏览器与找到的IP地址建立TCP连接,这是通过三次握手过程完成的。
- 一旦连接建立,浏览器将向Web服务器发送HTTP请求,例如GET请求。
- 服务器收到请求后,会处理请求并发送响应,这可能包括HTML、CSS、JavaScript和其他类型的数据。
- 浏览器接收到响应后,会解析并渲染HTML和CSS,以便用户可以看到页面。
- 浏览器还会与服务器保持连接,以获取可能在未来需要的数据,如页面上的动态内容。
答:域名解析是域名到IP地址的转换过程,可以包括以下步骤:
- 浏览器搜索自己的DNS缓存,看是否已经有对应的域名。
- 如果DNS缓存中没有找到,浏览器会搜索操作系统中的DNS缓存,如内存中的DNS缓存或者本地的hosts文件。
- 如果仍然没有找到,浏览器会使用递归查询的方式查询本地域名解析服务器。本地域名解析服务器可以手动设置,未设置则使用路由器中本地DNS地址。
- 本地域名服务器采用迭代查询的方式,向根域名服务器查找,根域名服务器返回com域的顶级域名服务器的地址。
- 本地域名服务器向com域的顶级域名服务器发送请求,com域的顶级域名服务器返回下一级的域名服务器的地址。
- 本地域名服务器向下一级的域名服务器发送请求,下一级的域名服务器返回负责该域名的权威域名服务器的地址。
- 本地域名服务器向权威域名服务器发送请求,权威域名服务器返回该域名的IP地址。
- 本地域名服务器将IP地址返回给浏览器,同时自己也将IP地址缓存起来。
如果本地域名解析服务器无法找到对应的IP地址,则会向根域名服务器或其他上级域名服务器发送请求,直到找到对应的IP地址。
答:
- 保持心跳:在应用层面上,可以设定一个心跳机制,即每隔一段时间,客户端向服务器发送一个心跳包,表示客户端还在连接状态。服务器在收到心跳包后,可以回复一个确认包,以表示连接仍然有效。如果服务器长时间未收到心跳包,可以认为客户端已经断开连接,从而释放资源。
- 数据交换:如果客户端和服务器之间有数据需要持续交换,可以设置一个数据交换机制。例如,客户端向服务器发送一个请求,服务器在处理完请求后,可以等待一段时间,等待客户端的回复。如果客户端在规定的时间内回复了数据,那么服务器可以继续处理下一个请求。如果服务器在规定的时间内未收到客户端的回复,可以认为客户端已经断开连接。
- 长轮询:长轮询是一种实现实时通信的技术,它可以让客户端在一段时间内保持连接状态,等待服务器发送数据。当服务器有新的数据时,可以向客户端发送数据,然后等待客户端的回复。如果客户端在规定的时间内回复了数据,那么服务器可以继续等待下一个数据。如果服务器在规定的时间内未收到客户端的回复,可以认为客户端已经断开连接。
- WebSocket:WebSocket是一种实现双向通信的技术,它可以让客户端和服务器之间建立持久连接,并实现实时通信。WebSocket可以在HTTP协议的基础上进行通信,因此它可以很好地兼容现有的Web应用。
答:
HTTP/1.1 引入了长连接的概念,可以重用现有的连接而不是每次请求都建立新的连接。
实现长连接的基本方法是设置 HTTP 头部字段 “
Connection: keep-alive
”。当客户端发送带有此头部字段的请求时,如果服务器能够支持持久连接,它将在响应中包含相同的头部字段,并保持连接开启,等待客户端的下一个请求。然而,长连接并不是永远保持的。它们通常在以下情况下超时:
- 超时时间(Timeout)设置:服务器和客户端可能都有设置超时时间的机制。如果服务器或客户端在指定的时间内没有收到任何数据,连接可能会被关闭。这个超时时间可能会在服务器的配置文件或应用程序代码中设置。
- 保持活动数据流:为了保持长连接活跃,客户端需要定期发送数据。如果客户端长时间没有发送任何数据,服务器可能会认为连接已经断开并关闭它。同样,如果服务器长时间没有收到任何数据,它可能会选择关闭连接。
- 网络问题:如果网络出现故障或不稳定,可能导致连接断开。在这种情况下,连接可能会在重新建立连接之前超时。
答:URL编码是一种将特殊字符转换为URL可接受格式的编码方式。它主要用于将表单数据作为URL参数发送到服务器。URL编码将所有字符转换为有效的URL字符集中的字符,以确保数据在URL中传输时不会被误解或误处理。例如,空格被编码为"%20",而不是普通的空格,以避免在URL中产生混淆。
XSS攻击(Cross Site Scripting)是一种网络安全漏洞,攻击者可以利用该漏洞向受害者的网页注入恶意代码,并获取受害者的敏感信息。XSS攻击的重点在于跨站,即攻击者通过构造恶意的网页,诱导受害者点击或访问该网页,从而执行攻击者所构造的脚本。
下面是一个简单的XSS攻击的例子:
假设你有一个网站,用户可以在该网站上发布评论。当其他用户查看这些评论时,他们会在他们的浏览器中看到这些评论。攻击者可以发布一个包含恶意脚本的评论,当其他用户查看该评论时,脚本就会在用户的浏览器中执行。
例如,攻击者可以发布以下评论:
<script> alert('Hello, XSS!'); script>
当其他用户查看该评论时,浏览器会自动执行该脚本,弹出一个包含“Hello, XSS!”的警告框。
攻击者可以利用这个漏洞来执行更复杂的恶意操作,比如窃取用户的敏感信息(如cookie、用户名和密码等),操纵用户的浏览器行为,或者利用浏览器中的漏洞执行其他恶意操作。
为了防止XSS攻击,我们需要对用户输入的参数进行严格的校验和转义,同时对返回的数据进行相应的处理,确保数据的安全性。
答:
- 证书费用:HTTPS需要向CA(证书颁发机构)申请证书,一般免费证书较少,因此需要一定费用。而HTTP不需要证书。
- 安全性:HTTPS是具有安全性的SSL加密传输协议,比HTTP协议更安全。
- 连接方式:HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
答:
对称加密和非对称加密主要在密钥、加密和解密过程以及安全性和性能方面有显著区别。
- 密钥:
- 对称加密:只有一个密钥,既用于加密又用于解密,如AES。
- 非对称加密:有两个密钥,一个用于加密(公钥),另一个用于解密(私钥),如RSA。
- 加密和解密过程:
- 对称加密:加密和解密使用同一个密钥,因此加密和解密速度较快,但安全性相对较低,因为密钥可能会在传输过程中被截获。
- 非对称加密:加密使用公钥,解密使用私钥,因此加密和解密速度较慢,但安全性较高,因为私钥在传输过程中需要进行加密保护,不容易被截获。
- 安全性和性能:
- 对称加密:安全性相对较低,因为密钥可能会被截获。同时,由于加密和解密使用同一个密钥,所以需要在安全环境下保存该密钥,管理和保护成本较高。另外,对称加密算法的破解难度相对较低,对于大量数据的加密解密效率不高。
- 非对称加密:安全性较高,因为私钥无法从公钥中推导出来,所以即使公钥被截获,也不能解密已经加密的数据。同时,由于非对称加密使用的两个密钥(公钥和私钥)可以进行相互验证,因此提供了更高的安全性。但是,由于非对称加密算法的复杂性,破解难度相对较高,对于大量数据的加密解密效率也不如对称加密。
答:ARP协议(Address Resolution Protocol)是一种网络协议,用于将IP地址转换为MAC地址。其工作原理如下:
- 每台主机都会在自己的ARP缓冲区(ARP Cache)中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。
- 当源主机需要将一个数据包发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址。如果存在,就直接将数据包发送到这个MAC地址;如果不存在,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。
- 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
- 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。
如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
答:
- TCP:
- HTTP:这是最常见的基于TCP的应用层协议,用于在Web浏览器和Web服务器之间进行通信。
- HTTPS:这是安全的HTTP协议,通过TCP连接在Web浏览器和Web服务器之间进行通信。
- FTP:文件传输协议(File Transfer Protocol,FTP)也使用TCP。
- Telnet:这是一种简单的远程登录协议,使用TCP。
- SMTP:简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)用于电子邮件的传输,它也使用TCP。
- POP3:邮局协议版本3(Post Office Protocol 3)用于接收电子邮件,它也使用TCP。
- IMAP:互联网消息访问协议(Internet Message Access Protocol,IMAP)用于访问电子邮件,它也使用TCP。
- SSH:安全外壳协议(Secure Shell,SSH)用于远程登录和远程执行命令,它也使用TCP。
- UDP:
- DNS:域名系统(Domain Name System,DNS)用于将域名转换为IP地址,它使用UDP。
- NTP:网络时间协议(Network Time Protocol,NTP)用于网络时间同步,它使用UDP。
- TFTP:简单文件传输协议(Trivial File Transfer Protocol,TFTP)用于文件传输,它使用UDP。
- SNMP:简单网络管理协议(Simple Network Management Protocol,SNMP)用于网络设备管理和监控,它使用UDP。
- DHCP:动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)用于自动分配IP和其他网络配置参数,它使用UDP。
- VoIP:语音传输协议如SIP和RTP通常使用UDP进行实时通信。
- Video Streaming:视频流服务如RTSP和HLS通常使用UDP。
- Instant Messaging:一些即时消息服务如XMPP和Jabber通常使用UDP
答:停止等待协议是一种简单的自动重传请求(ARQ)协议,用于在通信系统中保证数据可靠传输。它主要应用于两个相互通信的设备之间,以确保数据不因丢包或包乱序而丢失。
该协议的关键特点如下:
- 发送方在发送完一个数据帧后,会暂时保留这个数据帧的副本,等待接收方的确认。
- 接收方在接收到数据帧后,会与本地的接收状态进行比较,确认是否为新的数据帧。如果是新的数据帧,接收方会发送确认,并丢弃重复收到的数据帧;否则,接收方会丢弃重复收到的数据帧,但仍需向发送方发送确认。
- 如果发送方在一段时间内未收到确认,它会重传上一次未确认的数据帧。这个时间间隔被称为超时时间。
答:ARQ协议,即自动重传请求(Automatic Repeat-reQuest),是一种错误纠正协议,属于OSI模型中的数据链路层和传输层。它通过使用确认和重传这两个机制,在不可靠服务的基础上实现可靠的信息传输。
具体来说,ARQ协议的工作方式是接收方在收到发送方发送的数据后,会发送一个确认帧(ACK)给发送方,表示已经成功接收到了数据。如果发送方在一段时间内没有收到确认帧,它会认为数据传输失败,并自动重发该数据。
ARQ协议包括停止等待ARQ协议和连续ARQ协议。停止等待ARQ协议是最简单的ARQ协议,每次发送完一个数据后都会停下来等待接收方的确认,然后再决定是否发送下一个数据。而连续ARQ协议则可以连续发送多个数据,无需等待确认,从而提高了传输效率。
总之,ARQ协议通过自动重传机制来纠正传输错误,确保数据的可靠传输。
答:
TIME-WAIT状态是TCP(传输控制协议)的一种状态,表示TCP连接在完成数据传输后进入的一种状态。在TIME-WAIT状态中,连接会保持一段时间,通常是两个MSL(Maximum Segment Lifetime,最大报文段寿命)的时间,等待旧的报文段消失。
TIME-WAIT状态的作用主要有以下几点:
- 确保最后一个确认报文段已经离开源端,避免由于网络问题导致的重复报文段。
- 防止旧的TCP连接和新的TCP连接同时存在,避免数据包错误地发送给目标端。
- 在双向连接中,如果一方在连接关闭后立即重启连接,而另一方仍然处于TIME-WAIT状态,那么新的连接请求将被拒绝。
TIME-WAIT状态是TCP协议的一个重要组成部分,它可以确保数据传输的可靠性和准确性。