笔记

python2和python3的区别

python2:str/bytes是一类,都是以字节的形式存储,unicode又是单独一类,用unicode的形式存储;默认编码是ascii码,需要在文件开头写: #-*- encoding:utf-8 -*-;有新式类和经典类存在

python3:str和bytes区分开来了,str用unicode存储,bytes用字节存储;全是新式类

作用域的坑

f = [lambda x  :x + i for i in range(10)]
"""转换成函数"""
def func(x):
    for i in range(10):
        pass
    return x + i        # i = 9(作用域的问题)
ret = func(5)
print(ret)
# 输出结果:
14

网络知识

两个计算机之间的连接

一根网线搞定,电脑有网卡,网卡有mac地址

DHCP

到某个地方插上网线,路由器或交换机中的DHCP服务就会为计算机自动分配IP地址

IPv4:4段8位表示,共32位,用10进制表示,每段范围是0~255,表示每个局域网中计算机的理论上限为256台

IPv6:IPv4的扩充,6段8位,共128位,16进制表示

子网掩码

默认值:255.255.255.0

一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。
作用:就是将某个IP地址划分成网络地址和主机地址两部分(挡住的IP作为网段,为挡住的部分作为可变的值)用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。

网关

路由器中连接交换机的口,一般以局域网中的第一个地址表示,即:xxx.xxx.xxx.1

arp协议

地址解析协议:根据IP地址获取mac地址的一个TCP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

作用:网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。

工作过程

主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程
  1. 根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
  2. 如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
  3. 主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
  4. 主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
  5. 当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机发送IP通信了。

 线程

import time
import threading


def task(n):
    print('开始执行任务:',n)
    time.sleep(10)
    print('...')
    print('任务%s 执行完毕:'%n)

while True:
    name = input("请输入任务:")
    t = threading.Thread(target=task,args=(name,))
    t.start()

线程和socket的配合

import time
import socket
import threading

def task(conn):
    time.sleep(20)
    data = conn.recv(1024)
    print(data)
    conn.close()


server = socket.socket()
server.bind(('192.168.13.84',8001,))
server.listen(5)

while True:
    conn,addr = server.accept()
    t = threading.Thread(target=task,args=(conn,))
    t.start()
原文地址:https://www.cnblogs.com/--kai/p/9600417.html