Python中12道常见网络编程面试题


今天在找Python网络编程的题目,发现了一篇不错的网络编程的推文,分享给大家,总共罗列出最常见的12道编程题 。大家可以先看看题目,看看自己是否都能答个大概 。

1.简述 OSI 七层协议。

2. 简述 TCP/IP 四层协议。

3. TCP 和 UDP 的区别是什么?

4. TCP 连接建立的时候 3 次握手的具体过程,以及其中的每一步是为什么?

5. TCP 断开连接的具体过程,其中每一步是为什么那么做?

6. TCP 的十一种状态?

7. 什么是 socket?简述基于 tcp 协议的套接字通信流程。

8. 简述基于 udp 协议的套接字通信流程。

9. TCP 为什么不是两次连接?而是三次握手?

10. 为何基于 tcp 协议的通信比基于 udp 协议的通信更可靠?

11. 网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?

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

1.简述 OSI 七层协议。

▪ 应用层

▪ 表示层

▪ 会话层

▪ 传输层

▪ 网络层

▪ 数据链路层

▪ 物理层

2. 简述 TCP/IP 四层协议。

应用层:HTTP

传输层:TCP

网络层:IP

数据链路层:以太网

3. TCP 和 UDP 的区别是什么?

4. TCP 连接建立的时候 3 次握手的具体过程,以及其中的每一步是为什么?

第一步:发送方发送同步序列标号 SYN seq=x

第二步:接收方发送同步序列标号 SYN seq=y 和 确认包ACK x+1

第三步:发送方发送确认包ACK y+1 连接建立成功

5. TCP 断开连接的具体过程,其中每一步是为什么那么做?

第一步:客户端关闭客户到服务器的数据传送,发送给服务端一个FIN seq=x

第二步:服务器收到这个FIN,发回一个ACK x+1,确认序号为收到的序号加1

第三步:服务器关闭客户端的连接,发送给客户端一个FIN seq=y

第四步:客户端发回ACK y+1报文确认,确认序号设置为收到序号加1

6. TCP 的十一种状态?

三次握手:

CLOSED表示初始状态。

LISTEN表示服务器端的某个SOCKET处于监听状态,可以接受连接。

SYN_SENT表示客户端已发送SYN报文,当客户端SOCKET执行CONNECT连接时进入该状态。

SYN_RCVD表示接收到了SYN报文。

ESTABLISHED表示连接已经建立。

四次挥手:

FIN_WAIT_1表示向对方发送了FIN报文,等待对方的FIN报文。当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。

FIN_WAIT_2表示向对方发送了FIN报文,并收到对方回应的ACK报文。该SOCKET则进入到FIN_WAIT_2状态。实际上表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

TIME_WAIT表示收到了对方的FIN报文,并发送出了ACK报文。等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,同时收到了对方带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSING,表示双方都正在关闭SOCKET连接,如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也就会出现CLOSING状态。

CLOSE_WAIT表示在等待关闭。当对方close一个SOCKET后发送FIN报文给自己,己方毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来查看你是否还有数据发送给对方,如果没有,就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以在CLOSE_WAIT状态下,需要完成的事情是等待己方去关闭连接。

LAST_ACK表示被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

7. 什么是 socket?简述基于 tcp 协议的套接字通信流程。

socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信。

流程:

通信双方实例化tcpSocket对象,服务端绑定ip和端口号并执行lisient()方法进入监听状态。

客户端执行connect()方法请求连接,双方完成三次握手建立连接(模块内部实现)。

服务段执行accept()方法获得连接对象,双方实现通信。

通信结束执行close()方法关闭连接。

8. 简述基于 udp 协议的套接字通信流程。

通信双方实例化tcpSocket对象,服务端绑定ip和端口号。

客户端和服务端都可以执行sendto()方法发送数据给指定ip地址和端口号的主机。

客户端和服务端都可以执行recvfrom()方法获得发送给自己的数据以及发送方的ip和端口号。

通信结束执行close()关闭socket对象。

9. TCP 为什么不是两次连接?而是三次握手?

先来分析三次握手:

第一步客户端发送SYN,第二步服务端发送ACK说明客户端发送能力,服务端接收能力OK。

第三部客户端发送ACK说明客户端接受能力,服务端发送能力OK,连接则是可靠的。

如果是两次:

客户端知道自己的接受发送能力和服务端的接受发送能力都OK,而服务端只知道自己的接受能力和客户端的发送能力OK,其余的都不知道,连接不可靠。

10. 为何基于 tcp 协议的通信比基于 udp 协议的通信更可靠?

TCP:面向连接,对方给了确认收到信息,才发下一个,如果没收到确认信息就重发,数据不会丢失

UDP:无连接,一直发数据,不需要对方回应,可能造成数据丢失

11. 网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?

多进程:

开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。

多线程:

一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。

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

多进程:

开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。

多线程:

一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。

协程:

协程的优势在于函数入口可以是上次停止的地方,显然对大规模连接没什么帮助。

所以这种情况推荐使用多线程来设计并发模式。

版权声明:本文为CSDN博主「Mr. Donkey_K」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

https://blog.csdn.net/Dreaming5498/article/details/97107804

如果对于参考答案有不认同的,大家可以在评论区指出和补充,欢迎留言!

1-50、Python面试1-50题汇总

51、说说Python中闭包是什么?

52、read、readline和readlines的区别?

53、说说Python中with的用法?

54、Python中连接字符串用join还是+?

55、Python中search和match的区别?

56、说说Python中字符串大小写转换?

57、Python反转三位整数有几种方法?

58、说说Python中贪婪和非贪婪匹配?

59、说说Python中正负索引?

60、说说Python中切片是什么?

61、Python新式类和旧式类的区别?

62、说说Python中PEP8到底是什么?

63、Python实现深度优先与广度优先?

64、说说Python类中的self参数?

65、说说Python Socket编程步骤?

关注小猿公众号,每天学习一道题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值