1,套接字:一种基于文件的套接字,AF_UNIX,(早期socket源自于Unix系统而研发的一个主要功能,主要是为了同一台电脑,多个程序直接通信)
Unix系统中心思想:一切皆文件
2,一种基于网络类型的套接字,AF_INET
3,TYPE:
tcp协议:SOCK_STREAM
UDP协议:SOCK_DGRAM
4,tcp:可靠的,面向连接的,面向字节流的传输方式
5,udp: 不可靠的,不需面向连接的,面向数据报的传输方式,但很快
6,网关:类似于一个局域网的出口和入口 7,网段:一个局域网内的ip地址范围 8,子网掩码:子网掩码 & ip地址 等到网段 9,osi五层模型: 应用层 :http,https,ftp 传输层 :tcp/udp 四层交换机,四层路由器 网络层 :ip协议 路由器 三层交换机 网络链路层 :arp协议 以太网交换机 网卡 网桥 物理层 :传输电信号 集线器 网线 光纤
a. 同一台电脑上连个py程序:打开一个文件 b, 两个电脑如何通信:连接一根网线 c, 多台电脑通信: ex: 电脑1(源)找电脑2(目标) 电脑1首先发送一个请求帧(其中包括我的ip地址,mac地址,要找的目标的ip地址), 交换机广播这条信息给其他主机 目标主机接收到消息,对比发现自己就是被找的目标,回复交换机,将自己的ip地址,mac地址 ,返回给ip地址为xxxxxx的主机 交换机单波形式返回给主机 知识点: 1. mac地址:是一个物理地址,全球唯一,类似身份证 2,ip地址:是一个四位点分十进制,它标识了计算机在网络的位置 3,arp协议: 通过目标的ip地址获取目标的mac地址的一个协议 4,端口:操作系统为主机上的每一个应用程序都随机分配了一个端口
TCP协议编程流程: 服务器端 客户端 实例化对象 实例化对象 绑定IP地址和端口 监听 接收客户端的连接 连接服务器 收发 收发 关闭 关闭 交换机与路由器的区别? 交换机的主要功能是组织局域网,经过交换机内部处理解析之后,将信息点对点,点对多的形式,发送给固定端 路由器的主要功能:进行跨网段进行数据传输,路由器选择最佳路径 EX: 如果你须将多台电脑连接到一根网线,用交换机即可 如果你只有一个外网IP,但是你有好多台电脑需要上网,用路由器即可
# 案例1 通信import socketimport timesk = socket.socket() # 买了一个手机sk.bind(('192.168.1.107',18080)) # 买了一张手机卡sk.listen() # 开机sock,addr = sk.accept() # 等待朋友连接msg_recv = sock.recv(1024) # 接收朋友传来的bytes信息sock.send(b'library')print(msg_recv.decode('utf-8')) # 进行解码time.sleep(20)sock.close() # 关闭电话sk.close() # 关机
import socketclass MySocket(socket.socket): # 继承socket文件中的socket类 def __init__(self,encoding='utf-8'): # 给它一个默认的utf-8编码格式 self.encoding = encoding # 将utf-8编码格式封装给encoding super(MySocket, self).__init__(type=socket.SOCK_DGRAM) # 执行父类中的__init__方法,将默认tcp协议改成udp协议 def my_sendto(self,msg,addr): # 定义一个发消息类 return self.sendto(msg.encode(self.encoding),addr) # 调用父类中的sendto方法 def my_recvfrom(self,num): # 定义一个接收方法 msg_r,addr = self.recvfrom(num) # 调用父类中的recvfrom方法 return msg_r.decode(self.encoding),addr