python的底层网络交互模块有哪些?

# 答案:
'''
socket, urllib,urllib3 , requests, grab, pycurl
'''

简述OSI七层协议。

# 答案:
'''
应用层:HTTP,FTP,NFS

表示层:Telnet,SNMP

会话层:SMTP,DNS

传输层:TCP,UDP

网络层:IP,ICMP,ARP,

数据链路层:Ethernet,PPP,PDN,SLIP,FDDI

物理层:IEEE 802.1A,IEEE 802.11
'''

什么是C/S和B/S架构?

# 答案:
'''
软件系统体系结构:
C/S体系结构:
指的是客户端/服务端    例如;QQ

B(browser)/S体系结构:
指的是浏览器/服务端      例如12306(网站);购物网站


两者区别:
C/S :优点:交互性好,对服务器压力小,安全 ;缺点:服务器更新时需要同步更新客户端
B/S:优点:不需要更新客户端   缺点:交互性差,安全性低
'''

简述TCP三次握手、四次挥手的流程。

三次握手过程:

'''
1首先客户端向服务端发送一个带有SYN 标志,以及随机生成的序号100(0字节)的报文
2服务端收到报文后返回一个报文(SYN200(0字节),ACk1001(字节+1))给客户端
3客户端再次发送带有ACk标志201(字节+)序号的报文给服务端
至此三次握手过程结束,客户端开始向服务端发送数据。
1客户端向服务端发起请求:我想给你通信,你准备好了么?
2服务端收到请求后回应客户端:I'ok,你准备好了么
3客户端礼貌的再次回一下客户端:准备就绪,咱们开始通信吧!
整个过程跟打电话的过程一模一样:1喂,你在吗2在,我说的你听得到不3恩,听得到(接下来请
开始你的表演)
补充:SYN:请求询问,ACk:回复,回应。
'''

四次挥手过程:

'''
由于TCP连接是可以双向通信的(全双工),因此每个方向都必须单独进行关闭(这句话才是
精辟,后面四个挥手过程都是其具体实现的语言描述)
四次挥手过程,客户端和服务端都可以先开始断开连接
1客户端发送带有fin标识的报文给服务端,请求通信关闭
2服务端收到信息后,回复ACK答应关闭客户端通信(连接)请求
3服务端发送带有fin标识的报文给客户端,也请求关闭通信
4客户端回应ack给服务端,答应关闭服务端的通信(连接)请求
'''

什么是arp协议?

# 答案:
'''
ARP协议,全称“Address Resolution Protocol”,中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应主机的物理地址(MAC地址)。
'''

TCP和UDP的区别?为何基于tcp协议的通信比基于udp协议的通信更可靠?

# 答案:
# TCP和UDP的区别?
'''
	1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
	2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
	3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
	4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
	5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
	6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
'''

# 为何基于tcp协议的通信比基于udp协议的通信更可靠?
'''
tcp:可靠 对方给了确认收到信息,才发下一个,如果没收到确认信息就重发
udp:不可靠 一直发数据,不需要对方回应
'''

什么是局域网和广域网?

# 答案:
'''
两者范围不一样:
	局域网就是在固定的一个地理区域内由2台以上的电脑用网线和其他网络设备搭建而成的一个封闭的计算机组,范围在几千米以内;
	广域网是一种地域跨度非常大的网络集合,范围在几十公里到几千公里。

两者的IP地址设置不一样:
	局域网里面,必须在网络上有一个唯一的IP地址,这个IP地址是唯一的,在另外一个局域网,这个IP地址仍然能够使用。
	广域网上的每一台电脑(或其他网络设备)都有一个或多个广域网IP地址,而且不能重复。
'''

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

# 答案:
'''
	Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部。

服务端:
	创建socket对象,绑定ip端口bind(),  设置最大链接数listen(),  accept()与客户端的connect()创建双向管道, send(), recv(),close()

客户端:
	创建socket对象,connect()与服务端accept()创建双向管道, send(),recv(),close()
'''

什么是粘包? socket中造成粘包的原因是什么? 哪些情况会发生粘包现象?

# 答案:
'''
粘包:
	数据粘在一起,主要因为:接收方不知道消息之间的界限,不知道一次性提取多少字节的数据造成的数据量比较小,时间间隔比较短,就合并成了一个包,这是底层的一个优化算法(Nagle算法)
'''

IO多路复用的作用?

# 答案:
'''
	I/O多路复用是用于提升效率,单个进程可以同时监听多个网络连接IO。

举例:
	通过一种机制,可以监视多个文件描述符,一旦描述符就绪(读就绪和写就绪),能通知程序进行相应的读写操作,I/O多路复用避免阻塞在io上,原本为多进程或多线程来接收多个连接的消息变为单进程或单线程保存多个socket的状态后轮询处理。
'''