网络知识面试题 计算机网络面试题

2024-02-15 20:20:00 来源 : haohaofanwen.com 投稿人 : admin

下面是好好范文网小编收集整理的网络知识面试题 计算机网络面试题,仅供参考,欢迎大家阅读!

网络知识面试题

计算机网络是除了操作系统外非常重要的基础科目,它涵盖的内容非常多且杂。复习的时候可以按照《计算机网络自顶向下方法》,按照应用层->传输层->网际层->数据链路层->物理层这样的顺序来,这样可以形成逻辑思维的连续性,方便理解记忆!

计算机网络,英文简写众多,一定不能混淆。也可以按照协议来复习:

应用层: HTTP, DNS;

传输层:TCP,UDP;

网络层:IP,ARP;

复习一定要有侧重点,标为❤的题目是高频考点,要反复理解记忆。关键的技术细节三郎均有配图(比如TCP三次握手)。此外题目的得分点(要点)我也用粗体表示。希望能帮助到你!

2022/8/7更新:文中加入了一个彩蛋哦!

【友情提示】欢迎关注公众号“迹寒编程”,回复“计算机网络”,获取本文章的pdf版本,更方便阅读哦~

【部分题目解答来源于网络,侵删】

物理层:底层数据传输,如网线等;代表协议有 IEEE802.3, IEEE802.11(WIFI)等

数据链路层:定义数据的基本格式;如网卡MAC地址;交换机;代表协议有MAC, VLAN, PPP等

网络层:定义IP地址,定义路由功能;如不同设备的数据转发;代表协议有IP,ARP, ICMP;

传输层:端到端的传输数据的基本功能,如TCP,UDP;

会话层:控制应用程序的之间的通信;主要协议有RPC, SQL, NFS等;

表示层:数据格式标识,基本压缩加密;主要包括协议有,JPEG,ASCII;

应用层:各种应用软件;主要协议有FTP,HTTP,DNS, SMTP;

在物理层,数据被称为比特流,在数据链路层,数据被称为;在传输层,数据被称为;网络层,数据被称为

在浏览器中输入URL

浏览器会解析URL地址,同时用DNS(应用层)将其转换为IP地址,DNS服务器是基于UDP(传输层)。

得到IP地址后,浏览器就要与服务器建立一个HTTP(应用层)连接。HTTP生成一个GET请求报文,并利用TCP(传输层)传输。TCP数据包然后会发送给IP层,IP层通过路由选择协议,如OSPF(网络接口层)和交换机等找到目的主机,匹配主机的MAC地址(数据链路层)。

TCP(传输控制协议)是一种面向连接可靠的基于字节流传输层协议

SYN flood攻击是一种分布式拒绝服务(DDoS)攻击,旨在耗尽可用的服务器资源,使得服务器无法传输合法流量。通过重复发送初始连接请求 (SYN) 数据包,攻击者将可击垮目标服务器计算机上的所有可用端口,导致目标设备在响应合法流量时表现迟钝乃至全无响应。

攻击者通常使用伪造的IP地址向目标服务器发送大量的SYN数据包;

2. 服务器分别对每一项连接都做出响应,并确保打开的端口作出响应的准备;

3. 在服务器等待最后一个ACK数据包(永远不会到达)的时候,攻击者将继续发送更多的SYN包。当有新的SYN包到达,服务器就会新开一个端口,并保持连接。用遍所有可用端口后,服务器将无法对外提供正常服务。

SYN flood攻击

如何抵御?

1.扩展挤压队列。 以响应大量的SYN包。

2. 回收最先创建的TCP半开连接。

3. SYN cookie.

流格式套接字(SOCK_STREAM):有连接的套接字

数据在传输过程中不会消失

数据是按照顺序传输的;

数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)

数据报格式的套接字(SOCK_DGRAM) :无连接套接字

强调快速传输而非传输顺序;

传输的数据可能丢失

限制每次传输的数据大小;

数据的发送和接收是同步的(有的教程也称“存在数据边界”)。

参考资料:

套接字有哪些类型?socket有哪些类型?

面向连接和无连接的套接字有什么区别。

面向连接的套接字就是在正式通信之前先要确定一条路径,而无连接套接字不需要。

socket服务端和客户端有哪些流程?

服务端:创建socket->绑定端口->监听端口->接收来自客户端的请求->读取缓冲区的字符串->关闭socket;

客户端:创建socket->绑定端口->向socket写入信息->关闭端口

socket中read()和write()阻塞模式了解吗?

当使用write()发数据,

首先会检查缓冲区,如果缓冲区可用大小小于要发送数据的大小,则会被阻塞,直到缓冲区中有足够空间,才会唤起write();

如果TCP协议正在向网络发送数据,那么输出缓冲区将会被锁定;

如果发送数据大小大于缓冲区,那么数据将会被分批发送;

直到所有数据被发送完,write()函数才返回。

当使用read()接收数据,

一旦缓冲区有数据,就立刻被读取,否则read()函数会被阻塞;

如果要读取的数据长度小于缓冲区中的数据长度,那么就不能将缓冲区数据全部读出,剩余数据将不断积压,直到有read()函数再次读取;

直到读取到所有的数据之后,read()函数才会返回。

参考资料:socket缓冲区以及阻塞模式详解

read()和write()如何处理连接异常行为。(比如收方或发方突然挂掉)

操作系统将异常事件通过read()/write()返回给应用层。

对于read()而言,如果发进程挂了,其对应的操作系统会负责在进程结束前关闭所有的fd并发送一个FIN包到对面。read()如果已经读完buf里面的剩余字节,则会返回EOF;否则本处于阻塞的read()会立即被唤醒,返回EOF。

对于write()而言,由于收不到ack(这个时候其实是调用read()),TCP会重传12次,然后再阻塞的read()上返回错误ETIMEOUT(超时)、EHOSTUNREACH(无法连接主机)、ENETUNREACH(网络不可达)。

参考链接:浅谈TCP/IP网络编程中socket的行为 - PromisE_谢 - 博客园

总结

计算机网络面试根据协议来问,我们只要弄懂常用的那几个,HTTP,TCP,IP,DNS,UDP就可以了,其中TCP的设计最为复杂,建议看《计算机网络-自顶向下》,网上很多内容都是拼凑出来的,没有逻辑可言。

实际的项目中不需要考虑这么底层,考虑应用层就行了,比如搭一个博客,我们把内容通过SSH上传到网络服务器,服务器用前端技术进行渲染,用户浏览的时候就是HTTPS协议,上传文件就是FTP协议(或者SFTP)。此外还有动态路由,中间件等等。高并发环境下要用到IO多路复用等等。


相关文章

专题分类