Python面试题——Part Ⅱ 网络编程和并发(34题)持续更新

1.简述 OSI 七层协议。
 
OSI七层模型的划分
应用层(Application)、表示层(presentation)、会话层(session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
每一层实现各自的功能和协议,并完成与相邻接口通信,OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。
这里写图片描述
各层含义:
 
应用层
OSI 参考模型中最靠近用户的一层,是为计算用户提供应用接口,也为用户直接提供网络服务。常见的应用层网络服务协议有:HTTP,HTTPS,FTP,POP3,SMTP等
表示层
表示提供各种用于应用层数据编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
 
会话层
会话层负载建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。

传输层
传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,是高层用户看到的只是在两个传输实体建的一个主机到主机的、可由用户控制和设定、可靠的数据通路。通常说的TCP UDP就是在这层。端口号即是这里的“端”。

网络层
本层通过IP寻址来建立两点之间的连接,为源端的运输层来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的ip层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。

数据链路层
将比特组合成字节,再将字节组成帧,使用链路层地址(以太网mac地址)来访问介质,并进行差错检测。
数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。

物理层
实际最终信号传输是通过物理层实现的。通过物理介质传输比特流。规定电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。


2.什么是C/S和B/S架构?
Client/Server Vs Browser/Server
 
3.简述 三次握手、四次挥手的流程。
这里写图片描述
TCP三次握手的过程如下:

  • 客户端发送SYN(seq=x)报文给服务器端,进入SYN_SEND状态;
  • 服务端收到SYN报文,回应一个SYN(seq=y) ACK(ack=x+1)报文,进入SYN_RECV状态;
  • 客户端收到服务端的SYN报文,客户端进入ESTABLISHED状态;然后回应一个ACK(ACK=y+1)报文,服务器端进入ESTABLISHED状态;
     

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
 
4.什么是arp协议?
 
要了解ARP的作用,首先要分清两个“地址”:
  (1)TCP/IP的32bit IP地址。仅知道主机的IP地址不能让内核发送数据帧给主机。
  (2)网络接口的硬件地址,它是一个48bit的值,用来标识不同的以太网或令牌环网络接口。在硬件层次上,进行数据交换必须有正确的接口地址,内核必须知道目的端的硬件地址才能发送数据。
  简言之,就是在以太网中,一台主机要把数据帧发送到同一局域网上的另一台主机时,设备驱动程序必须知道以太网地址才能发送数据。而我们只知道IP地址,这时就需要采用ARP协议将IP地址映射为以太网地址。详解请看这篇博客
 
5.TCP和UDP的区别?
 
    TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
    UDP—用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快
    TCP是面向连接的,有比较高的可靠性, 一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。
 
6.什么是局域网和广域网?
 略…
 
7.为何基于tcp协议的通信比基于udp协议的通信更可靠?
 
tcp:可靠 对方给了确认收到信息,才发下一个,如果没收到确认信息就重发;
udp:不可靠 一直发数据,不需要对方回应。
 
8.什么是socket?简述基于tcp协议的套接字通信流程。
 
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。
 
服务端先初始化Socket实例化一个类拿到对象(才能调用下面的接口),然后绑定IP端口(bind),监听(listen)就是说客户端可以来连我了,调用accept接收链接;这时客户端初始化一个socket,然后connect与服务端建立好双向链接与accept对应。客户端发送请求数据,服务端处理请求并给客户端回应数据,这样一个通信循环;最后关闭套接字,一次交互结束。
 
9.什么是粘包? socket 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
 
接收方收到的数据是多个数据包黏在一起的内容的现象就叫粘包;
原因:

  • TCP是流式传输,无消息边界,接收方不知道每个报文的长度;
  • TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一个TCP段。若连续几次需要send的数据都很少,通常TCP会根据优化算法把这些数据合成一个TCP段后一次发送出去,这样接收方就收到了粘包数据。
     

10.IO多路复用的作用?

猜你喜欢

转载自blog.csdn.net/u010525694/article/details/81328479
今日推荐