说明
1. 在浏览器中输入一个网址时,需要将它先解析出ip地址来
2. 当得到ip地址之后,浏览器以tcp的方式3次握手链接服务器
3. 以tcp的方式发送http协议的请求数据给服务器
4. 服务器tcp的方式回应http协议的应答数据给浏览器
总结
1. MAC地址:在设备与设备之间数据通信时用来标记收发双方(网卡的序列号)
2. IP地址:在逻辑上标记一台电脑,用来指引数据包的收发方向(相当于电脑的序列号)
3. 网络掩码:用来区分ip地址的网络号和主机号
4. 默认网关:当需要发送的数据包的目的ip不在本网段内时,就会发送给默认的一台电脑,成为网关
5. 集线器:已过时,用来连接多态电脑,缺点:每次收发数据都进行广播,网络会变的拥堵
6. 交换机:集线器的升级版,有学习功能知道需要发送给哪台设备,根据需要进行单播、广播
7. 路由器:连接多个不同的网段,让他们之间可以进行收发数据,每次收到数据后,ip不变,但是MAC地址会变化
8. DNS:用来解析出IP(类似电话簿)
9. http服务器:提供浏览器能够访问到的数据
网络传输模型
网际层也称为:网络层
网络接口层也称为:链路层
另外一套标准
反射,四个方法,hasattr,getattr,setattr,delattr,一切皆对象
http://www.cnblogs.com/linhaifeng/articles/6204014.html
__setattr__, __delattr__, __getattr__
实例化后增加,修改,获取属性时会触发 class 中的这些属性,具体可以看
http://www.cnblogs.com/linhaifeng/articles/6204014.html
class Earth:
start = 0
def __init__(self, name):
self.name = name
def __getattr__(self, item):
print('this is getattr')
e = Earth('bbs')
print(e.name)
e.x #获取一个不存在的属性,触发__getattr__
输出结果:
bbs
this is getattr
获取类的属性
class Earth:
start = 0
def __init__(self, name):
self.name = name
def __getattr__(self, item):
print('this is getattr')
print(Earth.__dict__) #获取的属性不完整
print(dir(Earth)) #获取所有的属性
输出结果:
{'__module__': '__main__', 'start': 0, '__init__': <function Earth.__init__ at 0x000001AE1FC64620>, '__getattr__': <function Earth.__getattr__ at 0x000001AE1FC646A8>, '__dict__': <attribute '__dict__' of 'Earth' objects>, '__weakref__': <attribute '__weakref__' of 'Earth' objects>, '__doc__': None}
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'start']
包装标准类型
class List(list): #继承并修改 list 方法
def show_list(self):
for i in self:
print(i, end='')
print('')
def append(self, object):
print('append the', object)
if type(object) == str:
super(List, self).append(object) #调用父类
else:
print('only append str')
l = List('www.baidu.com')
l.show_list()
l.append(123)
l.append('www.google.com')
print(l)
输出结果:
www.baidu.com
append the 123
only append str
append the www.google.com
['w', 'w', 'w', '.', 'b', 'a', 'i', 'd', 'u', '.', 'c', 'o', 'm', 'www.google.com']
授权,也就是在 class 中调用类似于父类的方法和属性,但不继承于父类
import time
class open_file():
def __init__(self, filename, mode='r', encoding='utf-8'):
self.file = open(filename, mode, encoding=encoding) #直接调用 open 方法
self.mode = mode
self.encoding = encoding
def write(self, item):
print(item)
t = time.strftime('%Y-%m-%d %X')
self.file.write('%s %s' %(t, item)) #用实例的文件类 self.file 操作
def read(self):
print(self.file.read()[0:20]) #截出时间戳
def __getattr__(self, item):
print(item)
return getattr(self.file, item) #返回属性调用
f = open_file('a.txt', 'w+', 'utf-8')
f.write('ni hao ma')
f.seek(0)
f.read()
输出结果:
ni hao ma
seek
2018-04-17 00:18:06