码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程基础

时间:2019-01-21 19:16:03      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:icm   判断网络   类方法   oca   目标地址   发展   ip地址   相互   bubuko   

# 类:抽象的
# 对象、实例:具体的
# 实例化:类变成对象的过程
# 方法:对象的工作/类的函数
#
# 组合:就是为了解耦,让程序的各个角色之间相互独立,再增加两个独立的角色之间的关联性

class User:

    def __init__(self, name):
        self.name = name  # 每一个用户都有自己名字,所以要放在这里
        self.order_list = []

class Order:

    def __init__(self, o_id):
        self.o_id = o_id
        self.goods_list = []

class Goods:

    def __init__(self, name, price):
        self.name = name
        self.price = price

apple = Goods("苹果", 5)
banana = Goods("香蕉", 3)
o1 = Order(1)
o1.goods_list.append(apple)
o1.goods_list.append(banana)
print(o1.goods_list)  # o1 和 [apple, banana] 组合在一起


class Order:

    def __init__(self, o_id):
        self.o_id = o_id
        self.goods_list = []

o1 = Order(1)
o1.goods_list.append(["苹果", 5])
o1.goods_list.append(["香蕉", 3])
# 如果还有一个对象 o2
o2 = Order(2)
o2.goods_list.append(["苹果", 5])

# 如果苹果降价了,变为4元,那么o1、o2都得一个一个变
# 而在上面的程序中只需改变 apple.price 的值即可
# 所以组合就是让程序的各个角色之间相互独立,再增加两个独立的角色之间的关联性

print(o1.goods_list)  # [[‘苹果‘, 5], [‘香蕉‘, 3]]

 

# 类的三大特性
#   继承:减少代码重复
#       单继承:
#           子类可以继承父类的所有(非私有)的属性和方法
#       多继承:
#           经典类 深度优先,没有mro顺序,也没有super关键字
#           新式类 mro顺序-super /c3算法
#   多态:python中处处是多态

# 继承与鸭子类型的区别
# __len__
# len(str) len(list)...

class Base:

    def __len__(self):
        pass

class Str(Base):

    def __init__(self, s):
        self.s = s

    def __len__(self):
        return len(self)


class List(Base):

    def __init__(self, l):
        self.l = l

    def __len__(self):
        return len(self)

# 只要有 len() 的数据类型,都是要继承一个含有 __len__ 的基类

# 而下面的就是鸭子类型
class Str:

    def __init__(self, s):
        self.s = s

    def __len__(self):
        return len(self.s)

class List:

    def __init__(self, l):
        self.l = l

    def __len__(self):
        return len(self.l)


#   封装
#       私有的:__名字
#       私有对象属性、方法,私有的静态属性,私有的类方法,私有的静态方法

# @classmethod
# @staticmethod
# @property 把方法伪装成属性

# 反射——从一个命名空间中,通过字符串的方式来操作这个空间中的变量
#   hasattr
#   setattr

 

网络编程

网络基础
      概念
      初始 socket

基于不同的协议完成的网络通信
  第一个协议:tcp协议
  tcp协议在网络通信中的特点
解决tcp协议中的一个问题
  第二个协议:udp协议

解决并发server的问题

更关注概念,而不是代码

网络编程基础
a.py 与 b.py 互相通信 基于文件的通信
import a --> b中引用a文件

A机器上的a.py与B机器上的b.py之间的通信 基于网络通信

 

网络开发的两大架构
C/S架构(与客户端相关,应用类) 基于用户层面或物理层面 clint-客户端 qq、微信、百度云、网易云音乐、腾讯视频、游戏客户端 server-服务端 不同的客服端找到不同的对应服务器 B/S结构(与浏览器相关,web类) 基于用户层面 browser-浏览器 server-服务端 地址不同,找到不同的对应服务器 1. B/S C/S架构之间的关系 B/S架构也是C/S架构,特指B/S中的B是浏览器,浏览器作为客户端的程序都是B/S架构 2. B/S架构好,还是C/S架构好? 对于用户来说,是B/S架构好,因为不用下载这么多,占内存 但是为什么还要客户端,比如qq聊天的数据如果只是保存在浏览器中,存不了多少内容,而有客户端的话就可以把数据保存在用户电脑中,减少服务端的负担 pc端-个人电脑:浏览器是未来的发展趋势 手机端:小程序是未来的发展趋势 以上两个就叫统一入口

 

广播
主机之间"一对所有"的通讯模式 网络对其中每一台主机发出的信号都进行无条件复制并转发 所有主机都可以接收到所有信息(不管是否需要) 有线电视网就是典型的广播型网络 电视机实际接收到了所有频道的信号,但只将一个频道的信号还原成画面 数据网络中也允许广播的存在,但限制在二层交换机的局域网范围内 禁止广播数据穿过路由器,防止广播数据影响大面积的主机

 

ip地址与ip协议

规定网络地址的协议叫ip协议,它定义的地址为ip地址
广泛采用的v4版本即ipv4,规定网络地址由32位2进制表示
范围:0.0.0.0 - 255.255.255.255
一个ip地址通常写成四段十进制数,如:172.16.10.1

 

mac地址

head中包含的源和目标地址由来:
规定接入internet的设备都必须具备网卡
发送端和接收端的地址即是网卡的地址,即mac地址
具体来说,每块网卡都有一个唯一的mac地址,长度为48位2进制
通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号)

 

arp协议——查询IP地址和MAC地址的对应关系

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

地址解析协议是建立在网络中各个主机相互信任的基础上的
网络上的主机可以自主发送ARP应答消息
其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存
正因为这样,黑客可以向某一主机发送伪ARP应答报文
使其发送的信息无法到达预期的主机或到达错误的主机,构成一个ARP欺骗
ARP命令用于查询本机ARP缓存中IP地址和MAC地址的对应关系
添加或者删除静态的对应关系

 

路由器

Router——是连接因特网中各局域网、广域网的设备
它会根据信道的情况自动选择和设定路由,以最佳的路径,按前后顺序发送信号

路由器和交换机之间的主要区别:
在此之前,得先知道互联网协议与OSI模型
插入图片
这里相当于盖楼,第一层是物理层,第五层是应用层
上面五层由其中一台发出,另一台接收
交换机发生在OSI参考模型第二层,即数据链路层,而路由发生在第三层,即网络层
这一区别决定了路由和交换机在移动信息的过程中使用不同的控制信息
因此两者实现各自功能的方式不同

路由器又称网关设备(Gateway),是用于连接多个逻辑上分开的网络
所谓逻辑网络是代表一个单独的网络或一个子网
当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成
因此,路由器具有判断网络地址和选择IP路径的功能
它能在多网络互联环境中,建立灵活的连接
可使用完全不同的数据分组和介质访问方法连接各种子网
路由器只接收源站或其他路由器的信息,属网络层的一种互联设备

 

局域网

Local Area Network, 即LAN
是指在某一区域内由多台计算机互联成的计算机组,一般是方圆几千米以内
局域网可以实现文件管理、应用软件共享、打印和共享、工作组内的日程安排,电子邮件和传真通信服务等功能
局域网是封闭型的,可以由办公室内的两台计算机组成,也可以是一个公司内的上千台计算机组成

 

子网掩码

它是表示子网络特征的一个参数,形式上等同于IP地址,也是一个32位二进制数字
它的网络部分全部位1,主机部分全部为0
比如一个IP地址:172.16.10.1
如果已知网络部分是前24位,主机部分是后8位,则它的子网络掩码为:
11111111.11111111.11111111.00000000
写成十进制就是255.255.255.0

如果知道了子网掩码,就能判断任意两个IP地址是否处在同一个子网络
方法是将两个IP地址与子网掩码分别进行AND运算
两个数位都为1,运行结果为1,否则为0
然后比较结果是否相同,如果是,则表明它们在同一个子网络中,否则就不是
也就是说,两个IP地址要与子网掩码相结合才能判断是否在一个局域网内

举例说明:
已知两个IP地址,分别为
172.16.10.1
172.16.10.2
它们的子网掩码都是:255.255.255.0

首先看:172.16.10.1
换成二进制为:         10101100.00010000.00001010.00000001
同理,子网掩码换成二进制:11111111.11111111.11111111.00000000
每个数字上下一一对应,两个都为1,结果为1,否则为0
最后结果:10101100.00010000.00001010.00000000

同理推出下面那个,发现结果一样,因此是在一个局域网(子网)内

总结:IP协议的作用主要有两个:
  1. 为每一台计算机分配IP地址
  2. 确定哪些地址在同一个子网络

 

tcp协议和udp协议

用于应用程序之间的通信。
如果IP地址和MAC地址可以确定唯一的一台机器,那么怎么找到机器上的一个软件?

端口

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务等
这些服务都是通过IP地址来实现,但是主机不能只靠IP地址来区分不同的网络服务
这是因为IP地址与网络服务的关系是一对多的关系。
实际上是主机是通过"IP地址+端口号"来区分不同的服务的

ip地址精确到具体的一台电脑,而端口精确到具体的程序

tcp协议

当应用程序希望通过tcp与另一个应用程序通信时,会发送一个通信请求
这个请求必须被送到一个确切的地方。然后TCP在两者之间建一个full-duplex(全双工)通信
这个全双工的通信将占用两个计算机之间的通信线路,直到被一方或双方关闭

udp协议

当应用程序希望通过udp与另一个应用程序通信时,传输数据之前源端与终端不建立连接
当它想传送时就简单去抓取来自应用程序的数据,并尽可能把它扔到网络上

tcp与udp的对比

tcp——传输控制协议,提供的是面向连接,可靠的字节流服务。
当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去
但是并不能保证它们能到达目的地。
由于UDP在传输数据报前不用在客户和服务器之间建立一个连接
且没有超时重发等机制,故而传输速度很快

 

互联网协议与osi模型
互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

技术分享图片

 

 

每层运行常见物理设备

 

技术分享图片

 

 

每层运行常见的协议

 

 技术分享图片

 

 

内网和外网
内网——就是出了某个区域就不能用了
  192.168.10.12
外网——排除防火墙的因素,在哪里都可以访问的就是外网

交换机不认识ip地址,但是认识每台电脑的mac地址
这时要广播...
交换机通过ip地址找到mac地址的过程是交换机完成的,广播是为了找到对应的机器
而单薄是为了将mac地址返回给发起请求的机器
这就是arp协议

内网(局域网)之间的通信是依靠交换机
两台机器之间通信,那么两台机器应该相互知道对方的ip + mac
如果只知道ip, 不知道mac,那么就通过arp协议获取
  arp协议 通过ip找mac
  交换机的第一次工作:机器A告诉交换机要知道机器B的mac地址
                   交换机拿到请求会发出广播,通知整个局域网内所有的机器
                   所有的机器都会接收到请求,但只有机器B会回复,告诉交换机,机器B的mac地址
  交换机的第二次工作:交换机会通过单播,将机器B的mac地址返回给机器A

如果两台机器不在一个局域网中,怎么通信
两台机器都有一个对应的交换机,这时就要通过路由器
首先,机器A找到对应交换机,然后交换机找到路由器,路由器中有一张路由表,
路由器,能够完成局域网与局域网之间的通信
这里所谓的交换机就是以前说的猫,现在只需一个路由器就能上网,其实是路由器里面有交换机

 

网络编程基础

标签:icm   判断网络   类方法   oca   目标地址   发展   ip地址   相互   bubuko   

原文地址:https://www.cnblogs.com/shawnhuang/p/10300126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!