49.二叉线索查找转发表?
其实就是为了节约时间(快速找到匹配的网络地址)而采取的算法方面的措施。
50.ICMP报文
ICMP: 互联网控制报文协议
- ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告
- 由主机和路由器用于网络层信息的通信
- ICMP 报文携带在IP 数据报中:IP上层协议号为1
ICMP报文类型
- ICMP 差错报告报文
:终点不可达:不可达主机、不可达网络,无效端口、协议 - ICMP 询问报文
:回送请求/回答 (ping使用)
ICMP 报文格式
ICMP报文的前 4 个字节包含格式统一的三个字段:类型、代码、检验和 相邻的后四个字节内容与ICMP的报文类型有关
ICMP报文类型及功能
51.IPV6?
与IPV4相比,出现了以下几种特点:
- 更大的地址空间(原来的32位扩大位128位)
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项(IPV6的首部长度是固定的,40字节 = 40B = 40*8 b = 40*8 位)
- 允许协议再扩充
- 支持资源的预分配
- IPV6首部改为8字节
52.静态路由和动态路由
- 静态路由
- 非自适应路由选择
- 不能及时适应网络状态的变化
- 简单,开销较小。 - 动态路由
-自适应路由选择
-能较好地适应网络状态的变化
-实现较为复杂,开销较大
52. RIP例题
53. 运输层的位置?
- 运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。
- 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时,只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。
54.运输层的作用?
- 复用和分用
在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。
这表明运输层有一个很重要的功能——复用 (multiplexing)和分用 (demultiplexing)
既然提到了运输层为应用进程之间提供端到端的逻辑通信,那么就要详细说一说端口的概念
网络层中,通信的对象为不同的主机,而从运输层的角度来看,通信的对象为进程,而端口就代表了进程
也就是说,通过 ip 找到主机,通过端口找到对应进程
端口用一个 16 位端口号进行标志。
端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的 IP 地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)
- 屏蔽作用
- 运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
55.UDP与TCP的区别?
UDP和TCP是网络传输协议的两种类型,它们有以下的区别:
可靠性:TCP是可靠的传输协议,它会确保数据的可靠传输,因为它使用了确认、重传和流量控制等机制来保证数据的可靠性。而UDP是不可靠的传输协议,它不会保证数据的可靠传输,因为它不使用确认和重传机制。
连接性:TCP是面向连接的协议,它要先建立连接,然后才能传输数据。而UDP是无连接的协议,数据可以直接发送,不需要先建立连接。
速度:UDP比TCP更快,因为它不需要建立连接和确认数据的接收,但是UDP不能保证数据的可靠传输,也无法进行流量控制。
适用场景:TCP适用于需要可靠传输的场景,如文件传输、电子邮件等。而UDP适用于需要快速传输的场景,如视频、音频等实时传输场景,因为UDP的速度更快,可以更好地支持实时传输。
详细讲一下可靠性的区别:
当我们在传输数据时,可靠性是指发送方发送的数据能够在不丢失、损坏或重复的情况下被接收方正确地接收。TCP和UDP在可靠性方面的区别如下:
TCP的可靠性:TCP是可靠的传输协议,它使用了多种机制来确保数据的可靠传输。例如,TCP使用确认机制,即每次发送方发送数据后,接收方都会发送一个确认消息给发送方,告诉它已经收到了这些数据。如果发送方在一定时间内没有收到确认消息,它会重新发送数据,直到接收方正确地接收到数据为止。此外,TCP还使用了流量控制和拥塞控制机制,以确保发送方发送的数据不会超过接收方的处理能力,并避免网络拥塞。
UDP的不可靠性:UDP是不可靠的传输协议,它不提供确认、重传和流量控制等机制。在UDP中,发送方发送数据后,并不会收到接收方发送的确认消息,也不会对未确认的数据进行重传,如果发生数据丢失、损坏或重复,UDP也不会进行任何处理,因此无法保证数据的可靠传输。
总的来说,TCP提供了比UDP更可靠的传输服务,但是这也使得TCP的性能比UDP更低,因为它需要花费更多的时间和资源来维护连接和确保数据的可靠传输。而UDP则更加轻量级和快速,适用于那些对可靠性要求不高,但需要快速传输的场景。
56.不同进程如何进行识别?
在计算机中,不同进程的识别是通过进程标识符(Process ID, PID)来实现的。每个进程都有一个唯一的PID,用于标识这个进程。PID是一个整数值,通常是在进程创建时由操作系统自动生成的。
在Unix/Linux系统中,可以使用命令ps来查看当前系统中运行的进程,ps命令会显示每个进程的PID以及其他信息。例如,可以使用以下命令查看系统中所有进程的PID:
ps -ef
在Windows系统中,可以使用任务管理器来查看当前系统中运行的进程,任务管理器会显示每个进程的PID以及其他信息。另外,也可以使用命令行工具tasklist来查看系统中所有进程的PID,例如:
tasklist
进程的PID在操作系统中扮演着非常重要的角色,它被用于管理进程、进行进程间通信等操作。当一个进程需要与另一个进程进行通信时,通常会使用进程的PID来标识这个进程,并进行进程间通信。因此,每个进程的PID都是唯一且不可更改的,以确保不同进程之间的唯一性和可识别性。
57.端口?
在计算机网络中,端口(Port)是用于标识应用程序或网络服务的数字,它和IP地址一起用于唯一地标识一台计算机上的网络通信进程。具体来说,端口号是一个16位的无符号整数(取值范围是0~65535),其中一些端口已经被标准化为特定的应用程序或服务使用,这些标准化的端口号称为“Well-known Ports”。
下面是一些常见的端口号及其用途:
20, 21:FTP数据传输和控制端口
22:SSH远程登录协议端口
23:Telnet远程登录协议端口
25:SMTP邮件传输协议端口
53:DNS域名解析协议端口
80:HTTP协议端口,用于Web浏览器访问网页
110:POP3邮件收取协议端口
143:IMAP邮件收取协议端口
443:HTTPS协议端口,用于Web浏览器安全访问网页
3306:MySQL数据库端口
3389:Windows远程桌面协议端口
需要注意的是,端口号仅用于标识通信的应用程序或服务,它并不与物理设备相关联。在一台计算机上,多个进程可以同时监听同一个端口号,只要它们的IP地址不同。另外,也可以通过配置网络设备的端口转发等方式,将一个端口号映射到不同的物理设备或不同的进程上。
58.停止等待协议?
停止等待协议(Stop-and-Wait Protocol)是一种简单的数据传输协议,用于解决在可靠的通信信道上进行数据传输的问题。它是一种基于确认和重传机制的协议,常用于串行通信中,例如串口通信、红外通信等。
停止等待协议的基本思想是:发送方在发送数据时,等待接收方发送确认消息,接收到确认消息后再发送下一份数据;接收方在接收数据时,发送确认消息,等待发送方重传丢失的数据。具体来说,停止等待协议的数据传输过程如下:
- 发送方将数据分为若干份,每份带有一个序列号,并发送第一份数据;
- 接收方接收到第一份数据后,发送一个确认消息给发送方,并等待下一份数据;
- 发送方接收到确认消息后,发送下一份数据,重复第1-3步,直到发送完所有数据;
- 接收方在接收数据时,如果发现有数据包丢失,则发送一个重传请求给发送方,要求发送方重传丢失的数据包;
- 发送方在接收到重传请求后,重新发送丢失的数据包,并等待接收方的确认消息;
- 接收方接收到重传的数据包后,发送确认消息给发送方,并等待下一份数据。
停止等待协议简单易懂,但它存在的主要问题是效率低下。在停止等待协议中,发送方必须等待接收方的确认消息,这会导致发送方的发送速度大大降低。此外,当网络中发生丢包或延迟等问题时,停止等待协议的重传机制会导致发送方不断重传数据包,浪费网络带宽和计算资源。因此,实际中更常用的是一些具有更高效率和更可靠性的协议,如GBN和SR协议。
59.TCP报文首部格式?
其中各字段的含义如下:
源端口(Source Port)和目的端口(Destination Port):分别用于标识源主机和目的主机的端口号,占用2个字节。
序列号(Sequence Number):用于标识TCP报文段中第一个数据字节的序列号,占用4个字节。
确认号(Acknowledgment Number):用于标识期望接收到的下一个数据字节的序列号,占用4个字节。
- 仅当ACK = 1时确认号才有效。当ACK = 0时确认号无效。
数据偏移量(Data Offset):用于表示TCP报文段中数据部分的起始位置相对于报文段起始位置的偏移量,以4个字节为单位。
保留位(Reserved):暂未使用,占用6个比特。
标志位(Flags):TCP报文段的控制位,包含URG、ACK、PSH、RST、SYN、FIN六个标志位,各占用1个比特。
- URG(紧急):URG = 1时,表明紧急指针字段有效。
- ACK(确认):ACK = 1时确认号才有效。当ACK = 0时确认号无效。
- PSH(推送):发送方TCP将PSH = 1,它用于告知接收方应该立即将数据交付给上层应用,而不需要等待缓存区填 满。
- RST(复位):RST = 1时,表明TCP连接中出现严重的差错,必须释放连接。
- SYN(同步):SYN=1 and ACK=0,表明这是一个连接请求字段,SYN=1 and ACK=1,表明同意建立连接
- FIN(终止):FIN=1时,表明此报段的发送方的数据已经发送完毕,并要求释放连接
窗口大小(Window):表示发送端可以接收的数据量的大小,占用2个字节。
校验和(Checksum):用于检查TCP报文段是否损坏,占用2个字节。
紧急指针(Urgent Pointer):表示紧急数据的末尾位置相对于序列号的偏移量,占用2个字节。
选项(Options):TCP选项,可选字段,长度不固定。
填充(Padding):用于填充TCP报文段,使得报文长度为4的倍数,长度不固定。
数据(Data):TCP报文段中的数据,长度不固定,最大长度由窗口大小决定。
上述字段共占用20个字节
60.滑动窗口?
滑动窗口(Sliding
Window)是一种流行的数据传输协议中的数据流控制技术。它用于在通信双方之间控制数据流的发送和接收,以便确保数据能够在网络中按序传输并且能够被正确处理。
在TCP协议中,滑动窗口是基于“可靠传输”机制实现的,发送方将一段连续的数据拆分成若干个数据包,接收方按顺序接收数据包,每收到一个数据包就将其从窗口中删除。发送方只有在收到接收方的确认消息后,才能将窗口向前滑动,并发送下一个数据包。同时,接收方可以向发送方发送一个确认消息,告诉发送方已经成功接收到了数据包,从而控制发送方发送数据的速度,保证数据传输的可靠性和流畅性。
滑动窗口还可以用来控制网络延迟和带宽利用率。通过改变窗口大小,可以控制数据包的数量和传输速度。如果窗口大小设置得过大,网络带宽可能会被过度使用,导致网络拥塞和延迟增加;如果设置得太小,网络带宽不能充分利用,导致传输效率降低。
滑动窗口技术是TCP协议的一个核心特性,它能够使数据传输更加高效、可靠。它也被广泛应用于其他数据传输协议中,如UDP和SCTP等。
61.RTO计算?(百度的 看不懂)
RTO(Retransmission Timeout)是TCP协议中的一个重要参数,它用于计算数据包丢失后需要重传的时间,以保证数据包能够被正确地接收。RTO的计算过程如下:
初始化RTO:当TCP连接建立时,RTO被初始化为一个默认值,通常为3秒钟。这个值是TCP协议中的一个标准值,可以在不同的操作系统中进行修改。
计算RTT:当TCP发送一个数据包后,它会等待接收方返回确认消息。发送方会记录下这个数据包被发送的时间戳,当接收到确认消息时,发送方会记录下接收到确认消息的时间戳,并计算出RTT(Round Trip Time),即数据包从发送到接收的时间差。
计算SRTT:为了减小RTT的抖动,TCP使用加权平均数来计算SRTT(Smoothed Round Trip Time)。SRTT是RTT的平均值,其计算方式为:
SRTT = (1 - α) * SRTT + α * RTT
其中,α是一个介于0和1之间的值,通常为0.125,表示新的RTT占SRTT的12.5%的权重,旧的RTT占87.5%的权重。
计算RTTVAR:为了进一步减小RTT的抖动,TCP使用加权平均数来计算RTTVAR(Round Trip Time VARiance),即RTT的方差。其计算方式为:
RTTVAR = (1 - β) * RTTVAR + β * |SRTT - RTT|
其中,β是一个介于0和1之间的值,通常为0.25,表示新的RTT与SRTT的差值占25%的权重,旧的RTTVAR占75%的权重。这个差值使用绝对值,因为RTT的抖动可能是正的也可能是负的。
计算RTO:最后,根据SRTT和RTTVAR计算RTO。TCP使用下面的公式:
· RTO = SRTT + 4 * RTTVAR
这个公式计算的是一个安全的RTO值,它可以确保数据包在网络中的传输时间变化时能够被成功地传输。如果一个数据包在RTO时间内没有被确认,TCP就会认为它已经丢失,并进行重传。
需要注意的是,RTO的计算过程是动态的,每次计算都是基于之前的RTT和RTTVAR的。此外,TCP的不同实现可能会使用不同的α和β值,从而导致RTO的计算结果略有不同。
62.TCP的流量控制?
滑动窗口是TCP协议中实现流量控制的一种机制,它通过动态地调整发送方和接收方的窗口大小来控制数据的发送和接收。具体来说,发送方和接收方维护着两个窗口:发送窗口和接收窗口,用来控制发送和接收的数据流量。
发送窗口的大小取决于接收方的接收窗口大小和网络状况。当接收方的接收窗口大小变小或网络状况变差时,发送方的发送窗口也会相应地变小,以避免数据包的丢失和拥塞。发送窗口的大小由以下三个因素共同决定:
- 发送方能够承受的最大窗口大小:发送方会根据自己的发送能力和网络状况估算出一个最大窗口大小,以确保数据包不会因为过度拥塞而丢失。
- 接收方的接收窗口大小:接收方通过发送窗口告诉发送方自己当前能够接收的数据包大小。发送方需要根据接收窗口的大小来决定发送的数据包数量,以避免发送过多的数据包导致接收方的缓冲区溢出。
- 已经发送但还未收到确认的数据包数量:发送方需要保留一定数量的未确认数据包,以确保数据包能够按序传输并避免重传。
接收窗口的大小取决于接收方的缓冲区大小和已接收但未处理的数据包数量。接收窗口的大小由以下两个因素共同决定:
- 接收方缓冲区大小:接收方需要分配一定的缓冲区来存储接收到的数据包,接收窗口的大小不能超过缓冲区的大小。
- 已经接收但还未处理的数据包数量:接收方需要保留一定数量的未处理数据包,以确保数据包能够按序处理并避免丢失。
通过滑动窗口机制,TCP协议可以实现可靠的数据传输和流量控制,确保数据包能够正确地传输并避免网络拥塞。
出现问题:死锁
解决办法:持续计时器
tips:
63.糊涂窗口综合征?
糊涂窗口综合征(Silly Window
Syndrome)是指在TCP协议中,当接收方窗口非常小,且发送方发送的数据报文非常小,就会出现发送方发送过多的小数据包,导致网络拥塞和性能下降的现象。具体来说,糊涂窗口综合征的发生条件如下:
- 接收方窗口非常小,只能容纳几个字节的数据;
- 发送方每次只发送几个字节的数据,因为发送方的应用程序只传输了少量的数据;
- 发送方在等待接收方发送确认消息之前,不能发送更多的数据,因为发送方的发送窗口已经被减小到一个非常小的值。
在这种情况下,发送方发送的数据包非常小,而且数量很多,这会导致网络拥塞和性能下降。这是因为网络中的路由器和交换机需要处理更多的数据包,而且每个数据包都需要消耗一定的带宽和网络资源。
为了避免糊涂窗口综合征,可以采用以下的解决方案:
- 在发送方和接收方之间采用流量控制,使得发送方发送的数据量不会超过接收方的窗口大小;
- 增加发送方发送的数据量,例如通过Nagle算法将多个小数据包组合成一个大的数据包,或者使用延迟确认技术,使得发送方可以发送更多的数据;
- 调整TCP窗口的大小,以便发送方和接收方之间可以传输更多的数据,同时避免过多的小数据包导致网络拥塞。
64.TCP的拥塞控制?
TCP协议的拥塞控制是一种用于调节发送方发送速率的技术,目的是防止网络拥塞和避免网络性能下降。TCP拥塞控制主要有以下几个方面:
- 慢启动:在TCP建立连接或发生拥塞时,发送方发送的数据量将逐渐增加,直到网络拥塞出现为止。慢启动算法将初始拥塞窗口设置为一个较小的值,然后每收到一个确认消息,就将拥塞窗口加倍,以便逐步增加发送速率。如果发生超时或网络拥塞,就将拥塞窗口重新设置为一个较小的值,然后重新开始慢启动。
- 拥塞避免:一旦发送方的拥塞窗口达到一定的大小,就使用拥塞避免算法来防止网络拥塞。拥塞避免算法将拥塞窗口每次增加1个MSS(最大报文段长度),以便逐步增加发送速率,同时监测网络的拥塞情况,如果发现网络拥塞,就将拥塞窗口减小。
- 快速重传:如果发送方连续发送了相同的数据包,而接收方只收到了其中的一部分,就认为该数据包丢失了,发送方将立即重传该数据包,而不必等待超时。
- 快速恢复:如果发送方检测到网络拥塞,并将拥塞窗口减小,但是接收方收到了后续数据包,就会发送一个确认消息,告诉发送方可以继续发送数据,而不必等待拥塞窗口重新增加。这就是快速恢复算法。
- 超时重传:如果发送方等待确认消息的时间超过了一定的时间,就认为数据包丢失了,将立即重传该数据包。
通过这些拥塞控制技术,TCP协议可以自适应地调整发送速率,避免网络拥塞和性能下降,从而保证数据的可靠传输。
拥塞控制和流量控制的区别?
拥塞控制:
·1.防止过多的数据注入到网络中,避免网络中的路由器或链路过载
·2.是一个全局性的过程,涉及到所有主机、路由器,以及与降低网络传输性能有关的所有因素。
流量控制
·1.抑制发送端发送数据的速率以使接收端来得及接收
·2.点对点通信量的控制,是个端到端的问题
65.TCP的三次握手和4次挥手?
最好看看:深入浅出TCP三次握手 (多图详解)
简单点说是:
- TCP的三次握手是建立TCP连接的过程,客户端发送SYN请求,服务端发送SYN+ACK响应,客户端发送ACK确认。
- TCP的四次挥手是终止TCP连接的过程,客户端发送FIN请求,服务端发送ACK确认,服务端发送FIN请求,客户端发送ACK确认。
详细一点是:
三次握手是TCP建立连接的过程。在此过程中,客户端和服务端之间进行了以下步骤:
- 客户端向服务端发送SYN报文段,请求建立连接。SYN是同步序列号的缩写,它包含了一个随机的初始序列号(ISN)。
- 服务端收到SYN报文段后,向客户端发送SYN+ACK报文段,表示确认收到请求,并请求建立连接。SYN+ACK报文段中,ACK表示确认收到客户端的SYN报文段,同时SYN表示服务端也发送了一个随机的ISN。
- 客户端收到服务端的SYN+ACK报文段后,向服务端发送ACK报文段,表示确认建立连接。ACK报文段中,ACK表示确认收到服务端的SYN+ACK报文段,同时将确认号设置为服务端的ISN+1,序列号设置为客户端的ISN+1。
四次挥手是TCP断开连接的过程。在此过程中,客户端和服务端之间进行了以下步骤:
- 客户端向服务端发送FIN报文段,请求关闭连接。FIN表示发送方已经发送完毕数据,请求关闭连接。
- 服务端收到FIN报文段后,向客户端发送ACK报文段,表示确认收到请求。此时服务端不会立即关闭连接,而是继续等待数据的传输。
- 服务端发送FIN报文段,请求关闭连接。此时服务端也已经发送完毕数据,请求关闭连接。
- 客户端收到服务端的FIN报文段后,向服务端发送ACK报文段,表示确认关闭连接。此时客户端也不会立即关闭连接,而是等待一段时间,以便接收可能未到达的数据。服务端在收到ACK报文段后,关闭连接。
在四次挥手过程中,客户端和服务端都需要发送一个FIN报文段和一个ACK报文段,以确认对方的请求和响应。最终,两端都将关闭连接。
66.应用层作用?
应用层是OSI模型中最高层,负责应用程序之间的通信和数据交换。它为应用程序提供了一些协议和服务,使得应用程序可以方便地进行数据传输和通信。
应用层协议有很多,常见的有HTTP、FTP、SMTP、POP3、SSH等。这些协议不仅规定了数据传输的格式和内容,还规定了数据交换的方式和通信流程。
应用层服务包括身份认证、授权、会话管理、数据加密等。这些服务为应用程序提供了安全性和可靠性保障,使得应用程序可以在网络中进行安全的数据传输和通信。
应用层还提供了应用程序接口(API),应用程序可以使用这些API来访问底层网络协议栈,实现数据传输和通信功能。常见的应用程序接口有Socket、Winsock、POSIX等。
总的来说,应用层负责应用程序之间的数据交换和通信,提供了一些协议和服务,使得应用程序可以方便地进行数据传输和通信。
67.DNS?域名结构?区和域的区别?
DNS(Domain Name System)是一个分布式的命名系统,它用于将域名转换为IP地址。DNS的主要作用是将人类可读的域名转换为计算机可读的IP地址,以便实现网络通信。
域名结构通常由多个部分组成,每个部分之间用点号(.)分隔。以 www.example.com 为例,其中 “.com” 是顶级域名(TLD,Top-Level Domain),“.example” 是二级域名(SLD,Second-Level Domain),“www” 是主机名(Hostname)。
DNS将域名划分为多个区(Zone),每个区都有一个权威DNS服务器(Authoritative DNS Server)来管理该区域内的域名解析。每个域名只能由一个权威DNS服务器来管理。
一个域通常包含多个子域,每个子域都可以有自己的权威DNS服务器。权威DNS服务器负责管理该子域内的域名解析,并且可以通过DNS委托(DNS Delegation)的方式将该子域的管理权限委托给其他DNS服务器。
区和域的区别在于,区是一个DNS服务器管理的一部分域名空间,而域则是由多个区组成的完整的域名空间。一个域通常由多个区组成,每个区都有一个权威DNS服务器来管理该区域内的域名解析。
68.域名服务器类型?递归查询与迭代查询?
域名服务器主要分为以下三种类型:
- 根域名服务器(Root DNS Server):全球共有13台根域名服务器,它们的主要作用是响应DNS递归查询的请求,返回顶级域名服务器的地址。
- 顶级域名服务器(Top-Level DNS Server):负责管理一级域名,如 “.com”、“.org”、".cn"等,它们的主要作用是响应DNS递归查询的请求,返回下一级域名服务器的地址。
- 权威域名服务器(Authoritative DNS Server):负责管理特定域名下的所有主机名解析,它们的主要作用是响应DNS迭代查询的请求,返回所查询主机名的IP地址。
在DNS查询中,递归查询和迭代查询是两种不同的查询方式。
- 递归查询是指,当DNS客户端向本地DNS服务器发出查询请求时,本地DNS服务器会向根域名服务器发出递归查询请求,根域名服务器会返回顶级域名服务器的地址,本地DNS服务器再向顶级域名服务器发出递归查询请求,顶级域名服务器会返回下一级域名服务器的地址,以此类推,直到找到所查询的域名的IP地址。最后,本地DNS服务器将所查询的域名和其对应的IP地址返回给DNS客户端。
假设有一个用户要访问 www.example.com 这个网站,
- 首先用户的电脑会向本地 DNS 服务器发出查询请求,本地 DNS 服务器在自己的缓存中查找是否有对应的 IP 地址。如果没有,本地 DNS 服务器就向根域名服务器发出查询请求,根域名服务器返回 com 域的权威 DNS 服务器的地址。
- 本地 DNS 服务器再向 com 域的权威 DNS 服务器发出查询请求,权威 DNS 服务器返回 example.com 域的权威 DNS 服务器的地址。
- 本地 DNS 服务器再向 example.com 域的权威 DNS 服务器发出查询请求,最终得到 www.example.com 的 IP 地址,并把这个 IP 地址返回给用户的电脑
在递归查询的过程中,DNS 服务器会一直向下一级 DNS 服务器发出查询请求,直到查询到目标主机的 IP 地址或者查询失败为止。递归查询过程中,DNS 服务器会自己负责从下一级 DNS 服务器获取所需的信息,并返回给请求的客户端。
迭代查询是指,当DNS客户端向本地DNS服务器发出查询请求时,本地DNS服务器会向根域名服务器发出迭代查询请求,根域名服务器会返回顶级域名服务器的地址,本地DNS服务器再向顶级域名服务器发出迭代查询请求,顶级域名服务器会返回下一级域名服务器的地址,DNS客户端再向下一级域名服务器发出迭代查询请求,直到找到所查询的域名的IP地址。最后,DNS客户端将所查询的域名和其对应的IP地址返回给本地DNS服务器。
假设有一个用户要访问 www.example.com 这个网站,
- 首先用户的电脑会向本地 DNS 服务器发出查询请求,本地 DNS 服务器在自己的缓存中查找是否有对应的 IP 地址。如果没有,本地 DNS 服务器就向根域名服务器发出查询请求。
- 根域名服务器返回 com 域的权威 DNS 服务器的地址,本地 DNS 服务器再向 com 域的权威 DNS 服务器发出查询请求。 如果 com 域的权威 DNS 服务器无法回答该请求,它会返回一个指向 example.com 域的权威 DNS 服务器的地址给本地 DNS服务器,让本地 DNS 服务器向 example.com 域的权威 DNS 服务器发出查询请求。
- 如果 example.com 域的权威 DNS 服务器也无法回答该请求,它会返回一个指向 www.example.com 的权威 DNS
- 服务器的地址给本地 DNS 服务器,让本地 DNS 服务器向 www.example.com 域的权威 DNS
- 服务器发出查询请求,最终得到 www.example.com 的 IP 地址,并把这个 IP 地址返回给用户的电脑。
在迭代查询的过程中,DNS 服务器不会递归地向下一级 DNS 服务器发出查询请求,而是直接返回一个指向下一级 DNS 服务器的地址,让客户端自行向下一级 DNS 服务器发出查询请求。客户端需要自己处理 DNS 服务器返回的地址,然后向下一级 DNS 服务器发出查询请求。
总的来说,递归查询是由DNS服务器代表DNS客户端向其他DNS服务器查询,直到找到所查询的域名的IP地址,而迭代查询是由DNS客户端自己向DNS服务器查询,直到找到所查询的域名的IP地址。
69.FTP、TFTP、NFS以及TELNET?
FTP、TFTP、NFS和TELNET是常用的网络协议,具体介绍如下:
- FTP(File Transfer
- Protocol)文件传输协议:FTP是用于在网络上进行文件传输的协议,它包括两个组件:FTP客户端和FTP服务器。FTP客户端是指用于上传或下载文件的应用程序,而FTP服务器是指存储文件并提供文件访问服务的计算机。FTP协议通过TCP协议的21号端口进行数据传输。
- TFTP(Trivial File Transfer
- Protocol)简单文件传输协议:TFTP是一个简单的文件传输协议,它通过UDP协议的69号端口进行数据传输。TFTP具有简单、轻量级的特点,但是没有FTP那样强大的功能,通常用于网络设备的升级、备份等操作。
- NFS(Network File
- System)网络文件系统:NFS是一种分布式文件系统,允许网络上的计算机通过网络共享文件和目录。NFS服务器将文件共享给客户端,客户端可以在本地访问共享的文件。NFS协议通过TCP协议的2049号端口进行数据传输。
- TELNET:TELNET是一种远程登录协议,允许用户从一个计算机连接到另一个计算机,以便在远程计算机上执行操作。TELNET协议通过TCP协议的23号端口进行数据传输。然而,TELNET协议已经逐渐被SSH(Secure
- Shell)协议所取代,因为TELNET协议是明文传输的,安全性较差。
70.HTTP?
HTTP(Hypertext Transfer Protocol)是一种用于传输超媒体文档(例如 HTML)的协议。它是基于请求-响应模式工作的,其中客户端发送请求,服务器返回响应。
HTTP报文是在HTTP协议中传输的数据,它由两部分组成:请求报文和响应报文。请求报文由客户端发送到服务器,请求服务器处理某个操作,例如获取一个资源或提交表单。响应报文由服务器发送回客户端,包含请求的结果或出现的错误。
HTTP报文由两部分组成:报文头和报文体。报文头包含请求或响应的元数据,例如请求方法、状态码、日期和时间、报文主体长度等。报文体是请求或响应的实际数据内容。
HTTP协议有多个版本,常见的有HTTP/1.0、HTTP/1.1和HTTP/2。HTTP/1.1是目前使用最广泛的版本,它支持持久连接和流水线化,这使得客户端可以发送多个请求并在单个连接上接收多个响应。
HTTP协议使用TCP协议作为其传输层协议,因此它是一种可靠的协议,可以确保数据的可靠传输。HTTP协议也支持加密传输,可以使用HTTPS协议来保护数据的隐私和完整性。
总的来说,HTTP协议是互联网上最重要的协议之一,它支持各种不同的应用程序,包括Web浏览器、Web服务、API等。理解HTTP协议是进行Web开发和网络通信的基础。
下面是一个HTTP请求报文的例子:
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1
上面的报文是一个GET请求,请求的资源路径是/index.html,使用的协议版本是HTTP/1.1。除此之外,还包含了一些请求头信息,比如Host表示请求的目标主机,User-Agent表示客户端的浏览器类型,Accept表示客户端能够接受的响应类型等。
下面是一个HTTP响应报文的例子:
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 1234 Date: Mon, 01 Jan 2000 00:00:00 GMT Server: Apache/2.4.29 (Unix) Last-Modified: Sun, 31 Dec 1999 23:59:59 GMT ETag: "1234567890abcdef" Accept-Ranges: bytes Connection: close <!DOCTYPE html> <html> <head> <title>Example</title> </head> <body> <h1>Welcome to Example</h1> <p>This is an example HTML page.</p> </body> </html>
上面的报文是一个200 OK的响应,表示请求成功。响应头包含了一些元数据,比如Content-Type表示响应内容的类型,Content-Length表示响应内容的长度,Date表示响应时间等。响应头和响应体之间用一个空行分隔开,空行之后是响应的具体内容,这里是一个简单的HTML页面。
71.简述用户在浏览器中输入http://acm.sdtbu.edu.cn并回车到浏览器显示出页面的主要流程?
当用户在浏览器中输入网址"http://acm.sdtbu.edu.cn"并回车时,主要流程如下:
- 域名解析:浏览器首先将网址中的域名"acm.sdtbu.edu.cn"解析成对应的IP地址。如果本地DNS缓存中没有该域名的记录,则向本地DNS服务器发送域名解析请求。
- 建立TCP连接:浏览器向Web服务器发送TCP连接请求,进行三次握手,建立可靠的数据传输通道。
- 发送HTTP请求:浏览器向Web服务器发送HTTP请求,请求获取网站的相关资源,如HTML文件、CSS样式表、JavaScript脚本等。
- 服务器响应:Web服务器接收到请求后,返回相应的HTTP响应,其中包含了请求资源的信息和数据。
- 解析渲染页面:浏览器接收到HTTP响应后,解析HTML文档、CSS样式表和JavaScript脚本,将网页内容呈现给用户。浏览器按照HTML文档的结构将网页内容渲染成可视化页面,并加载和解析页面中的其他资源。
- 断开TCP连接:浏览器完成页面加载后,向Web服务器发送TCP连接断开请求,进行四次挥手,断开TCP连接。
整个过程涉及到DNS解析、TCP连接、HTTP请求和响应、页面解析和渲染等多个步骤,其中每一步都需要一定的时间和资源开销,影响页面的加载速度和用户体验。