Python————网络编程练习

嘻嘻嘻嘻嘻嘻啊 2020-11-13 01:57:51
编程 Python 网络 练习


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

1.简述 OSI 七层协议。

OSI是一个开放性的通信系统互连参考模型。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。

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

应用层:HTTP
传输层:TCP
网络层:IP
链路层:网络

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

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

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

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

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

在这里插入图片描述

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

三次握手
TCP连接是通过三次握手来连接的。

第一次握手

当客户端向服务器发起连接请求时,客户端会发送同步序列标号SYN到服务器,在这里我们设SYN为x,等待服务器确认,这时客户端的状态为SYN_SENT。

第二次握手

当服务器收到客户端发送的SYN后,服务器要做的是确认客户端发送过来的SYN,在这里服务器发送确认包ACK,这里的ACK为x+1,意思是说“我收到了你发送的SYN了”,同时,服务器也会向客户端发送一个SYN包,这里我们设SYN为y。这时服务器的状态为SYN_RECV。
一句话,服务器端发送SYN和ACK两个包。

第三次握手

客户端收到服务器发送的SYN和ACK包后,需向服务器发送确认包ACK,“我也收到你发送的SYN了,我这就给你发个确认过去,然后我们即能合体了”,这里的ACK为y+1,发送完毕后,客户端和服务器的状态为ESTABLISH,即TCP连接成功。

在三次握手中,客户端和服务器端都发送两个包SYN和ACK,只不过服务器端的两个包是一次性发过来的,客户端的两个包是分两次发送的。

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

断开连接请求可以由客户端发出,也可以由服务器端发出,在这里我们称A端向B端请求断开连接。

第一次挥手

A端向B端请求断开连接时会向B端发送一个带有FIN标记的报文段,这里的FIN是Finish的意思。

第二次挥手

B端收到A发送的FIN后,B段现在可能现在还有数据没有传完,所以B端并不会马上向A端发送FIN,而是先发送一个确认序号ACK,意思是说“你发的断开连接请求我收到了,但是我现在还有数据没有发完,请稍等一下呗”。

第三次挥手

当B端的事情忙完了,那么此时B端就可以断开连接了,此时B端向A端发送FIN序号,意思是这次可以断开连接了。

第四次挥手

A端收到B端发送的FIN后,会向B端发送确认ACK,然后经过两个MSL时长后断开连接。

MSL是Maximum Segment Lifetime,最大报文段生存时间,2个MSL是报文段发送和接收的最长时间

6. TCP 的十一种状态?

状态:
服务/客户端:CLOSED(最开始阶段,服务器和客户端均处于关闭状态)
客户:SYN_SENT(发送连接请求),
服务:LISTEN(监听,等待连接),
服务: SYN_RECV(收到请求后,回复),
服务/客户: ESTABLISHED(建立连接),
客户: FIN_WAIT_1(断开等待1),
服务:CLOSE_WAIT(关闭等待,将未传输完的数据传送完毕),
客户端 : FIN_WAIT_2(收到ACK,等待数据传输完毕),
服务: LAST——ACK(发送关闭请求),
客户: TIME_WAIT(回复断开请求),
客户: CLOSING(客户端发生了FIN,但没有收到服务器的ACK,却收到了服务器的FIN。这种情况发生在服务器发送的丢包的时候,因为网络传输有时会有意外)

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

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

  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 连接。
8. 简述基于 udp 协议的套接字通信流程。

通信流程:
udp的通信不需要建立起客户机与服务器之间的连接,因此在程序中没有建立连接的过程。进行通信之前,需要建立网络套接字。
服务器需要绑定一个端口,在这个端口上监听接收到的信息。
客户机需要设置远程 IP 和端口,需要传递的信息需要发送到这个 IP 和端口上。

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

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。
三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。
如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

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

TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。

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

根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:

  1. 速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。
  2. 资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。
  3. 同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。

多线程的优势:

  1. 创建与环境切换开销少
  2. 同步的开销少(进程间同步一般牵涉OS内核)
  3. 数据复制可通过“进程局部内存”

多线程的局限性:

  1. 性能损失
    (1)单处理器、“计算任务繁重”的应用程序不会从多线程中获益
    (2)高精度的锁定策略会带来高同步开销
  2. 健壮性降低
    线程之间接收到的“MMU保护”很少或没有
  3. 缺乏高精度的访问控制
12. 大规模连接上来,并发模型怎么设计?

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

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

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

二. 常见网络编程笔试题目.

  1. A
    在这里插入图片描述
    解析:TCP/IP协议的运输层有TCP和UDP两个协议。

  2. D在这里插入图片描述
    解析:把域名转换成为网络可以识别的ip地址,然后进行实际网络通讯。

  3. B
    在这里插入图片描述
    解析:无连接系统即UDP服务传输,直接抛出字节流即可

  4. C
    在这里插入图片描述
    解析:IP地址采用点分十进制表示

  5. D
    在这里插入图片描述
    解析:OSI将层与层之间交换的数据单位称为服务数据单元SDU。

  6. B
    在这里插入图片描述
    解析:TCP 是单播双向服务

  7. A
    在这里插入图片描述
    解析:TCP协议采用三次握手进行连接

  8. C
    在这里插入图片描述
    解析: 所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号。

  9. E
    在这里插入图片描述解析:争取的TCP握手过程为:SYN,SYN+ACK,ACK

  10. C
    在这里插入图片描述
    解析:OSI七层有上至下为应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

  11. C
    在这里插入图片描述
    解析:ACK应为传输过来的SYN+1即ACK=x+1,SYN不变,Seq为y

  12. D
    在这里插入图片描述
    解析:网络分类如下
    在这里插入图片描述

  13. D
    在这里插入图片描述
    解析:RARP 协议:可将物理地址转换为 IP 地址
    ARP 协议:可将 IP 地址转换为物理地址

  14. C
    在这里插入图片描述
    解析:Netstat: 显示有哪些网络连接正在运作。默认显示 TCP 连接的信息。
    ping:检查网络是否连通,可以很好地帮助我们分析和判定网络故障
    Ipconfig: 显示 IP 地址、子网掩码和缺省网关值。
    Nslookup: 查询 DNS 的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题。

  15. C
    在这里插入图片描述
    解析:主要要素通俗理解: 如何讲,讲什么,什么时候对话

版权声明
本文为[嘻嘻嘻嘻嘻嘻啊]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_41460135/article/details/97122597

  1. 利用Python爬虫获取招聘网站职位信息
  2. Using Python crawler to obtain job information of recruitment website
  3. Several highly rated Python libraries arrow, jsonpath, psutil and tenacity are recommended
  4. Python装饰器
  5. Python实现LDAP认证
  6. Python decorator
  7. Implementing LDAP authentication with Python
  8. Vscode configures Python development environment!
  9. In Python, how dare you say you can't log module? ️
  10. 我收藏的有关Python的电子书和资料
  11. python 中 lambda的一些tips
  12. python中字典的一些tips
  13. python 用生成器生成斐波那契数列
  14. python脚本转pyc踩了个坑。。。
  15. My collection of e-books and materials about Python
  16. Some tips of lambda in Python
  17. Some tips of dictionary in Python
  18. Using Python generator to generate Fibonacci sequence
  19. The conversion of Python script to PyC stepped on a pit...
  20. Python游戏开发,pygame模块,Python实现扫雷小游戏
  21. Python game development, pyGame module, python implementation of minesweeping games
  22. Python实用工具,email模块,Python实现邮件远程控制自己电脑
  23. Python utility, email module, python realizes mail remote control of its own computer
  24. 毫无头绪的自学Python,你可能连门槛都摸不到!【最佳学习路线】
  25. Python读取二进制文件代码方法解析
  26. Python字典的实现原理
  27. Without a clue, you may not even touch the threshold【 Best learning route]
  28. Parsing method of Python reading binary file code
  29. Implementation principle of Python dictionary
  30. You must know the function of pandas to parse JSON data - JSON_ normalize()
  31. Python实用案例,私人定制,Python自动化生成爱豆专属2021日历
  32. Python practical case, private customization, python automatic generation of Adu exclusive 2021 calendar
  33. 《Python实例》震惊了,用Python这么简单实现了聊天系统的脏话,广告检测
  34. "Python instance" was shocked and realized the dirty words and advertisement detection of the chat system in Python
  35. Convolutional neural network processing sequence for Python deep learning
  36. Python data structure and algorithm (1) -- enum type enum
  37. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)
  38. 【Python进阶】你真的明白NumPy中的ndarray吗?
  39. All questions and answers for algorithm posts of super large factories (recommended system / machine learning / deep learning / C + + / spark / Python)
  40. [advanced Python] do you really understand ndarray in numpy?
  41. 【Python进阶】Python进阶专栏栏主自述:不忘初心,砥砺前行
  42. [advanced Python] Python advanced column main readme: never forget the original intention and forge ahead
  43. python垃圾回收和缓存管理
  44. java调用Python程序
  45. java调用Python程序
  46. Python常用函数有哪些?Python基础入门课程
  47. Python garbage collection and cache management
  48. Java calling Python program
  49. Java calling Python program
  50. What functions are commonly used in Python? Introduction to Python Basics
  51. Python basic knowledge
  52. Anaconda5.2 安装 Python 库(MySQLdb)的方法
  53. Python实现对脑电数据情绪分析
  54. Anaconda 5.2 method of installing Python Library (mysqldb)
  55. Python implements emotion analysis of EEG data
  56. Master some advanced usage of Python in 30 seconds, which makes others envy it
  57. python爬取百度图片并对图片做一系列处理
  58. Python crawls Baidu pictures and does a series of processing on them
  59. python链接mysql数据库
  60. Python link MySQL database