计算机网络面试知识点整理

每次面试问网络都还可以,整理了点资料,应付普通的问题没什么问题了。
除了字节的网络太为难我,其他公司都说回答的很好了。
主要就是 TCP 和 HTTP
花上几天把这些全背过我觉得网络应该就ok了,如果大厂的话可能需要深入。


计算机网络知识点整理

网络分层 ⭐⭐

OSI 将网络分为七层:应用层、表示层、会话层、运输层、网络层、数据链路层、物理层。OSI 七层协议体系结构概念清除,理论完善,但是既复杂也不实用。

TCP/IP 是一个四层体系结构,包含应用层、运输层、网际层和网络接口层(网际层是为了强调该层是为了解决不同网络的互联问题),这种体系结构得到了广泛应用。

但是 TCP/IP 从实质上讲只有最上面三层,最下面的网络接口层并没有什么具体内容,因此一般学习时结合 OSI 和 TCP/IP 的优点,采用一种五层协议的体系结构:

  • 应用层

    应用层的任务是通过应用进程之间的交互来完成特定网络应用。

    应用层协议定义应用进程之间的通信和交互规则,进程即主机中正在运行的程序。应用层协议有域名系统 DNS、支持万维网应用的 HTTP、支持电子邮件的 SMTP 等。

    应用层交互的数据单元是报文 (message)。

  • 运输层

    运输层的任务是负责向两台主机进程之间的通信提供通用的数据传输服务。

    运输层的协议主要有传输控制协议 TCP,它提供面向连接的、可靠的数据传输服务,数据传输单位是报文段(segment);用户数据报协议 UDP,它提供无连接的、尽最大努力的数据传输服务,数据传输单位是用户数据报。

  • 网络层

    网络层的任务是负责为分组交换网上的不同主机提供通信服务,在发送数据时网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。网络层的另一个任务是选择合适的路由,使源主机运输层传下来的分组能够通过网络中的路由器找到目的主机。

    网络层的协议有 IP、ARP、ICMP、IGMP 等。

    网络层使用的中间设备是路由器。

  • 数据链路层

    数据链路层的任务是将网络层交下来的 IP 数据报组装成帧,在两个相邻结点之间的链路上传输帧,每一帧包括数据和必要的控制信息(同步信息、地址信息、差错控制等)。

    数据链路层的协议有 PPP、CSMA/CD 等。

    数据链路层使用的中间设备是网桥或桥接器。

  • 物理层

    物理层的任务是尽可能地屏蔽掉传输媒体和通信手段的差异,使物理层上面的数据链路层感觉不到这些差异,使其只需考虑本层的协议和服务。

    物理层所传输的数据单位是比特,发送方发送1或0,接收方也接收1或0,物理层需要考虑用多大的电压代表1或0。

    物理层使用的中间设备是转发器。


数据链路层的协议 ⭐

点对点协议 PPP

在通信线路质量较差的年代,使用高级数据链路控制 HDLC 作为实现可靠传输的数据链路层协议,但现在 HDLC 已经很少使用了,对于点对点的链路,简单得多的点对点协议 PPP 是目前使用得最广泛的数据链路层协议。

PPP 协议的特点是简单、只检测差错而不纠正差错、不使用序号也不进行流量控制、可同时支持多种网络层协议。


CSMA/CD 协议

以太网采用的是具有冲突检测的载波监听多点接入 CSMA/CD 协议,协议的要点是:发送前先监听、边发送边监听,一旦发现总线上出现了碰撞就立即停止发送。然后按照退避算法等待一段随机时间后再次发送,因此每一个站在自己发送数据之后的一小段时间内存在遭遇碰撞的可能性。以太网上各站点都平等地争用以太网信道。


网络层的协议 ⭐⭐

网际协议 IP

网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一,一般指的是 IPv4。与 IP 协议配套使用的协议还有 ARP、ICMP 和 IGMP,IP 使用 ARP,ICMP 和 IGMP 要使用 IP。由于网际协议 IP 是用来使互连起来的许多计算机网络能够进行通信的,因此 TCP/IP 体系中的网络层也称网际层或 IP 层。

要解决 IP 地址耗尽的问题,根本方法是采用具有更大地址空间的新版本 IP 协议即 IPv6,向 IPv6 过渡可以使用双协议栈或使用隧道技术。


地址解析协议 ARP

由于 IP 协议使用了 ARP 协议,因此把 ARP 协议归到网络层,但 ARP 的作用是通过一个 ARP 高速缓存存储本地局域网的各主机和路由器的 IP 地址到硬件地址的映射表,以从网络层的 IP 地址解析出在数据链路层使用的硬件地址,因此也可以把 ARP 划归在数据链路层。与 ARP 对应的协议是 RARP,逆地址解析协议,作用是使只知道自己硬件地址的主机能够找出 IP 地址,但被 DHCP 协议取代。


路由选择协议 RIP/OSPF/BGP-4

路由选择协议有两大类:内部网关协议,如 RIP 和 OSPF;外部网关协议,如 BGP-4。

RIP 是分布式的基于距离向量的路由选择协议,只适用于小型互联网。RIP 按照固定的时间间隔与相邻路由器交换信息,交换的信息是当前路由表。OSPF 是分布式的链路状态协议,适用于大型互联网,只在链路状态发生变化时才向本自治系统中的所有路由器用洪泛法发送与本路由器相邻的所有路由器的链路状态信息。

BGP-4 是不同自治系统的路由器之间交换路由信息的协议,是一种路径向量路由选择协议。其目标是寻找一条能够到达目的网络且比较好的路由而不是最佳路由。


网际控制报文协议 ICMP

ICMP 报文作为 IP 数据报的数据,加上首部后组成 IP 数据报发送出去,使用 ICMP 并非为了实现可靠传输,ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。

ICMP 的一个重要应用就是分组间探测 PING,用来测试两台主机之间的连通性,PING 使用了 ICMP 回送请求与回送回答报文。


网际组管理协议 IGMP

IP 多播使用 IGMP 协议,IGMP 并非在互联网范围内对所有多播组成员进行管理,它不知道 IP 多播组包含的成员个数也不知道这些成员都分布在哪些网络上。

IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机上的某个进程参加或推出了某个多播组。


运输层的协议 ⭐⭐⭐

用户数据报协议 UDP

UDP 只在 IP 的数据报服务上增加了很少一点功能,就是复用和分用以及差错检测,其特点主要是:UDP是无连接的,发送数据之前不需要建立连接;UDP 使用尽最大努力交付,不保证数据传输的可靠性;UDP 是面向报文的,发送方 UDP 对应用程序交下来的报文在添加首部后就向下交付 IP 层;UDP 没有拥塞控制;UDP 支持一对一、一对多、多对一和多对多的交互通信;UDP 的首部开销小,只有 8 个字节,TCP 需要 20 字节。


传输控制协议 TCP (重点)

特点

  • TCP是面向连接的运输层协议,所谓面向连接,就是指TCP在进行数据通信前需要先建立连接,主要是通过三次握手机制实现,在进行数据通信后,需要断开连接,主要是通过四次挥手机制实现。

  • 每条TCP连接只能有两个端点,每一条TCP连接都是两个端点之间的通信。

  • TCP提供可靠的交付服务,通过TCP发送的数据无差错,不丢失,不重复。

  • TCP是全双工的通信,在发送端和接收端都设有缓存,发送方将数据发送到缓存后就可以做自己的事,接收方将数据放入缓存,上层应用程序会在合适的时机来获取数据。

  • TCP是面向字节流的,所谓流就是流入进程或者从进程重流出的字节序列。虽然应用进程和TCP的交互是一次一个数据块,但是TCP会将数据块看成一连串无结构的字节流,不能保证发送的数据块和接收的数据块大小是一致的,但是字节流一定是完全一样的。

如何保证可靠

TCP的发送的报文是交给IP层传送的,而IP只能提供尽最大努力服务,所以TCP必须采取适当的措施才能使得两个运输层之间的通信变得可靠。理想的通信有两个条件,第一是传输的数据不会出现差错,第二是无论发生数据的速度有多快,接收端都来得及接收。但是在现实的网络环境下几乎是不可能实现的,TCP使用了重传机制来解决传输数据出错的问题,使用流量控制来降低发送端的速度,以便接收端来的及接收。

停止等待协议

每发送一个分组就停下来,等收到了对方对该分组的确认之后再继续发送下一个分组。每发送完一个分组就设置一个超时计时器,如果在规定的时间内没有收到分组的确认消息,就会进行超时重传。在规定时间内收到了确认消息就会撤销计时器。

同时需要注意三点:①计时器设置的超时时间应该稍微长于分组的往返时间,如果时间太长通信效率就会很低,如果时间过短会产生不必要的重传,浪费网络资源。②为每一个分组都设有一个副本,以便超时重传时使用,当收到了分组的确认后再进行清除。③分组和确认分组都必须进行编号,这样才能明确是哪一个分组收到了确认。

ARQ协议

假设分组的确认丢失了,发送方在设定的超时时间内没有收到确认,不知道是自己发送的分组丢失还是接收方的确认丢失,因此发送方需要重传分组。当接收方收到了分组后就丢失这个分组,重新发送确认。

还有一种情况是分组没有丢失但是晚到了,发送端会受到重复确认,会收下并且丢弃,接收端仍然会收到重复的分组,同样丢弃并确认。

上述确认和重传机制,即ARQ automatic repeat request,自动重传请求,接收端不需要向发送端发送重传请求,当超过指定时间时发送端会自动进行超时重传。

效率问题

停止等待协议的优点是简单,缺点是信道利用率太低。信道利用率为TD/(TD+RTT+TA),TD是发送分组的时间,T2是发送确认分组的时间,RTT是往返时间,当RTT远大于TD时通信效率就会非常低。为了提高传输效率,可以采用流水线传输,例如连续ARQ协议和窗口滑动机制。

连续ARQ

连续ARQ规定每收到一个确认就把发送窗口向前滑动一个分组的位置,接收方一般采用累积确认的方式,就是说接收方不必对收到的分组逐个确认,只需要对按序到达的最后一个分组进行确认。优点是实现容易,即使确认丢失也不必重传,确认是不能向发送方反映出接收方已经正确收到的所有分组的消息。例如发送方发生了5个分组,第3个分组丢失了,接收方只能确认前2个,发送方必须把后面3个都重新发送。

滑动窗口机制

滑动窗口以字节为单位。发送端有一个发送窗口,窗口重的序号是允许发送的序号,窗口的后沿是已经发送并且确认的序号,窗口的前沿是不允许发送的序号。窗口的后沿可能不动(代表没有收到新的确认),也有可能前移(代表收到了新的确认),但是不会后移(不可能撤销已经确认的数据)。窗口的前沿一般是向前的,也有可能不动(表示没有收到新的请求或对方的接收窗口变小),也有可能收缩,但是TCP强烈不建议这么做,因为发送端在收到通知前可能已经发送了很多数据,此时如果收缩窗口可能会产生错误。

滑动窗口的状态需要3个指针p1,p2和p3。p1之前的序号表示已经发送并且确认的,p1到p2的序号表示已经发送但还没有确认的,p2到p3表示允许发送的序号,也叫可用窗口,p1到p3表示发送窗口,p3之后的序号表示不可发送的。

发送缓存用来暂时存放发送应用程序传给发送方TCP准备发送的数据和已经发送但还没确认的数据。

接收缓存用来暂时存放按序到达的但尚未被应用程序读取的数据,未按序到达的数据。

注意三点:①发送窗口根据接收窗口设置,但并不总是一样大,还要根据网络的拥塞情况调整。②对于不按序到达的数据,TCP通常存放在接收窗口,等到字节流缺少的字节收到后再按序交付上层应用程序。③接收方必须有累积确认功能,可以减小传输开销,可以在合适的时候发送确认,也可以在自己有数据需要发送时捎带确认。但是接收方不能过分推迟发送确认,不能超过0.5秒。


流量控制

一般我们都希望发送数据的速度尽可能快,但如果发送数据的速度过快,接收端来不及接收,就可能导致数据丢失的问题。所谓流量控制,就是根据接收端的接收能力,动态地调整发送端的发送速度,确保接收端来的及接收。流量控制主要是通过滑动窗口机制实现的。

发送窗口不能超过接收方的接收窗口,在0窗口通知后可能会出现死锁问题,接收方的接收缓冲又有了一些存储空间,但该通知丢失了,发送方和接收方互相等待消息。TCP为每一个连接设有一个持续计时器,只要收到了0窗口通知就启动计时器,到时候发送1字节大小的0窗口探测报文,如果仍是0就重置计时器,如果不是0就打破了死锁的僵局。


拥塞控制

当网络中对资源的需求超过了资源的可用量,就叫做拥塞。当吞吐量明显小于理想的吞吐量时就出现了轻度拥塞,当吞吐量随着负载的增加反而下降时,网络就进入了拥塞状态。当吞吐量降为0时,网络已无法正常工作,进入了死锁。拥塞控制就是尽量减少注入网络的数据,减轻网络中的路由器和链路的负担。

拥塞控制是一个全局性的问题,它涉及网络中的所有路由器和主机,而流量控制只是一个端到端的问题,是两个端点之间通信量的控制。

拥塞控制有开环和闭环手段,开环就是在设计网络时事先将有关发生阻塞的因素考虑到,缺点是系统一旦开始运行就不能更改。闭环则是基于反馈环路动态处理,监测网络以便检测拥塞发生的时间和地点,把拥塞发生的信息传送到可采取行动的地方,调整网络系统的运行解决问题。

拥塞控制主要有四个方法,慢开始,拥塞避免,快重传和快恢复。

所谓慢开始,就是基于窗口的拥塞控制,发送端设有一个拥塞窗口,拥塞窗口取决于网络的拥塞程度,发送窗口就等于拥塞窗口,初始时为了防止注入过多的数据引起网络拥塞,所以将拥塞窗口值设为1,然后逐渐增大拥塞窗口,逐渐增大发送窗口,每经过一次传输轮次,拥塞窗口就加倍。有一个慢开始门限,当小于该值时就使用慢开始,等于时既可以使用慢开始也可以使用拥塞避免,大于该值时使用拥塞避免。

拥塞避免就是每经过一个往返时间RRT将拥塞窗口的值增加1,而不是像慢开始那样加倍地增大拥塞窗口。慢开始不是指窗口增大的速度慢,而是在TCP开始发生报文时先设置拥塞窗口为1,使发送方开始只发送一个报文段,相比一下将许多报文注入到网络慢。

但是有时候个报文段丢失,而网络中并没有出现拥塞,错误地导致慢开始,降低了传输效率。这时应该使用快重传来让发送方尽早知道出现了个别分组的丢失,快重传要求接收端不要等待自己发送数据时再捎带确认,而是要立即发送确认。即使收到了乱序的报文段后也要立即发出对已收到报文段的重复确认。当发送端连续收到三个重复的确认后就知道出现了报文段丢失的情况,就会立即重传,快重传可以使整个网络的吞吐量提升约20%。

当发送方知道了只是丢失了个别报文段使,不会使用慢开始,而是使用快恢复来设置阻塞窗口的值,并开始执行拥塞避免算法。


三次握手

TCP是全双工通信,任何一方都可以发起建立连接的请求,假设A是客户端,B是服务器。

初始时A和B均处于CLOSED状态,B会创建传输进程控制块TCB,然后处于LISTEND状态,监听端口是否收到了TCP请求以便及时响应。

当A要发生数据时,就向B发送一个连接请求报文,TCP规定连接请求报文的SYN=1,ACK=0,SYN表示synchronization,ACK表示acknowledgement,SYN不可以携带数据,但要消耗一个序号,此时A发送的序号seq假设为x。发送完之后,A就进入了SYN-SENT同步已发送状态。

当B收到了A的连接请求报文后,如果B同意建立连接,会发送给A一个确认连接请求报文,其中SYN=1,ACK=1,ack=x+1,seq=y,ack的值为A发送的序号加1,ACK可以携带数据,如果不携带的话,则不消耗序号。发送完之后,B进入SYN-RCVD同步已接收状态。

当A收到了B的确认连接请求报文后,还要对该确认再进行一次确认,报文的ACK=1,ack=y+1,seq=x+1,发送之后A处于established状态,当B接收到该报文后也进入established状态。

之所以要进行三次握手,是因为第二次握手时A知道了自己的发送和接收是没有问题的,而第三次握手时B才能知道自己的发送和接收也都是没有问题的。同时三次握手防止了已失效的连接请求问题,假设这样一种正常情况,A发送的第一个连接请求报文丢失了,之后超时重传,建立了连接,通信之后释放了连接。但假设A第一个发送的连接请求报文并没有丢失,而是在网络中某结点停滞了,之后又到达了B。如果是两次握手,此时B会以为是A请求建立连接,同意之后并不会收到任何数据,因为A已经关闭了,此时B的资源就会被白白浪费。


四次挥手

当A已经没有要发送的数据了,决定释放连接,就会发送一个终止连接报文,其中FIN=1,seq=u,u的值为之前A发送的最后一个序号+1。此时A进入FIN-WAIT-1状态。

B收到该报文后,发送给A一个确认报文,ACK=1,ack=u+1,seq=v,v的值为B之前发送的最后一个序号+1。此时A进入了FIN-WAIT-2状态,但B进入了CLOSE-WAIT状态,但连接并未完全释放,B会通知高层的应用层结束A到B这一方向的连接,此时TCP处于半关闭状态。

当B发送完数据后,准备释放连接时就向A发送连接终止报文,FIN=1,同时还要重发ACK=1,ack=u+1,seq=w(在半关闭状态B可能又发送了一些数据)。此时B进入LAST-ACK状态。

A收到连接终止报文后还要再进行一次确认,确认报文中ACK=1,ack=w+1,seq=u+1。发送完之后进入TIME-WAIT状态,等待2MSL之后进入CLOSED状态,B收到该确认后也进入CLOSED状态。

MSL是最大报文段寿命,之所以要等待2MSL是为了保证A发送的最后一个ACK报文能被B接收,如果A发送的确认报文丢失,B没有收到就会超时重传之前的FIN+ACK报文,而如果A在发送了确认报文之后就立即释放连接就无法收到B超时重传的报文,因而也不会再一次发送确认报文段,B就无法正常进入CLOSED状态。第二点原因是2MSL时间之后,本连接中的所有报文就都会从网络中消失,防止出现三次握手中的已失效的请求报文问题,影响下一次的TCP连接。

之所以不是三次挥手是因为服务器TCP是全双工的,当A发送完数据之后可能B还没有发送完,当B发送完所有的数据之后才会关闭B到A方向的连接。

除此之外,TCP还设有一个保活计时器,用于解决服务器故障的问题,服务器每收到一次客户的数据就重新设置保活计时器,时间为2小时。如果2小时内没有收到就间隔75秒发送一次探测报文,连续10次都没有响应后就关闭连接。


应用层的协议 ⭐⭐⭐

域名解析系统 DNS

DNS 被设计为一个联机分布式数据库系统,并采用客户服务器方式。DNS 使大多数名字都在本地进行解析,仅少量解析需要在互联网上通信,因此 DNS 的效率很高。由于 DNS 是分布式系统,即使单个计算机出现了故障也不会妨碍到整个 DNS 系统的正常运行。

域名的解析过程

主机向本地域名服务器的查询一般都采用递归查询,递归查询指如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份向其他根域名服务器继续发出查询请求报文。递归查询额结果是要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。

本地域名服务器向根域名服务器查询通常采用迭代查询,迭代查询指当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉它该向哪一个域名服务器进行查询。本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文设置的查询方式。


文件传送协议 FTP

FTP 使用 TCP 可靠的运输服务,FTP 使用客户服务器方式,一个 FTP 服务器进程可以同时为多个客户进程提供服务,在进行文件传输时,FTP 的客户和服务器之间要建立两个并行的 TCP 连接:控制连接和数据连接,实际用于传输文件的是数据连接。


超文本传输协议 HTTP (重点)

HTTP是超文本传输协议,规范了浏览器如何向万维网服务器请求万维网文档,服务器如何向浏览器发送万维网文档。从层次的角度看,HTTP是面向事务的应用层协议,是浏览器和服务器之间的传送数据文件的重要基础。

特点

HTTP是无状态的,之所以说无状态是因为HTTP对事务没有记忆性。同一个客户第二次访问同一个服务器,服务器的响应结果和第一次是一样的。HTTP的无状态简化了服务器的设计,允许服务器支持高并发的HTTP请求。如果要解决无状态的问题,可以使用cookie和session。Cookie相当于服务器给浏览器的一个通行证,是一个唯一识别码,服务器发送的响应报文包含 Set-Cookie 首部字段,客户端得到响应报文后把 Cookie 内容保存到浏览器中。客户端之后对同一个服务器发送请求时,会从浏览器中取出 Cookie 信息并通过 Cookie 请求首部字段发送给服务器,服务器就可以识别是否是同一个客户。Session是服务器的会话技术,是存储在服务器的。区别:①Cookie只能存储ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选Session。②Cookie 存储在浏览器中,容易被恶意查看。如果非要将一些隐私数据存在 Cookie 中,可以将 Cookie 值进行加密,然后在服务器进行解密。③对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中。


结构

HTTP报文分为HTTP请求报文和响应报文,请求报文由请求行(请求方法,请求资源的URL和HTTP的版本)、首部行和实体(通常不用)组成。响应报文由状态行(状态码,短语和HTTP版本)、首部行和实体(有些不用)组成。


方法

GET:主要同于获取资源,用于访问被URI统一资源标识符识别的资源。

POST:主要用于传递信息给服务器。

参数:GET和POST的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而POST的参数存储在实体主体中。不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具查看。

安全性:安全的HTTP方法不会改变服务器状态,也就是说它只是可读的。GET方法是安全的,而POST却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。

发送数据:XMLHttpRequest是一个 API,在Ajax中大量使用。它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。

使用XMLHttpRequest时,GET请求发送一个TCP数据包,浏览器同时发送HTTP header和data,服务器响应状态码200。POST每次发送两个TCP数据包,浏览器先发送HTTP header,服务器收到后返回100(continue),浏览器再继续发送data,服务器响应200。

PUT 上传文件 DELETE 删除文件 OPTIONS 查看当前URL支持的HTTP方法 HEAD 获取首部


流程

①先检查输入的URL是否合法,然后查询浏览器的缓存,如果有则直接显示。

②通过DNS域名解析服务解析IP地址,先从浏览器缓存查询、然后是操作系统和hosts文件的缓存,如果没有查询本地服务器的缓存。

③通过TCP的三次握手机制建立连接,建立连接后向服务器发送HTTP请求,请求数据包。

④服务器收到浏览器的请求后,进行处理并响应。

⑤浏览器收到服务器数据后,如果可以就存入缓存。

⑥浏览器发送请求内嵌在HTML中的资源,例如css、js、图片和视频等,如果是未知类型会弹出对话框。

⑦浏览器渲染页面并呈现给用户。


HTTP1.1

HTTP1.0使用的是非持续连接,每次请求文档就有2倍的RTT开销,另外客户和服务器每一次建立新的TCP连接都要分配缓存和变量,这种非持续连接会给服务器造成很大的压力。

HTTP1.1使用的是持续连接,服务器会在发送响应后在一段时间内继续保持这条连接,使同一个浏览器和服务器可以继续在这条连接上传输后续的HTTP请求和响应报文。HTTP1.1的持续连接有两种工作方式,非流水线和流水线方式。非流水线方式就是客户在收到前一个响应后才能发送下一个请求,流水线方式是客户收到响应前就能连着发送新的请求。


HTTPS

特点

HTTP有很大的安全隐患:使用明文进行通信,内容可能会被窃听。不验证通信方的身份,通信方的身份有可能遭遇伪装。无法证明报文的完整性,报文有可能遭篡改。

HTTPS是以安全为目标的HTTP通道,S代表security,让HTTP先和SSL通信,再由SSL和TCP 通信,也就是说 HTTPS使用了隧道进行通信。通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

HTTP的端口是80,而HTTPS的端口是443。

流程

加密算法主要有对称加密和非对称加密,对称加密的运算速度快,但安全性不高。非对称密钥加密,加密和解密使用不同的密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

非对称密钥除了用来加密还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。非对称加密的运算速度慢,但是更安全。HTTPS采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。

  • 浏览器和服务器建立TCP连接后,会发送一个证书请求,其中包含了自己可以实现的算法列表和一些必要信息,用于商议双方使用的加密算法。

  • 服务器收到请求后会选择加密算法,然后返回证书,包含了服务器的信息,域名、申请证书的公司、加密的公钥以及加密的算法等。

  • 浏览器收到之后,检查签发该证书的机构是否正确,该机构的公钥签名是否有效,如果有效就生成对称密钥,并利用公钥对其加密,然后发送给服务器。

  • 服务器收到密钥后,利用自己的私钥解密。之后浏览器和服务器就可以基于对称加密对数据进行加密和通信。


电子邮件系统协议 SMTP/POP3/IMAP

一个电子邮件系统有三个主要组成构件,即用户代理、邮件服务器、以及邮件协议。

从用户代理把邮件传送到邮件服务器,以及在邮件服务器之间的传送都要使用 SMTP,但用户代理从邮件服务器读取邮件时则要使用 POP3 或 IMAP 协议。

基于万维网的电子邮件使用户可以利用浏览器收发电子邮件,用户浏览器和邮件服务器之间使用 HTTP 协议,而邮件服务器之间的传送仍然使用 SMTP 协议。


简单网络管理协议 SNMP

SNMP 由三部分组成,SNMP 本身,负责读取和改变各代理中的对象名及其状态数值;管理信息结构 SMI,定义命名对象和对象类型的通用规则,以及把对象之间值进行编码的基本编码规范 BER;管理信息库 MIB,在被管理的实体中创建命名对象并规定其类型。


WEB安全 ⭐⭐

概述

计算机网络面临的威胁主要有被动攻击和主动攻击。

被动攻击指攻击者从网络上窃听他人的通信内容,也叫截获。在被动攻击中,攻击者只是观察和分析某一协议数据单元PDU而不干扰信息流。攻击者可以通过观察PDU的协议控制信息部分,了解正在通信的协议的地址和身份,通过研究PDU的长度和发送频度,了解所交换的数据的某种性质。这种攻击又叫做流量分析。

主动攻击包括:

  • 篡改:攻击者故意篡改网络上传输的报文,包括彻底中断传送的报文,甚至把完全伪造的报文发给接收端,这种攻击方式也叫做更改报文流。

  • 恶意程序:计算机病毒,能够传染其他程序的程序,主要通过修改其他程序来把自身或自身的变种复制进去完成。计算机蠕虫,通过网络通信能把自己从一个结点发往另一个节点并且自动启动运行的程序。特洛伊木马,它执行的功能并非声称的功能而是恶意程序,例如一个编译程序除了完成编译任务外还偷偷地复制源程序。逻辑炸弹,当运行环境满足某种特殊条件时就会执行特殊功能的程序,例如当日期为22号且为周三的时候就会删除所有文件。后门入侵,指利用系统实现中的漏洞通过网络入侵系统。流氓软件,一种未经用户同意就在用户计算机上安装并损害用户利益的软件。

  • 拒绝服务DoS:攻击者向互联网上某个服务器不停地发送大量分组,使其无法提供正常服务甚至完全瘫痪。如果从互联网成百上千的网站一起攻击一个网站就叫做分布式拒绝服务DDoS,有时也叫网络宽带攻击。

  • ARP欺骗:在使用以太网交换机的网络中,攻击者向某个以太网交换机发送大量的伪造源MAC的地址,以太网交换机收到这样的帧就把虚假的MAC源地址填入到交换表中,由于伪造的数量很大很快就填满了表,导致以太网交换机无法正常工作。

对于主动攻击可以采取适当的措施检测,对于被动攻击通常是检测不出来的。根据这些特点,得出计算机网络安全的主要目标如下:①防止报文内容分析和流量分析。②防止恶意程序。③防止更改报文流和拒绝服务。

安全的计算机网络有4个目标:①保密性,只有信息的发送方和接收方看得懂信息,这是最基本的要求,需要利用密码技术实现。②端点鉴别,鉴别信息的发送方和接收方的真实身份,对于主动攻击非常重要。③信息完整性,确保信息的内容没有被篡改过,和端点鉴别密不可分。④运行安全性,通过访问控制来控制权限,规定每个用户的访问权限。


密码体制

对称密码密钥体制

加密密钥和解密密钥使用相同的密码体制,例如数据加密标准DES,保密性取决于对密钥的保密,而算法是公开的。在DES之后提出了高级加密标准AES来取代DES。

公钥密码体制

又叫公开密钥密码体制,加密和解密使用不同的密钥。产生的主要原因是对称密码密钥体制的密钥分配问题,如果事先约定密钥,就会给密钥的管理和分配带来很大的不便。另一个原因是对于数字签名的需要,许多应用中人们需要通过对纯数字的电子信息签名,表明该信息是由某个特定的人产生的。


数字签名

确保实现以下功能:①报文鉴别,接收者能够核实发送者的身份。②报文的完整性,接收者可以确信收到的报文没有被人篡改过。③不可否认,发送方事后不能抵赖对报文的签名。


鉴别

报文鉴别:鉴别所收到的报文的确是报文发送者自己发送的,而不是其他人伪造或篡改的,包含了端点鉴别和报文完整性的鉴别,通过密码散列函数如MD5、SHA-1,报文鉴别码等实现。

实体鉴别:仅鉴别发送报文的实体,可以是一个人也可以是进程和服务器,这就是端点鉴别。报文鉴别需要对每一个报文进行鉴别,实体鉴别是在系统接入的全部时间内对和自己通信的对方实体验证一次。


网络层安全协议

IPsec,不是一个单独的协议而是IP层提供网络通信安全的协议族,没有限定用户使用哪种加密和鉴别算法,是一个框架,允许通信双方选择合适的算法和参数,为保证互操作性,实现了一套加密算法。

可以划分为三部分:①IP数据报格式的2个协议,鉴别首部AH和封装安全有效载荷ESP。AH可以提供源点鉴别和数据完整性,但是不能保密,而ESP三者皆可。②有关算法的协议。③互联网密钥交换协议IKE。使用AH或ESP的数据报又叫IP安全数据报,有两种工作方式:运输方式,在整个运输层的报文段前后加上若干控制信息,再加上IP首部构成IP安全数据报。隧道形式,在原始IP数据报的前后添加若干控制信息,再加上新的IP首部构成一个IP安全数据报。


运输层安全协议

SSL安全套接字层/TLS 运输层安全

SSL是Netscape开发的安全协议,广泛用于基于万维网的各种网络应用,SSL作用于端系统的应用层HTTP和运输层之间,在TCP之上建立一个安全的连接通道,为TCP传输的数据提供安全保障。SSL的服务:①SSL服务器鉴别,允许用户鉴别服务器的身份,支持SSL客户端通过验证服务器证书,鉴别服务器身份并获取公钥。②SSL客户鉴别,SSL可选的安全服务,允许服务器证实客户身份。③加密的SSL会话,对客户和服务器发送的所有报文进行加密,并检测报文是否被篡改。


防火墙与入侵检测

恶意用户或软件通过网络利用系统的漏洞进行入侵,包括病毒、木马、DoS等。之前讨论的所有安全机制都不能有效的解决这些问题。

防火墙

一种访问控制技术,严格控制进出网络的分组,禁止任何不必要的通信,从而减少潜在侵入的发生。防火墙是一种特殊编程的路由器,安装在一个网点和网络中的其余部分之间,目的是实施访问控制策略。策略是由防火墙单位自行制定的,一般防火墙内的网络叫做可信任网络,防火墙之外的网络叫做不可信网络。防火墙的主要技术分为分组过滤和应用网关。

入侵检测IDS

防火墙应用于入侵发生前,但防火墙不可能阻止所有入侵,所以需要第二道防线也就是入侵检测,应用于入侵发生时。①基于特征的入侵检测,维持一个已知攻击特征的数据库,每个特征是一个于某种入侵活动相关联的规则集,缺点是只能检测已知攻击,对未知攻击束手无策。②基于异常的入侵检测,通过观察正常运行的网络流量,学习正常流量的统计特性和规律,当检测到网络中的流量不合规律时就认为可能发生了入侵。

全部评论
有没有和我一样看到有人发知识点就先收藏一波日后再看的
2 回复
分享
发布于 2020-05-20 20:19
#计算机网络面试# 👈点击话题查看更多同类面经干货!每日面经精选,为你发掘牛客干货!
2 回复
分享
发布于 2020-05-21 11:02
小红书
校招火热招聘中
官网直投
你每次发的知识点整理我都有看,我发现你也是个时间管理达人
1 回复
分享
发布于 2020-05-20 14:32
感觉楼主总结的挺全面的,不过深度不是很够~
2 回复
分享
发布于 2020-05-22 15:29
tql
点赞 回复
分享
发布于 2020-05-20 12:52
为什么我要在大佬的光辉下瑟瑟发抖
点赞 回复
分享
发布于 2020-05-20 13:01
大佬太优秀了。
点赞 回复
分享
发布于 2020-05-20 13:07
谢谢分享,祝顺利
点赞 回复
分享
发布于 2020-05-20 13:24
大佬太强了,后续会出别的吗?
点赞 回复
分享
发布于 2020-05-20 13:41
感谢,持续关注大佬
点赞 回复
分享
发布于 2020-05-20 17:37
大佬是看的哪本
点赞 回复
分享
发布于 2020-05-20 17:52
老哥能分享下字节的网络问题吗,想知道到底有多深入
点赞 回复
分享
发布于 2020-05-20 19:25
楼主你好,我记得DHCP协议是属于应用层的吧,为什么你写在了网络层里😂
点赞 回复
分享
发布于 2020-05-21 17:50
好贴我顶
点赞 回复
分享
发布于 2020-05-22 14:42
进我的收藏夹吃灰吧
点赞 回复
分享
发布于 2020-05-22 16:24
tql
点赞 回复
分享
发布于 2020-05-24 16:37
有点眼熟
点赞 回复
分享
发布于 2020-05-24 17:34
楼主可以整理一下其他的吗,比如OS
点赞 回复
分享
发布于 2020-05-25 21:31
感谢分享!
点赞 回复
分享
发布于 2020-05-26 11:17
谢谢楼主大哥 智力题看你的就有所收获 这次又来取经了哈哈
点赞 回复
分享
发布于 2020-05-29 11:54

相关推荐

证券交易系统主要为用户提供股票查询、交易服务、资金管理、信息提供等诸多功能。其中主要包括用户注册、用户出入金管理、用户资金统计分析、用户资金结算、股票现物买卖交易、股票信用买卖交易、用户交易信息管理、用户自定义关注信息管理、股票相关新闻信息提供、股票实时报价、股票分析图表。交易系统分两个大的模块,分别是出入金管理和股票买卖交易。出入金管理:用户的入金管理和出金管理功能,是用户登录网络银行,对资金的股票账户做交易前期准备注入资金和划出资金的过程;同时检索用户的历史信息,可查看出入金操作的成功与否和详细信息。股票买卖交易:用户可以通过系统提供的信息,进行现物买入股票的交易。根据股票检索并根据系统提供的信息,根据自己的要求指定买入订单,同时可获得关注股票的信息;其中信用买入卖出功能可以根据要求及提供的信息,进行指定信用买入卖出订单。同时,券商交易系统要求正确性,高效性,并发性三个条件。正确性是指对系统股业务执行的证券核算及异常处理的正确性。对于券商系统,用户所关注的是账户信息,流水,资金的安全,这块主要是关联到开发者的撮合系统和账户系统。高效性是指一个完整业务链完成所需要的最短时间。例如证券交易系统的委托业务,在两笔买卖可以成交的情况下,由挂单,撮合,成交,清算4个步骤构成。也就是挂单时间+撮合时间+成交时间+清算时间。这是开发者所重视的撮合引擎清算系统。并发性是指在单位时间内,大量用户向服务器同时发出请求,服务器对这些请求进行处理。随着客户量的不断增加,证券交易系统的设计必须要满足这些高并发的要求。这是开发者所重视的撮合引擎账户系统清算系统。搭建券商交易系统183在令克技术已经相当的成熟0500所作出的前端交易页面3935功能齐全,简洁方便。并且在安全性和并发性方面,用阿里云的服务器,可以更高效满足不同用户的需求。同时,我们拥有特色的港美股交易系统,在国内多家券商软件中已经完美搭建运行。港美股交易的行情数据来源于交易所直连,因为我们已经取得了港交所和纳斯达克的行情数据咨询牌照。同时,我们还可以单独搭建期权系统,及期权独立软件。也可以做金融其他的实盘交易平台,欢迎各个国内外的券商公司及金融公司前来咨询 **********
点赞 评论 收藏
转发
#软件开发2024笔面经# 没事干写个面经吧,之前其它公司的面经 太碎了就没写#腾讯##阿里##美团#(引流)1. 自我介绍2. 浏览器输入URL会发生什么3. 第一次渲染和第二次渲染怎么做优化?4. 场景:点赞功能,用户在短时间内多次点击怎么做,可能有偶数次或者奇数次(奇数点赞,偶数取消)的情况怎么保证页面性能5. TCP和UDP的区别6. React中组件间通信的方式7. React中合成事件和普通事件?为什么要有合成事件8. React中UI怎能够快速渲染的?或者说UI挂载流程9. 做过什么跟前端安全相关的工作嘛?10. 加密和签名区别11. XSS跨站脚本攻击是什么?怎么防止跨站脚本攻击12. 场景:对象里有a、b、c、d四个属性,当a属性被修改时,需要联动的修改c、d两个属性,应该怎么做?13. 场景:实现两行两列14. 弹性布局里面,flex:1是哪些参数的缩写?都表示什么意思15. 同源策略是什么?CORS设计到的参数有哪些?16. ES6中你知道哪些数据结构?17. map和set的区别?以及map的key值可以是什么18. weakSet和Set有什么区别?19. Vue的双向绑定的原理20. 浏览器事件循环21. 有没有接触过Node22. 浏览器缓存23. 怎么不做缓存?前端这块怎么实现?24. 箭头函数的特点25. HTTP2和HTTP3新增了哪些功能26. websocket是什么? 它的应用场景是什么27. CSS动画  怎么实现一个位置到另一个位置的移动?动画怎么设置不循环播放?28. defineProperty中定义的属性有什么性质?29. JS原型链   怎么给Array原型数组添加方法30. ESModule中的import怎么实现同步加载效果?
点赞 评论 收藏
转发
96 1003 评论
分享
牛客网
牛客企业服务