计算机网络面试题-2
常见面试题
-
请说说TCP/IP四层分层模型,每个分层说两个协议。⭐⭐⭐⭐⭐
-
应用层:应用层是体系结构中的最高层。其任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义了应用进程间通信和交互的规则。
常用应用层协议如:
域名系统DNS:DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。
支持互联网应用的协议HTTP:超文本传输协议,在浏览器与服务器间传送文档。
SMTP协议:简单邮件传送协议
FTP协议:文件传输协议
RIP 协议:距离矢量路由选择协议。
-
传输层:也称运输层。其任务是为两台主机中进程之间的通信提供通用的数据传输服务。
主要有两种协议:
**TCP:**提供面向连接的、可靠的数据传输服务。
**UDP:**提供无连接的、尽最大努力可靠交付的传输服务。
SCTP (Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。
-
网络层:其任务是负责为分组交换网上的不同主机提供通信服务。
常用协议如:
IP 协议:(1) 寻址。(2) 路由选择。(3) 分段与组装。
ICMP协议:用于在IP主机、路由器之间传递控制消息,用来提供网络诊断信息 。
-
网络接口层(链路层):两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要专门的链路层协议。
ARP协议:ARP地址解析协议用于将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)
RARP协议:RARP协议(Reverse ARP,反向ARP协议),其功能是将MAC地址解析为对应的IP地址。
-
-
TCP与UDP的区别?⭐⭐⭐⭐⭐
(1)TCP需要建立一对一稳定连接;UDP无连接
(2)TCP一对一;UDP可以一对一、一对多、多对多
(3)TCP可靠传输,序列号、确认应答、超时重传;UDP不保证可靠传输,尽最大努力交付
(4)TCP头部字节20字节;UDP8个字节
(5)TCP开销大;UDP灵活开销小
(6)TCP提供可靠的服务,适用于通讯质量要求高的场景;UDP传输效率高,适用于高速传输和实时性要求的场景。
-
TCP头部包含哪些内容?⭐⭐⭐⭐
TCP头部如图:
//TCP头定义,共20个字节
typedef struct _TCP_HEADER{
short m_sSourPort; //源端口号16位
short m_sDestPort; //目的端口号16位
unsigned int m_uiSequNum; //序列号32位
unsigned int m_uiAcknowlNum;//确认号32位
short m_sHeaderLenAndFlag; //前4位:TCP头长度;中6位:保留;后6位:标志位。共16位
short m_sWindowSize; //窗口大小16位
short m_sCheckSum; //校验和16位
short m_surgentPointer; //紧急数据偏移量16位
}__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
-
TCP为什么要三次握手,能两次吗?⭐⭐⭐⭐⭐
不能两次
假如只进行两次握手,客户端发送连接请求后,会等待服务器端的应答。但是会出现的问题是,假如客户端的SYN迟迟没有到达服务器端,此时客户端超时后,会重新发送一次连接,假如重发的这次服务器端收到了,且应答客户端了,连接建立了。
但是建立后,第一个SYN也到达服务端了,这时服务端会认为这是一个新连接,会再给客户端发送一个ACK,这个ACK当然会被客户端丢弃。但是此时服务器端已经为这个连接分配资源了,而且服务器端会一直维持着这个资源,会造成资源浪费。
两次握手的问题在于服务器端不知道SYN的有效性,所以如果是三次握手,服务器端会等待客户端的第三次握手,如果第三次握手迟迟不来,服务器端就会释放相关资源。
-
TCP为什么要四次挥手,能三次吗?⭐⭐⭐⭐⭐
不能三次。
第二次挥手和第三次挥手不能合并在一起,这是因为第二次挥手后,服务器端可能还在传输数据,需要等待数据传输完毕后再进行第三次挥手。
-
说说TCP三次握手的过程。⭐⭐⭐⭐⭐
三次握手:
- Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,等待Server确认。
- Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置1,ack=J+1,随机产生一个值seq=K,并将该数据包发给Client以确认连接请求。
- Client收到确认后,检测ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server。完成三次握手,随后Client与Server之间可以开始传输数据了。
-
说说TCP四次挥手的过程。⭐⭐⭐⭐⭐
四次挥手:
- 数据传输结束后,Client的应用进程发出连接释放报文段FIN,并停止发送数据,此时Client依然可以接收Server发送来的数据。
- Server接收到FIN后,发送一个ACK给Client,确认序号为收到的序号+1。
- 当Server没有数据要发送时,Server发送一个FIN报文,等待Client的确认。
- Client收到Server的FIN报文后,给Server发送一个ACK报文,确认序列号为收到的序号+1。此时Client进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。
-
为什么第四次挥手后,客户端需要等待2MSL? ⭐⭐⭐⭐⭐
这是为了保证客户端发送的最后一个ACK报文段能够到达服务器。如果客户端不等待2MSL,这个ACK报文段可能丢失,因而使得处在LAST-ACK状态的服务器收不到ACK报文段的确认,导致服务器无法正常关闭。而如果客户端等待2MSL,服务器就会超时重传FIN报文段,而客户端就能在2MSL时间内收到这个重传的FIN-ACK报文段。接着客户端重传一个确认,重新启动2MSL计时器。当服务器收到最后一个ACK后就可以正常关闭了。
2MSL的意义是,经过2MSL后,所有的报文都会消失,不会影响下一次连接。最后客户端和服务器端都能正常进入到CLOSED状态。
-
什么是洪泛攻击?怎么避免?⭐⭐⭐⭐⭐
A(攻击者)发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当这个服务器返回ACK以后,A不再进行确认,那这个连接就处在了一个挂起的状态,也就是半连接的意思,那么服务器收不到再确认的一个消息,还会重复发送ACK给A。
这样一来就会更加浪费服务器的资源。A就对服务器发送非法大量的这种TCP连接,由于每一个都没法完成握手的机制,所以它就会消耗服务器的内存最后可能导致服务器死机,就无法正常工作了。更进一步说,如果这些半连接的握手请求是恶意程序发出,并且持续不断,那么就会导致服务端较长时间内丧失服务功能——这样就形成了DoS攻击。这种攻击方式就称为SYN泛洪攻击。
避免方法:
最常用的一个手段就是优化主机系统设置。
(1)比如降低SYN timeout时间,使得主机尽快释放半连接的占用。
(2)或者采用SYN cookie设置,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。Cookie是当浏览某网站时,由Web服务器置于硬盘上一个非常小的文本文件,用来记录用户ID,密码,浏览过的网页,停留时间等信息。当我们认为受到了攻击,合理的采用***设置等外部网络进行拦截。
(3)。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> - 本专刊适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专刊适合于互联网C++软件开发、嵌入式软件求职的学生或人士。 - 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共近400道,知识点讲解全面。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。 </p> <p> <br /> </p>
查看30道真题和解析