计算机网络学起来太难?来看完这一篇就够了_计算机网络好难学(计算机网络难学吗?)

计算机网络学起来太难?来看完这一篇就够了_计算机网络好难学计算机网络、计算机操作系统这两个“兄弟”是所有开发岗位都需要“结拜”的,不管你是 Java、C还是测试。对于后端开发的童鞋来说,计算机网络的重要性不亚于语

计算机网络和计算机操作系统是两个“兄弟”,每一个开发工作,无论是Java、C++,还是测试,都必须宣誓。对于后端开发的新手来说,计算机网络与语言基础设施一样重要。毕竟,开发经常涉及到与网络的合作,例如检索包。所以,在准备这些知识的同时,也要带着敬畏之心去准备,不要错过任何一个问题。下面分享一下我的学习过程。

看书:对于基础的计算机模块,总是建议找一本经典的书,认真学习。你不能仅仅通过阅读面试经历来参加面试。我读了唐晓丹的两本书:《计算机操作系统》和《图解HTTP》。《计算机操作系统》是教材,所以知识点比较基础,范围也比较广,但即使是非专业的学生也应该读一下。《图解HTTP》 本书用大量插图,深入浅出地讲解知识点,非常快速,推荐。

做笔记:计算机网络还有很多知识点需要学习。如果你必须看书,记笔记以方便复习。另外,做笔记的时候,这个知识点可以百度一下,看看有没有漏掉的点,补充一下。现在让我告诉你,为什么我总是强调记笔记?优点一:通过做笔记,你会第一时间看到书本上的知识点,加深记忆。 好处二:如果你想在公关社区发布时保证最大的准确性,你应该再读一遍这个知识点。检查是否有理解上的差距或遗漏,完成对知识点的挖掘。 优点三:复习面试的时候,很少需要再看一遍书,所以会有笔记。能够快速回顾你所做的笔记非常重要,这样你就可以获得一些理解,而不是直接阅读经文。

面试技巧:经常查看牛客,看看面试官都问了哪些关于计算机网络的问题。你可能知道很多问题,但如果你不明白面试官如何问这些问题,你可能无法回答。此外,不同的公司和职位对计算机网络和计算机操作系统的侧重点也不同。如果你仔细观察面试,你会发现有一些规则,但最终它们并不是绝对的。检查您的代表的偏好。

1、谈下你对五层网络协议体系结构的理解?

在学习计算机网络时,我们通常会采取折衷的方法。它抵消了OSI 和TCP/IP 的优势,转而采用简洁且概念清晰的五层纯协议架构。

1. 应用层

应用层(application layer)的任务是通过应用进程之间的交互来完成特定的网络应用。应用层协议定义了应用程序进程(进程:运行在主机上的程序)之间通信和交互的规则。不同的网络应用需要不同的应用层协议。互联网有很多应用层协议,例如域名系统DNS、支持万维网应用的HTTP协议、支持电子邮件的SMTP协议等。应用层交互的数据单元称为消息。

2. 运输层

传输层的主要任务是为两个主机进程之间的通信提供通用的数据传输服务。应用程序进程使用此服务发送应用层消息。 “通用”是指不针对特定的网络应用,而是多个应用可以使用相同的传输层服务。

传输层具有复用和解复用功能,因为主机可以同时运行多个线程。所谓复用是指多个应用层进程可以同时使用下层传输层的服务,而解复用是指将传输层接收到的信息转交给其上层应用层对应的装置来传递。一个过程

3. 网络层

计算机网络中通信的两台计算机可能会穿越许多数据链路,也可能穿越许多通信子网。网络层的任务是选择合适的网间路由和交换节点,保证数据的及时传输。网络层在传输数据时,将传输层生成的报文段或用户数据报封装成报文或数据包进行传输。由于TCP/IP架构在网络层使用IP协议,因此报文也称为IP数据报,简称数据报。

4. 数据链路层

数据链路层通常称为链路层。两台主机之间的数据传输总是通过链路发送,因此必须使用特殊的链路层协议。当在两个相邻节点之间传输数据时,数据链路层将从网络层传递来的IP数据报组装成帧,并通过两个相邻节点之间的链路发送帧。每帧包含数据和必要的控制信息(同步信息、地址信息、差错控制等)。

接收数据时,控制信息允许接收器知道帧以哪一位开始和结束。这样,当数据链路层收到一个帧时,就可以从中提取数据部分,并将其传递给网络层。控制信息还允许接收器检测接收帧中的错误。如果检测到错误,数据链路层会简单地丢弃错误帧,从而避免继续通过网络传输而浪费网络资源。如果在链路层数据传输过程中需要纠正错误(即数据链路层不仅需要检测错误,还需要纠正错误),必须使用可靠的方法来纠正错误。这种方法使得链路层协议变得更加复杂。

5. 物理层

物理层传输的数据单位是比特。物理层的作用是提供相邻计算机节点之间比特流的透明传输,尽可能屏蔽特定传输介质和物理设备的差异。它上面的数据链路层不需要考虑网络的具体传输介质。 “透明传输比特流”是指比特流通过实际电路后保持不变,使电路对传输的比特流不可见。

2、简单说下每一层对应的网络协议有哪些?

五层计算机网络系统包含很多协议,下面列出了常用的协议。

3、ARP 协议的工作原理?

网络层ARP协议完成IP地址与物理地址的映射。首先,每个主机在自己的ARP 缓冲区中建立一个IP 和MAC 地址映射的ARP 列表。当源主机需要向目的主机发送数据包时,首先检查该IP地址对应的MAC地址是否存在于ARP列表中。如果存在,则将数据包直接发送到该MAC 地址。如果没有,则向本网段发起ARP请求广播报文,向目的主机查询对应的MAC地址。

该ARP请求报文包括源主机的IP地址、硬件地址和目的主机的IP地址。网络中的所有主机收到此ARP请求后,都会检查数据包中的目的IP是否与自己的IP地址相匹配。如果不相同,则忽略该数据包;如果相同,则主机首先将发送者的MAC 地址和IP 地址添加到其ARP 列表中,如果IP 信息已在ARP 表中,则将其覆盖。主机发送ARP 应答数据包,告诉对等方这是它要查找的MAC 地址。源主机收到ARP应答报文后,将获取的目的IP地址和MAC地址添加到主机中。在您自己的ARP 列表上注册主机并使用此信息开始传输数据。如果源主机没有收到ARP应答报文,则说明ARP查询失败。

4、谈下你对 IP 地址分类的理解?

IP地址是IP协议提供的统一地址格式,它为Internet上的每个网络和每个主机分配一个逻辑地址,从而防止物理地址出现差异。 IP地址编址方案将IP地址空间分为五类:A、B、C、D、E。其中,A、B和C是基本类别,D和E类别用于组播和保留目的。和是特殊地址。

每个IP 地址包含两个标识码(ID):网络ID 和主机ID。同一物理网络上的所有主机都使用相同的网络ID。网络上的每台主机(包括工作站、服务器、路由器等)都有一个相应的主机ID。 A 类至E 类地址的特点如下。

A类地址:从0开始,第一个字节范围:0-127。

B类地址:从10开始,第一个字节范围:128-191。

C类地址:从110开始,第一个字节范围:192~223。

D 类地址:从1110 开始,第一个字节范围为224-239。

E类地址:以1111开头的保留地址

5、TCP 的主要特点是什么?

TCP 是面向连接的。 (就像打电话一样,通话前必须先拨号建立连接,通话后再挂断释放连接。)每个TCP连接只能有两个端点,并且每个TCP连接只能有点。 TCP 提供点对点(一对一)的可靠交付服务。通过TCP 连接发送的数据不会出现错误,不会丢失,不会重复,并且按顺序到达。 TCP 提供全双工通信。 TCP允许通信双方的应用程序进程随时发送数据。 TCP连接的每一端都配备有发送缓冲区和接收缓冲区,双方使用它们来临时存储他们通信的字节流数据。 TCP“流”是流入或流出进程的字节序列。 “面向字节流”是指虽然应用程序和TCP之间的交互每次都是一个数据块(大小不一),但TCP将应用程序传递过来的数据处理成一系列非结构化的数据,它只被识别为一个数据块。字节流。

6、UDP 的主要特点是什么?

UDP 是无连接的。这意味着主机不必维护复杂的链路状态(有很多参数),因为无法保证可靠的传输。拥塞控制确保网络发生拥塞时不会减慢发送主机的速度(对于直播、实时视频会议等实时应用非常有用)。 1、一对多、多对一、多对多交互通讯。 UDP报头只有8字节的开销,比TCP的20字节报头要短。

7、TCP 和 UDP 的区别?

TCP 提供面向连接的服务。发送数据前必须建立连接,发送数据后必须释放连接。 TCP 不提供广播或多播服务。因为TCP必须提供可靠的、面向连接的传输服务(TCP的可靠性取决于TCP在发送数据之前进行三次握手建立连接;在确认、窗口、重传以及发送数据之后断开连接以节省时间)系统资源)。这必然会增加确认、流量控制、计时器和连接管理等开销。这不仅使得协议数据单元头变得更大,而且消耗了大量的处理器资源。

UDP 不需要在发送数据之前建立连接。远程主机收到UDP报文后不需要确认。虽然UDP不提供可靠的传送,但在某些情况下,例如QQ语音、QQ视频、直播等,UDP实际上是最有效的工作方式(通常用于即时通信)。

8、TCP 和 UDP 分别对应的常见应用层协议有哪些?

1. TCP 对应的应用层协议

FTP:定义使用端口21 的文件传输协议。人们常说,当某台计算机上打开FTP 服务时,文件传输服务就启动了。所有文件下载和主页上传都需要FTP服务。

Telnet:允许用户以自己的身份远程连接到计算机的端口,可以提供基于DOS模式的通信服务。例如,以前的BBS是纯字符界面,但支持BBS的服务器开放23端口对外服务。

SMTP:定义简单邮件传输协议。目前许多电子邮件服务器都使用它来发送电子邮件。例如,服务器打开端口25,因为该邮件服务端口被流行的免费邮件服务使用。

POP3:与SMTP兼容,POP3用于接收电子邮件。 POP3 协议通常使用端口110。这意味着,如果您有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),您可以直接使用您的电子邮件程序来接收电子邮件,而无需通过网络登录您的邮箱界面(本例中)。对于163邮箱,您不需要先登录网易网站,然后再登录自己的邮箱来接收邮件。

HTTP:一种传输协议,用于将超文本从Web 服务器传输到本地浏览器。

2. UDP 对应的应用层协议

DNS:用于将域名地址转换为IP地址的域名解析服务。 DNS 使用端口53。

SNMP:简单网络管理协议,使用端口161,用于管理网络设备。由于网络设备数量众多,无连接服务具有优势。

TFTP(简单文件传输协议):一种简单文件传输协议,在众所周知的端口69 上使用UDP 服务。

9、详细说下 TCP 三次握手的过程?

1. 三次握手

建立TCP 连接的过程称为握手。握手需要在客户端和服务器之间交换三个TCP 段。

最初客户端和服务器都处于CLOSED 状态。本例中,A(客户端)主动打开连接,B(服务器)被动打开连接。

首先,B的TCP服务器进程创建一个传输控制块TCB,并准备接受来自客户端进程的连接请求。然后服务器进程进入LISTEN状态并等待客户端连接请求。如果有,请立即回复。

初始握手:A的TCP客户端进程也首先创建一个传输控制块TCB。接下来,在建立TCP连接时,向B发送连接请求报文段。此时,选择头同步位SYN=1,初始序列号seq=x。 TCP规定SYN段(即SYN=1的段)不能携带数据,但必须消耗序列号。此时TCP客户端进程处于SYN-SENT状态。

第二次握手:B收到连接请求消息后,如果同意建立连接,则向A发送确认消息。确认消息段必须将SYN 和ACK 位均设置为1,确认编号必须为ack=x + 1,并且还必须选择初始序列号为seq=y。注意,该段不能携带数据,但也会消耗序列号。此时TCP服务器进程进入SYN-RCVD(同步接收)状态。

第三次握手:TCP客户端进程收到B的确认后,也必须给B确认。确认消息段的ACK设置为1,确认号ack=y + 1,其自身的序列号seq=x + 1。此时ACK段就可以携带数据了。然而,如果没有数据传输,则不消耗序列号。此时,下一个数据段的序号仍然是seq=x + 1。此时,TCP连接建立,A处于ESTABLISHED状态。

10、为什么两次握手不可以呢?

防止突然向B发送无效的连接请求段而导致错误。例如下面的情况,A发送的初始连接请求报文段并没有丢失,但是在网络节点中保留了很长时间,所以在连接释放后,需要一段时间才能到达B,因此出现了延迟直到它发生。原来这是一个早已过期的报文段。然而,B收到这个无效的链接请求报文段后,错误地认为A已经发出了新的连接请求。因此,向A发送确认消息段,同意建立连接。

在上述情况下,如果没有进行第三次握手,B发送确认后就认为新的传输连接已建立,等待A发送数据。 B的很多资源都被浪费了。

当使用三向握手时,A实际上并没有发出连接建立请求,因此它忽略B的确认,并且不向B发送任何数据。 B 没有收到确认,因此它知道A 没有请求建立连接。

11、为什么不需要四次握手?

可能会说,A第三次发送握手信息后,没有收到B的请求,就进入了连接状态。那么如果A的确认包丢失或延迟会发生什么情况呢?

重要的是要了解没有一种通信协议是完全可靠的。 3次握手后,客户端和服务器可以查看之前的通信状态,并且都收到了确认信息。因此,增加握手次数并不一定意味着后续的通信完全可靠,所以没有必要这样做。

12、Server 端收到 Client 端的 SYN 后,为什么还要传回 SYN?

接收方发回发送方发送的SYN,告诉发送方我收到的信息确实是你发送的信号。

SYN是TCP/IP建立连接时使用的握手信号。当客户端和服务器之间建立正常的TCP网络连接时,客户端首先发送SYN报文,服务器回复SYN-ACK以表示收到该报文。最后,客户端回复ACK(确认[中文翻译])。确认字符。在数据通信传输中,接收站向发送站发送的传输控制字符指示所发送的数据已被正确接受的确认。 ) 消息响应。这样,客户端和服务器之间就可以建立可靠的TCP连接,并可以在客户端和服务器之间传输数据。

13、传了 SYN,为什么还要传 ACK?

为了使两方之间的通信正确进行,他们彼此发送的信息必须准确。通过SYN证明发送方到接收方的通道是OK的,但是接收方到发送方的通道仍然需要ACK信号进行验证。

14、详细说下 TCP 四次挥手的过程?

一旦数据传输完成,双方就可以释放连接。 A 和B 现在都处于ESTABLISHED 状态。

第一波:A的应用进程首先向TCP发送连接释放报文段,停止发送数据,并主动关闭TCP连接。 A将连接释放报文段头中的终止控制位FIN设置为1,并设置其序列号seq=u(等于之前发送的数据的最后一个字节的序列号加1)。进入FIN-WAIT-1状态,等待B的确认。注意:TCP 指定即使FIN 段不携带数据也会消耗序列号。

第二次挥手:B收到连接释放报文段后立即发送确认。确认号为ack=u + 1,该消息段的序列号为v(等于B先前拥有的数据的最后一个字)。节号加一,B 进入CLOSE-WAIT 状态。此时,TCP服务器进程需要通知上层应用进程,于是A到B的连接被释放。此时,TCP连接处于半关闭状态。即A没有数据要发送。然而,即使B发送数据,A也必须接收。这意味着从B 到A 的这个方向的连接并未关闭,并且可能会保持这种状态一段时间。 A收到B的确认后,进入FIN-WAIT-2状态,等待B发送的连接释放报文段。

第三次挥手:当B没有更多的数据发送给A时,它的应用程序告诉TCP释放连接。 B 发送的连接释放报文段必须有FIN=1。假设B的序列号是w(在半关闭状态下,B本来可以发送更多的数据)。 B 还必须重复上次发送的确认号ack=u + 1。然后B进入LAST-ACK状态并等待A的确认。

第四次挥手:A收到B的连接释放消息后,必须发送确认消息。设置确认报文段的ACK为1,确认号ack=w+1,唯一序列号seq=u+1(之前发送的FIN报文段消耗了序列号)。然后进入TIME-WAIT状态。请注意,TCP 连接尚未释放。在A 进入CLOSED 状态、取消发送控制块并终止TCP 连接之前,必须经过时间等待定时器设置的2MSL(最大分段寿命)时间段。当然,如果B一收到A的确认并取消发送控制块就进入CLOSED状态,那么在释放连接时B会比A更早结束TCP连接。

15、为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

确保A发送的最后一个ACK报文段到达B。该ACK 段可能会丢失,因此处于LAST-ACK 状态的B 无法收到发送的FIN + ACK 段的确认。 B超时重传FIN+ACK报文段,A在2MSL内收到重传的FIN+ACK报文段(超时+发送的1MSL)。然后A重新发送确认并重新启动2MSL定时器。最终,A和B都成功进入CLOSED状态。如果A没有在TIME-WAIT状态等待一定的时间,发送ACK报文段后立即释放连接,则B重传的FIN+ACK报文段将不会被接收到,也不会被发送。由于还有另一个确认消息段,B 无法按照正常流程进入CLOSED 状态。防止过期的连接请求段出现在此连接上。 A 发送最后一个ACK 报文段且2MSL 过去后,此连接期间生成的所有报文段都会从网络中消失。这可以防止此类旧的连接请求段出现在下一个连接上。

16、为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么?

当服务器进行第二次挥手时,证明客户端不再向服务器请求任何数据,但服务器可能仍在向客户端发送数据(客户端上次请求的资源可能还没有发送)。此时,服务器在发送关闭请求之前等待任何先前未发送的数据发送(因为它已经发送)。

17、保活计时器的作用?

除了时间等待定时器之外,TCP还有一个保活定时器。想象一下以下场景。客户端正在主动与服务器建立TCP连接。但随后客户端的主机突然出现故障。显然服务器以后将无法接收客户端的数据。因此,必须采取措施防止服务器不必要的等待。这需要使用保活定时器。

服务器每次从客户端接收到数据时都会重置保活定时器。时间设置通常为2小时。如果服务器在2 小时内没有收到客户端的数据,则发送一个探测报文段,此后每隔75 秒发送一次探测报文段。如果连续发送10个探测段后客户端没有响应,服务器认为客户端失败并关闭连接。

18、TCP 协议是如何保证可靠传输的?

数据包验证:目的是检测数据在传输过程中的变化。如果验证包中出现错误,则该消息段被丢弃,TCP数据传输至此结束。超时后重新发送数据。数据包乱序:TCP 分段作为IP 数据报发送,并且由于IP 数据报可能乱序到达,因此TCP 分段也可能乱序到达。 TCP 在将无序数据传递到应用层之前对其进行重新排序。丢弃重复数据。如果存在重复数据,一旦从TCP 连接的另一端接收到数据,您就可以丢弃重复数据。发送确认。此确认不会立即发送,通常会延迟几秒钟。超时重传:当TCP发送一个报文段时,它启动一个定时器并等待目的地确认收到该报文段。如果没有及时收到确认,则重传该段。流量控制:TCP连接中的每一方都有固定大小的缓冲区空间。 TCP 接收器只允许发送接收器缓冲区可以容纳的数据。这可以防止较快的主机溢出较慢的主机的缓冲区。 TCP使用的流量控制协议是可变大小的滑动窗口协议。

19、谈谈你对停止等待协议的理解?

停止等待协议的基本原理是每次发送数据包时就停止发送并等待对方的确认。收到确认后,发送下一个数据包。在停止等待协议中,如果接收方收到重复的数据包,它会丢弃该数据包,但也会发送确认。主要包括以下几种情况:无错误情况、错误情况(超时重传)、确认丢失和确认延迟、确认丢失和确认延迟。

20、谈谈你对 ARQ 协议的理解?

自动重传请求 ARQ 协议

停止等待协议中的超时重传意味着除非在一定时间后收到确认(刚刚发送的数据包被视为丢失),否则将重新传输先前发送的数据包。因此,每次数据包传输后必须设置一个超时定时器,其重传时间必须长于数据包传输中数据的平均往返时间。这种自动重传方法通常被称为自动重传请求ARQ。

连续 ARQ 协议

连续ARQ协议提高了信道利用率。发送方维护一个发送窗口,发送窗口内的报文可以连续发送,无需等待对方确认。接收方通常使用累积确认,向按顺序到达的最后一个数据包发送确认,表明截至该数据包的所有数据包均已正确接收。

21、谈谈你对滑动窗口的了解?

TCP使用滑动窗口来实现流量控制机制。滑动窗口是一种流量控制技术。早期的网络通信中,通信双方直接发送数据,没有考虑网络拥塞的情况。如果每个人同时发送数据而不知道网络有多忙,中间节点就会被阻塞并且数据包将被丢弃,并且没有人能够发送数据。因此,开发了滑动窗口机制来解决这个问题。

TCP 使用滑动窗口进行传输控制。滑动窗口大小是指接收方可用于接收数据的缓冲区量。发送方可以使用滑动窗口大小来确定要发送的数据字节数。如果滑动窗口为0,则发送方通常无法发送更多数据报;

两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

22、谈下你对流量控制的理解?

TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

23、谈下你对 TCP 拥塞控制的理解?使用了哪些算法?

拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

TCP 的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如:主动队列管理 AQM),以减少网络拥塞的发生。

慢开始:

慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。

拥塞避免:

拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加 1。

快重传与快恢复:

在 TCP/IP 中,快速重传和快恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。

没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。

有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和快恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

24、什么是粘包?

在进行 Java NIO 学习时,可能会发现:如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况。

TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据块,但是 TCP 把这些数据块仅仅看成一连串无结构的字节流,没有边界;从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段。
基于上面两点,在使用 TCP 传输数据时,才有粘包或者拆包现象发生的可能。一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。
接收端收到了两个数据包,但是这两个数据包要么是不完整的,要么就是多出来一块,这种情况即发生了拆包和粘包。拆包和粘包的问题导致接收端在处理的时候会非常困难,因为无法区分一个完整的数据包。

25、TCP 黏包是怎么产生的?
发送方产生粘包

采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据。但当发送的数据包过于的小时,那么 TCP 协议默认的会启用 Nagle 算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。

接收方产生粘包

接收方采用 TCP 协议接收数据时的过程是这样的:数据到接收方,从网络模型的下方传递至传输层,传输层的 TCP 协议处理是将其放置接收缓冲区,然后由应用层来主动获取(C 语言用 recv、read 等函数);这时会出现一个问题,就是我们在程序中调用的读取数据函数不能及时的把缓冲区中的数据拿出来,而下一个数据又到来并有一部分放入的缓冲区末尾,等我们读取数据时就是一个粘包。(放数据的速度 > 应用层拿数据速度)

26、怎么解决拆包和粘包?

分包机制一般有两个通用的解决方法:

特殊字符控制;在包头首都添加数据包的长度。
如果使用 netty 的话,就有专门的编码器和解码器解决拆包和粘包问题了。
tips:UDP 没有粘包问题,但是有丢包和乱序。不完整的包是不会有的,收到的都是完全正确的包。传送的数据单位协议是 UDP 报文或用户数据报,发送的时候既不合并,也不拆分。

27、你对 HTTP 状态码有了解吗?

1XX 信息

100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
2XX 成功

200 OK204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。
3XX 重定向

301 Moved Permanently :永久性重定向;302 Found :临时性重定向;303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条件,则服务器会返回 304 状态码。307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
4XX 客户端错误

400 Bad Request :请求报文中存在语法错误。401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。403 Forbidden :请求被拒绝。404 Not Found
5XX 服务器错误

500 Internal Server Error :服务器正在执行请求时发生错误;503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

28、HTTP 状态码 301 和 302 代表的是什么?有什么区别?

301,302 都是 HTTP 状态的编码,都代表着某个 URL 发生了转移。

区别:
301 redirect: 301 代表永久性转移(Permanently Moved)
302 redirect: 302 代表暂时性转移(Temporarily Moved)

29、forward 和 redirect 的区别?

Forward 和 Redirect 代表了两种请求转发方式:直接转发和间接转发。

直接转发方式(Forward):客户端和浏览器只发出一次请求,Servlet、HTML、JSP 或其它信息资源,由第二个信息资源响应该请求,在请求对象 request 中,保存的对象对于每个信息资源是共享的。

间接转发方式(Redirect):实际是两次 HTTP 请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个 URL 发出请求,从而达到转发的目的。

举个通俗的例子: 
直接转发就相当于:“A 找 B 借钱,B 说没有,B 去找 C 借,借到借不到都会把消息传递给 A”;
间接转发就相当于:“A 找 B 借钱,B 说没有,让 A 去找 C 借”。

30、HTTP 方法有哪些?

客户端发送的 请求报文 第一行为请求行,包含了方法字段。

GET:获取资源,当前网络中绝大部分使用的都是 GET;HEAD:获取报文首部,和 GET 方法类似,但是不返回报文实体主体部分;POST:传输实体主体PUT:上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。PATCH:对资源进行部分修改。PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。OPTIONS:查询指定的 URL 支持的方法;CONNECT:要求在与代理服务器通信时建立隧道。使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。TRACE:追踪路径。服务器会将通信路径返回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

31、说下 GET 和 POST 的区别?

GET 和 POST 本质都是 HTTP 请求,只不过对它们的作用做了界定和适配,并且让他们适应各自的场景。

本质区别:GET 只是一次 HTTP请求,POST 先发请求头再发请求体,实际上是两次请求。

从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源;从 REST 服务角度上说,GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变;从请求参数形式上看,GET 请求的数据会附在 URL 之后,即将请求数据放置在 HTTP 报文的 请求头 中,以 ? 分割 URL 和传输数据,参数之间以 & 相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以 16 进制表示的 ASCII);而 POST 请求会把提交的数据则放置在是 HTTP 请求报文的 请求体 中;就安全性而言,POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而且 POST 请求参数则被包装到请求体中,相对更安全;从请求的大小看,GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则是没有大小限制的。

32、在浏览器中输入 URL 地址到显示主页的过程?

DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址:具体过程包括浏览器搜索自身的 DNS 缓存、搜索操作系统的 DNS 缓存、读取本地的 Host 文件和向本地 DNS 服务器进行查询等。对于向本地 DNS 服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手;发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求;服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;浏览器解析渲染页面:浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。连接结束。

33、DNS 的解析过程?

主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把这个结果返回给发起查询的主机。

34、谈谈你对域名缓存的了解?

为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。

不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

35、谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?

在 HTTP/1.0 中默认使用短连接。也就是说,客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个 HTML 或其他类型的 Web 页中包含有其他的 Web 资源(如:JavaScript 文件、图像文件、CSS 文件等),每遇到这样一个 Web 资源,浏览器就会重新建立一个 HTTP 会话。

而从 HTTP/1.1 起,默认使用长连接,用以保持连接特性。使用长连接的 HTTP 协议,会在响应头加入这行代码

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

Keep-Alive 不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如:Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

36、谈下 HTTP 1.0 和 1.1、2.0 的主要变化?

HTTP1.1 的主要变化:

HTTP1.0 经过多年发展,在 1.1 提出了改进。首先是提出了长连接,HTTP 可以在一次 TCP 连接中不断发送请求。然后 HTTP1.1 支持只发送 header 而不发送 body。原因是先用 header 判断能否成功,再发数据,节约带宽,事实上,post 请求默认就是这样做的。HTTP1.1 的 host 字段。由于虚拟主机可以支持多个域名,所以一般将域名解析后得到 host。
HTTP2.0 的主要变化:

HTTP2.0 支持多路复用,同一个连接可以并发处理多个请求,方法是把 HTTP数据包拆为多个帧,并发有序的发送,根据序号在另一端进行重组,而不需要一个个 HTTP请求顺序到达;HTTP2.0 支持服务端推送,就是服务端在 HTTP 请求到达后,除了返回数据之外,还推送了额外的内容给客户端;HTTP2.0 压缩了请求头,同时基本单位是二进制帧流,这样的数据占用空间更少;HTTP2.0 适用于 HTTPS 场景,因为其在 HTTP和 TCP 中间加了一层 SSL 层。

37、HTTPS 的工作过程?

客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;服务器从中选出一套加密算法和 hash 算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构;客户端收到网站的证书之后要做下面的事情:
3.1 验证证书的合法性;
3.2 果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密;
3.3 用约定好的 hash 算法计算握手消息,然后用生成的密钥进行加密,然后一起发送给服务器。服务器接收到客户端传送来的信息,要做下面的事情:
4.1 用私钥解析出密码,用密码解析握手消息,验证 hash 值是否和浏览器发来的一致;
4.2 使用密钥加密消息;如果计算法 hash 值一致,握手成功。

38、HTTP 和 HTTPS 的区别?

开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl 加密传输协议,需要消耗更多的 CPU 和内存资源;端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443;安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

39、HTTPS 的优缺点?

优点:

使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
缺点:

HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗;HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

40、什么是数字签名?

为了避免数据在传输过程中被替换,比如黑客修改了你的报文内容,但是你并不知道,所以我们让发送端做一个数字签名,把数据的摘要消息进行一个加密,比如 MD5,得到一个签名,和数据一起发送。然后接收端把数据摘要进行 MD5 加密,如果和签名一样,则说明数据确实是真的。

41、什么是数字证书?

对称加密中,双方使用公钥进行解密。虽然数字签名可以保证数据不被替换,但是数据是由公钥加密的,如果公钥也被替换,则仍然可以伪造数据,因为用户不知道对方提供的公钥其实是假的。所以为了保证发送方的公钥是真的,CA 证书机构会负责颁发一个证书,里面的公钥保证是真的,用户请求服务器时,服务器将证书发给用户,这个证书是经由系统内置证书的备案的。

42、什么是对称加密和非对称加密?

对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方。

非对称加密指使用一对非对称密钥,即:公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性。但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击领取】网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

!(https://img-blog.csdnimg.cn/8de5365b55fd4a929e0cef43c14ce512.png)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

#以上关于计算机网络学起来太难?来看完这一篇就够了_计算机网络好难学的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93947.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月26日 下午3:10
下一篇 2024年7月26日 下午3:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注