python网络编程练习

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

1.简述 OSI 七层协议。

1、物理层
为数据链路层提供物理连接,实现比特流的透明传输,所传输数据的单位是比特,该层定义了通信设备与传输线接口硬件的电气、机械以及功能和过程的特性。
2、数据链路层
在通信的实体之间建立数据链路连接,传送以帧为单位的数据,通过检查发生在连接通信系统间传送路上的比特错误并进行恢复,确保比特序列组成为数据流准确无误地传送给对方的系统。数据链路层在相邻的节点之间实现透明的高可靠性传输。
3、网络层
解决多节点传送时的路由选择、拥挤控制及网络互连等,控制分组传送系统的操作,它的特性对高层是透明的,同时,根据传输层的要求选择服务质量,并向传输层报告未恢复的差错。
4、传输层
为两个端系统(源站和目标站)的会话层之间建立一条传输连接,可靠、透明地传送报文,执行端一端差错控制、顺序和流量控制、管理多路复用等。本层提供建立、维护和拆除传送连接的功能,并保证网络连接的质量。它向高层屏蔽了下层数据通信的细节,因而是OSI网络参考模型中最需要的一层。
5、会话层
不参与具体的数据传输,但对数据传输的同步进行管理。它主要负责提供两个进程之间建立、维护和结束会话连接功能,同时要对进程中必要的信息传送方式、进程间的同步以及重新同步进行管理。
6、表示层
解决在两个通信系统中交换信息时不同数据格式的编码之间的转换,语法选择,数据加密与解密及文本压缩等。
7、应用层
负责向用户提供各种网络应用服务,如文件传输、电子邮件、远程访问等。把进程中于对方进程通信的部分放入应用实体中,同时,对各种业务内容的通信功能进行管理。

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

应用层:决定这次通信的应用类型,比如说FTP、DNS、SMTP等等,同时HTTP协议也属于应用层的范围。通俗来讲,应用层决定这一次通信要干嘛。

传输层:传输层提供两台计算机之间的数据传输,传输层中包含着两个很叼的协议,分别是TCP和UDP协议。面试中经常提及的三次握手,四次挥手就是TCP协议的部分内容

网络层:网络层则是用来处理这些流动的数据包,也就是如果把相应的数据包路由到指定的地点,为通信时的网络传输选择传输路线

数据链路层:数据链路层包含了软件与硬件的接口部分,以及各种网络设备的硬件,也就是整个网络通信过程中最底层的基础设施

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

TCP 是面向连接的,UDP 是面向无无连接的
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
TCP 传输效率低,UDP传输效率高

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

python网络编程练习_第1张图片
第一步是客户端向服务端发送SYN包,
第二步是服务端向客户端发送ACK包,表明确认收到了来自客户端的包,并发送SYN包给客户端
第三步是客户端向服务端发送ACK确认包,表示确认受到了来自服务端的包
经过三次握手之后,确认客户端与服务端之间的链接建立

5. TCP 断开连接的具体过程,其中每一步是为什么那么做?python网络编程练习_第2张图片

第一步是客户端向服务端发送数据包表明断开链接请求,不再发送新的包
第二步是服务端向客户端发送数据包表明不再接收新的数据包,但是还有未发完的包,所以需要等待第三步向客户端发送新的包表明不再发送新的包
第三 步是服务端向客户端发送数据包表明不再发送新的包,并可以断开链接
第四步是客户端向服务端发送数据包表明已经接收到服务端断开链接的信息,并且正式断开链接

6. TCP 的十一种状态?

 1、客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。

2、服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。

3、共有的:(1)CLOSED (2)ESTABLISHED 

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

socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信,我们⽹络上各种各样的服务⼤多都是基于 Socket 来完成通信的。

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

1.服务器先用 socket 函数来建立一个套接字,用这个套接字完成通信的监听。
2.用 bind 函数来绑定一个端口号和 IP 地址。因为本地计算机可能有多个网址和 IP,每一个 IP 和端口有多个端口。需要指定一个 IP 和端口进行监听。
3.服务器调用 listen 函数,使服务器的这个端口和 IP 处于监听状态,等待客户机的连接。
4.客户机用 socket 函数建立一个套接字,设定远程 IP 和端口。
5.客户机调用 connect 函数连接远程计算机指定的端口。
6.服务器用 accept 函数来接受远程计算机的连接,建立起与客户机之间的通信。
7.建立连接以后,客户机用 write 函数向 socket 中写入数据。也可以用 read 函数读取服务器发送来的数据。
8.服务器用 read 函数读取客户机发送来的数据,也可以用 write 函数来发送数据。
9.完成通信以后,用 close 函数关闭 socket 连接。

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

要确保双方都能发送和接收数据包,三次是最少的次数

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

TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,QQ就是用UDP协议传输的,HTTP是用TCP协议传输的。

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

使用进程要消耗更多的资源,线程又被称为轻量级的进程,线程共享一个进程的资源,当链接的数量很大的时候,线程的优点就体现出来了,

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

大规模连接,首先排除多进程实现,大规模连接使用多进程需要大量的内存空间
可考虑采用多线程服务器或这协程实现并发服务器。

协程实现服务器优点:
1.无需线程上下文切换的开销
2.无需原子操作锁定及同步的开销
3.方便切换控制流,简化编程模型
4.高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。

缺点:
1.无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。
2.进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

二.选择题

  1. A
  2. B
    python网络编程练习_第3张图片

3.B
4.C
5.D
python网络编程练习_第4张图片

6.B
7.A
8.C

python网络编程练习_第5张图片
9.E
10.C

python网络编程练习_第6张图片
11.C
12.C

python网络编程练习_第7张图片
13.D
14.B
python网络编程练习_第8张图片

15.C
python网络编程练习_第9张图片

你可能感兴趣的:(python网络编程练习)