嵌入式软件常用面试题汇总之Linux系统相关(2)

Linux系统之网络编程相关的面试题汇总

对于应届生校招类,面试时候基本上只要关键词有达到就可以了。

1.介绍下TCP协议?

关键词:面向连接,可靠,有序,准确性。

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议。它负责在网络中提供可靠的、有序的数据传输服务。适用于需要确保数据完整性和可靠性的应用,如文件传输、远程登录和Web浏览。以下是TCP协议的主要特点和功能:

面向连接: TCP在通信开始之前需要建立连接,确保通信的两端都知道对方的存在,并且彼此可以进行通信。连接的建立和断开分别使用三次握手和四次挥手的过程。

三次握手(Connection Establishment):

客户端向服务器发送连接请求(SYN)。

服务器接收到请求后回复确认连接请求,并发送自己的连接请求(SYN-ACK)。

客户端接收到服务器的确认后发送确认(ACK)。

四次挥手(Connection Termination):

发送方通知接收方,准备关闭连接。

接收方收到通知后回复确认,并通知应用层停止发送数据。

接收方完成数据发送后,发送关闭连接请求。

发送方接收到关闭请求后,回复确认,完成连接的关闭。

可靠性: TCP通过一系列的机制确保数据的可靠传输,包括序号、确认和重传机制。

序号和确认: 每个TCP段都有一个序号,接收方使用确认号来指示已成功接收的最后一个字节的序号。序号和确认号用于维护有序的数据传输。

重传机制: 如果发送方在一定时间内未收到对方的确认,或者接收方检测到丢失的数据,就会触发重传机制,重新发送未确认的数据。

流控制: TCP使用滑动窗口机制进行流控制,确保发送方不会发送太多数据导致接收方无法处理。接收方通过通告窗口大小来告知发送方当前可接收的数据量。

拥塞控制: TCP通过拥塞窗口控制算法来避免网络拥塞。发送方通过控制发送速率和动态调整拥塞窗口大小来适应网络状况。

数据分段和重组: TCP将应用层数据分割成小的数据段进行传输,每个数据段包含序号。接收方根据序号将数据段重组成完整的数据流。

首部格式: TCP首部包含各种控制信息,如源端口和目标端口、序号和确认号、窗口大小、标志位(SYN、ACK、FIN等)等。

2.介绍下UDP协议?

关键词:无连接,不可靠性,快速传输和低延迟

UDP(User Datagram Protocol)是一种无连接的、简单的传输层协议。与TCP不同,UDP不提供可靠性、流控制和拥塞控制,它主要关注快速传输和低延迟。适用于对实时性要求较高的应用。以下是UDP协议的主要特点和功能:

无连接: UDP是无连接的,通信的两端在发送和接收数据之前不需要建立连接。这使得UDP更加轻量和灵活,适用于一些实时性要求较高、容忍少量数据丢失的应用。

不可靠性: UDP不提供可靠性保证,它不负责数据的重传和顺序控制。如果数据在传输过程中丢失或损坏,UDP不会进行任何恢复操作。

简单: UDP的头部相对较小,仅包含必需的字段,不像TCP那样包含大量的控制信息。这使得UDP的开销较小,传输效率更高。

快速传输: 由于UDP的简单性和无连接性质,它在传输数据时速度较快。这使得UDP常用于实时应用,如音频和视频流传输。

广播和多播支持: UDP支持广播和多播,可以将数据同时发送给多个接收方。这对于一对多的通信场景非常有用。

适用场景

实时应用: 由于UDP的低延迟和快速传输特性,它常被用于实时通信应用,如语音通话、视频会议和在线游戏。

广播和多播: UDP适用于需要一对多通信的场景,比如视频直播和网络广播。

简单请求-应答: 对于某些简单的请求-应答模式,UDP可能比TCP更适用。

首部格式: UDP首部较为简单,包含源端口和目标端口、长度和校验和等字段。

3.TCP与UDP具体区别?

关键词:连接性,可靠性,流控制和拥塞控制

连接性:

TCP: 面向连接的协议,通信前需要通过三次握手建立连接,之后才能进行数据传输。提供可靠的、面向字节流的通信。

UDP: 无连接的协议,通信的两端在传输数据之前不需要建立连接。每个UDP数据包都是独立的,没有先后顺序的要求。

可靠性:

TCP: 提供可靠的数据传输,通过序号、确认和重传机制来保证数据的可靠性。确保数据的有序性和完整性。

UDP: 不提供可靠性保证,不进行数据的重传和顺序控制。适用于对数据实时性要求较高的场景,允许一定程度的丢失。

流控制和拥塞控制:

TCP: 使用滑动窗口和拥塞控制算法,以避免网络拥塞,确保数据的流畅传输。

UDP: 不提供流控制和拥塞控制机制,数据包可能会因网络拥塞而丢失。

首部开销:

TCP: 首部较大,包含许多控制信息,导致相对较高的开销。

UDP: 首部较小,只包含基本的信息,开销相对较小。

适用场景:

TCP:

适用于对数据完整性和可靠性要求较高的应用,如文件传输、Web浏览、电子邮件等。

适用于需要保持连接状态的应用,如HTTP、FTP等。

UDP:

适用于对实时性要求较高、可以容忍少量数据丢失的应用,如语音通话、视频流传输、在线游戏等。

适用于广播和多播通信,如视频直播。

数据分段:

TCP: 提供面向字节流的通信,会将应用层数据分段并传输。

UDP: 保留应用层的消息边界,每个UDP数据包都是独立的,不会分段。

头部校验和:

TCP: 包含头部校验和字段,用于检测数据包是否被损坏。

UDP: 同样包含头部校验和字段,但是校验和的计算方式不同。

4.什么时候选TCP 什么时候选UDP?

TCP:流式套接字基于可靠的数据流传输服务,面向连接的特点决定了流式套接字的传输代价大,且只适合于一对一的数据传输;可靠的特点意味着上层应用程序在设计开发时不需要过多的考虑数据传输过程中的丢失、乱序、重复问题。

因此,TCP的适用场合如下:

大数据量的数据传输应用:流式套接字适合文件传输这类大数据量传输的应用,传输的内容可以是任意大的数据。在这种场景下,数据传输量大,对数据传输的可靠性要求高,且与数据传输的代价相比,连接维护的代价微乎其微。

可靠性要求高的传输应用:流式套接字适合应用在可靠性要求高的传输应用中,在这种情况下,如果使用其他不可靠的传输服务承载数据,那会带来复杂的编码代价。

UDP:数据报套接字基于不可靠的报文传输服务,这种服务的特点是无连接、不可靠。无连接的特点决定了数据报套接字的传输非常灵活,具有资源消耗小,处理速度快的优点。而不可靠的特点意味着在网络质量不佳的环境下,发生数据包丢失的现象会比较严重。

因此,UDP的使用场合如下:

音频、视频的实时传输应用:这类对实时性要求比较高,传输内容通常被切分为独立的数据报,UDP协议节省了很大的网络开销,应用UDP协议的实时性并增加控制功能是实现实时传输应用较好的解决方法。

广播或多播的传输应用:TCP只能用于1对1的数据传输,如果应用程序需要广播或多播传送数据,那么必须使用UDP协议。

简单高效需求大于可靠需求的传输应用:即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响的场景下。

5.TCP是如何保证可靠数据传输的

总结:序号和确认机制用于维护有序传输,重传机制和超时机制用于应对数据包的丢失,滑动窗口和流控制机制用于适应网络状况的变化。

具体使用以下机制:

序号和确认机制:

序号: TCP在传输数据时为每个字节分配一个唯一的序号,用于标识数据的顺序。

确认: 接收方通过确认号告知发送方已成功接收到的最后一个字节的序号。

重传机制:如果发送方在一定时间内未收到接收方的确认,或者接收方检测到丢失的数据,发送方会重新发送未确认的数据。通过使用超时机制,发送方可以确定何时应该触发重传操作。

滑动窗口:TCP使用滑动窗口机制来进行流控制,确保发送方不会发送太多数据导致接收方无法处理。接收方通过通告窗口大小来告知发送方当前可接收的数据量。

流控制:TCP使用基于窗口的流控制机制,通过动态调整窗口大小,确保发送方不会超过接收方的处理能力。接收方通过TCP头部的窗口字段通告其可接收的数据量,发送方根据这个信息来控制发送速率。

连接管理:TCP使用三次握手和四次挥手的连接管理机制,确保连接的建立和断开是可靠的。三次握手用于建立连接,四次挥手用于关闭连接。

超时和重传:TCP使用超时机制来检测数据包是否丢失。如果在规定的时间内未收到确认,发送方会重传数据。通过动态调整超时时间,TCP可以适应网络条件的变化。

校验和:TCP在首部中包含一个16位的校验和字段,用于检测数据包是否在传输过程中发生损坏。接收方使用校验和来验证接收到的数据的完整性。

6.具体介绍下TCP的三次握手四次挥手?

三次握手(建立连接):

客户端向服务器发送连接请求:客户端(Client)发送一个TCP报文段,设置SYN(同步)标志位为1,表示请求建立连接。客户端选择一个初始序列号(ISN),用于标识发送的数据字节。

服务器回复确认连接请求:服务器(Server)收到客户端的连接请求后,发送一个TCP报文段,设置SYN标志位为1,同时设置ACK(确认)标志位为1。服务器选择自己的初始序列号,并确认客户端的序列号(ISN+1)。

客户端确认连接:客户端收到服务器的确认后,发送一个TCP报文段,设置ACK标志位为1,表示连接已经建立。此时,客户端和服务器之间的连接已经建立,可以开始传输数据。

四次挥手(关闭连接):

发起关闭:一方(假设是客户端)发送一个TCP报文段,设置FIN(结束)标志位为1,表示希望关闭连接。客户端进入FIN-WAIT-1状态。

确认关闭请求:另一方(服务器)收到关闭请求后,发送一个TCP报文段,设置ACK标志位为1,确认收到关闭请求。服务器进入CLOSE-WAIT状态。

关闭连接并发送FIN:服务器在关闭时,如果没有待发送的数据,会发送一个TCP报文段,设置FIN标志位为1,表示可以关闭连接。客户端收到服务器的FIN后,进入CLOSE-WAIT状态。

确认关闭连接:客户端发送一个TCP报文段,设置ACK标志位为1,确认收到服务器的关闭请求。服务器收到确认后,进入LAST-ACK状态。客户端在发送确认后,等待一段时间,确保服务器收到最后的确认,然后进入TIME-WAIT状态。

7.了解过七层网络模型与四层网络模型及每层的网络协议吗?

两个常用的网络模型是OSI(Open Systems Interconnection)七层模型和TCP/IP四层模型

OSI七层模型:

物理层(Physical Layer):

负责传输比特流,定义物理传输媒介和接口标准。

主要协议: IEEE 802.3(Ethernet)、IEEE 802.11(Wi-Fi)、T1/E1等。

数据链路层(Data Link Layer):

提供可靠的点对点通信,将比特流组织成帧,并进行错误检测和纠正。

主要协议: PPP(Point-to-Point Protocol)、HDLC(High-Level Data Link Control)、Ethernet帧。

网络层(Network Layer):

实现数据包的路由和转发,提供端到端的逻辑地址。

主要协议: IP(Internet Protocol)、ICMP(Internet Control Message Protocol)、OSPF(Open Shortest Path First)、BGP(Border Gateway Protocol)。

传输层(Transport Layer):

提供端到端的可靠数据传输服务,负责分段、流控制和错误恢复。

主要协议: TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)。

会话层(Session Layer):

管理会话的建立、维护和终止,提供数据同步和恢复。

主要协议: NetBIOS(Network Basic Input/Output System)、RPC(Remote Procedure Call)。

表示层(Presentation Layer):

处理数据格式和编码,确保应用层的数据能够正确解释。

主要协议: JPEG、ASCII、EBCDIC。

应用层(Application Layer):

提供网络服务和应用程序之间的通信,是用户直接接触的层次。

主要协议: HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)。

TCP/IP四层模型:

链路层(Link Layer):

与OSI模型的物理层和数据链路层相当。

主要协议: ARP(Address Resolution Protocol)、Ethernet。

网络层(Internet Layer):

与OSI模型的网络层相当。

主要协议: IP(Internet Protocol)、ICMP(Internet Control Message Protocol)。

传输层(Transport Layer):

与OSI模型的传输层相当。

主要协议: TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)。

应用层(Application Layer):

与OSI模型的应用层、表示层和会话层相当。

主要协议: HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)。

8.端口号与ip、网关的作用?

在国际互联网(Internet)上有成千百万台主机(host),为了区分这些主机,人们给每台主机都分配了一个专门的“地址”作为标识,称为IP地址。 IP协议是由TCP、UDP、ARP、ICMP等一系列子协议组成的。其中,主要用来做传输数据使用的是TCP和UDP协议。在TCP和UDP协议中,都有端口号的概念存在。端口号的作用,主要是区分服务类别和在同一时间进行多个会话。网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和安全功能。大多数网关运行在OSI 7层协议的顶层--应用层。

9.如果只有UDP协议,你如何保证可靠传输?

需要在应用层或协议的上层实现一些机制,因为UDP本身不包含这些特性,可能可以这样做:

应用层实现重传机制:在应用层实现自定义的重传机制,即在发送数据的一方,监测对方是否接收到数据,如果未收到确认,就进行重传。这需要在应用层维护数据的发送和接收状态。

超时和定时器:应用层可以使用超时和定时器机制来确定何时进行重传。如果发送方在一定时间内未收到对方的确认,可以选择重传数据。

数据包编号和顺序检查:在应用层为数据包编号,接收方在收到数据时检查序号,确保数据包的顺序正确。如果发现有丢失的数据包,可以请求发送方重新发送。

应用层流控制:实现自定义的流控制机制,通过在应用层进行数据发送的速率控制,以防止发送方过快地发送数据,导致接收方无法处理。

确认机制:在应用层实现确认机制,接收方收到数据后,发送确认消息给发送方。发送方在一定时间内未收到确认,可以选择重传。

10.Socket编程中服务器端和客户端主要用到哪些函数?

服务器端常用函数:

socket():创建套接字,用于监听客户端的连接请求。

示例:socket(AF_INET, SOCK_STREAM, 0);

bind():将套接字与特定的IP地址和端口绑定。

示例:bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address));

listen():启动监听模式,使服务器可以接受客户端的连接请求。

示例:listen(server_socket, backlog);

accept():接受客户端的连接请求,创建一个新的套接字用于与客户端通信。

示例:client_socket = accept(server_socket, (struct sockaddr*)&client_address, &client_address_len);

recv() / send():在已连接的套接字上接收和发送数据。

示例:recv(client_socket, buffer, sizeof(buffer), 0);

close():关闭套接字,释放资源。

示例:close(server_socket);

客户端常用函数:

socket():创建套接字,用于连接服务器。

示例:socket(AF_INET, SOCK_STREAM, 0);

connect():尝试连接到服务器的套接字。

示例:connect(client_socket, (struct sockaddr*)&server_address, sizeof(server_address));

send() / recv():在已连接的套接字上发送和接收数据。

示例:send(client_socket, data, sizeof(data), 0);

close():关闭套接字,释放资源。

示例:close(client_socket);

10.在百度上进行搜索时,会用到网络中的什么层?大概讲一下流程?

在进行百度搜索的过程中,当你输入搜索关键词并按下回车时,应用层的协议(例如HTTP)会将搜索请求封装成数据包。传输层的协议(例如TCP或UDP)负责将数据包分段并添加源端口和目标端口信息。网络层的协议(例如IP)负责将数据包从源设备传输到目标设备,通过路由器进行转发。链路层和物理层负责在相邻网络节点之间传输数据帧,最终将数据送达目标。

#嵌入式面经##牛客在线求职答疑中心##我发现了面试通关密码#

该专栏是我整理的一些嵌入式软件笔面试常见的题目,在有一定计算机基础上,再过一遍该专栏的内容,对应届生校招来说基本上笔面试就没什么问题了! 有任何疑问可随时与我联系,一起交流一起进步。

全部评论

相关推荐

尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
4 13 评论
分享
牛客网
牛客企业服务