网络编程作业题目

本文解答了网络编程中常见的面试问题,包括OSI七层协议、TCP/IP四层协议、TCP与UDP的区别、TCP连接建立与断开的过程、TCP的十一种状态、Socket通信流程、并发服务器的设计等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 常见网络编程面试题目

1.简述 OSI 七层协议。
1)应用层——文件传输,电子邮件,文件服务,虚拟终端
2)表示层——数据格式化,代码转换,数据加密
3)会话层——接触与建立与别的接口的联系
4)传输层——提供对端口的协议,如TCP/UDP
5)网络层——为数据包选择路由
6)数据链路层——传输有地址的帧以及错误检测功能
7)物理层——以二进制数据形式在物理媒体上传输数据

2. 简述 TCP/IP 四层协议。
1)主机到网络层
2)网络互连层,网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组法网目标或主机。同时,为了尽快的发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
3)传输层,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议,即TCP和UDP。
4)应用层,将OSI参考模型中的会话层和表示层的功能合并到应用层实现。
3. TCP 和 UDP 的区别是什么?
根据可靠性来说TCP是可靠的,而UDP是不可靠的。
根觉连接性来讲,TCP是面向连接,但是UDP是无连接的。
根据传输的数据类型来讲:TCP是面向子节流,但是UDP是面向报文。
效率:UDP的传输效率较高,TCP的传输效率较低。

4. TCP 连接建立的时候 3 次握手的具体过程,以及其中的每一步是为什么?
客户端一开始向服务端发送一个数据包,服务端会向他返回一个确认收到的数据包,并且向客户端也发送回一个新的数据包,此时客户端收到服务端新发的数据包后会向服务端返回一个确认的数据包。在三次握手中,客户端和服务端都发送了两个包SYN和ACK,只不过服务端是一次性发送,但是客户端的两个包是分两次发送的。
在这里插入图片描述
5. TCP 断开连接的具体过程,其中每一步是为什么那么做?
客户端与服务端断开连接时需要四次挥手,指的是A端向B端发送断开请求,发送一个数据包,B端收到后可能此时数据没有传输完成,所以B端并不会马上向A端确认,而是发送了一个确认序号,表示收到信息,但是无法现在立刻处理。第三次挥手为当B端数据传输完成后,此时B端可以断开连接,向A端发送断开连接请求,表示此时可以断开连接。第四次挥手是A端收到B端发送的数据包后,会向B端发送确认信号,经过两个MSL时长后断开连接。

6. TCP 的十一种状态?
1)LISTEN——侦听来自远方TCP端口的连接请求
2)SYN_SENT——在发送连接请求后等待对连接请求的确认
3)STN_RECEIVED —— 在收到和发送一个连接请求后对连接请求的确认
4)ESTABLISHED——代表一个打开的连接,数据可以传送给用户
5)FIN_WAIT_1 ——等待远程TCP的连接终端请求,或者先前的连接起来的
6)FIN_WAIT_2—— 从远程TCP等待连接中断请求
7)CLOSE_WAIT —— 等待本地用户发来的连接中断请求
8)CLOSING——等待远程TCP对连接中断的确认
9)LAST_ACK——等待原来法相远程TCP的连接中断请求的确认
10)TIME_WAIT——等待原来法相远程TCP的连接中断请求的确认
11)CLOSED——没有任何连接状态

7. 什么是 socket?简述基于 tcp 协议的套接字通信流程。
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。

服务端先初始化Socket实例化一个类拿到对象(才能调用下面的接口),然后绑定IP端口(bind),监听(listen)就是说客户端可以来连我了,调用accept接收链接;这时客户端初始化一个socket,然后connect与服务端建立好双向链接与accept对应。客户端发送请求数据,服务端处理请求并给客户端回应数据,这样一个通信循环;最后关闭套接字,一次交互结束。

8. 简述基于 tcp 协议的套接字通信流程。
服务端:
1.创建socket对象
2.创建地址和端口
3.监听
4.接收客户端的连接
5.接收客户端发送的消息
6.给客户端发送消息
7.关闭socket对象
客户端:
1.创建一个socket对像
2.连接服务端
3.给服务端发送信息
4.接收服务端发来的消息
5.关闭客户端socket对象

9. TCP 为什么不是两次连接?而是三次握手?
因为TCP协议是面向于连接的,它发送的连接请求需要获得另一端的确认,才可以真正意义上的连接成功。

10. 为何基于 tcp 协议的通信比基于 udp 协议的通信更可靠?
tcp协议一定是先建好双向链接,发一个数据包要得到确认才算发送完成,没有收到就一直给你重发;udp协议没有链接存在,udp直接丢数据,不管你有没有收到。

12. 网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
1.进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
2.线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。
两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP(Symmetric Multi-Processing,对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。)机器上运行,而进程则可以跨机器迁移。

13. 大规模连接上来,并发模型怎么设计?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值