zoukankan      html  css  js  c++  java
  • 网络编程 -- 基础概念

    网络编程

    基于同一台机器上的多个程序之间通信,可以基于文件

    基于多台机器上的多个程序之间通信,可以基于网络

    我们平时使用的网络(web程序)是由两种架构完成的

    C/S 架构:client 客户端  server 服务端

    B/S 架构:browser 浏览器  server 服务端

    C/S架构特点

    所有的都需要安装一下 

    windows系统中为 .exe 文件 是一个客户端

    例如 QQ 百度网盘 爱奇艺

    一个S端对应多个C端

    安装一个客户端,然后这个客户端就可以和服务端进行网络交互

    B/S架构特点

    所有能用网页访问的网站,这个网站就是B/S架构的

    例如 京东 4399  这种能用到浏览器直接访问的

    如果一个网站可以被网页访问,这个网站就是B/S架构

    B/S架构和C/S架构的关系

    所有的B/S架构都需要一个浏览器才能访问

    浏览器是一个软件,相当于一个客户端

    所有的B/S架构也都是C/S架构的

    浏览器(browser)也是特殊的客户端(client)

    这两种架构哪一种好

    C/S架构 装好之后直接双击就可以使用了   更灵活 可以右键点击

    B/S架构 极大的简化了我们使用软件的成本   更符合现在的使用理念,但还有很多功能没有实现

    B/S架构 在PC端统一了程序的入口  在手机端没那么适合使用浏览器,更喜欢统一入口的软件

    网卡

    是独一无二不重复的

    mac地址

    网卡上有一个内容 就是mac地址

    唯一的标识了一台机器

    mac地址 传输的内容 接收人的mac地址

    是十二位的十六进制数

    多台机器之间的通信

    交换机给所有的机器都发送一条信息(带着这台机器的ip地址)

    如果机器的ip和交换机发送信息的ip不同,就丢弃这条信息

    ip和发送的信息相同,返回自己的mac地址

    交换机不认识ip地址

    假设 ip地址位 192.168.16.3

    先把ip地址转为二进制

    交换机先读32位 找到是谁发给我的ip

          又读32位,找到了是发给我的

    地址解析协议(arp协议)

    由交换机完成的

    通过ip地址找到一台机器的mac地址

    使用到了交换机的广播(指向所有机器)和单播(指向一个机器)的功能(还有一个组播功能,但arp协议里没有用到)

    ipv4协议 32位的二进制组成4位点分十进制

    0.0.0.0 -- 255.255.255.255

    ipv6协议 由6位冒分16进制组成的

    0:0:0:0:0:0 -- FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF

    所有的机器连在一个交换机上 交换机通过广播找一台机器 很麻烦

    可以分区域

    路由器

    是用来连接交换机的

    路由器的接口叫网关 有的网站会封ip地址,其实封的是网关

    局域网

    连在同一个交换机上的机器叫做局域网内的机器 

    局域网之间的通信由路由器完成

    路由器提供给局域网一个统一的网关ip 通过网关ip访问其他网络

    如果局域网太多,一个路由器连接不下,路由器还可以连接路由器

    有ip为什么还要mac

    mac地址是这台机器的唯一标识

    端口

    ip地址+mac地址确定机器

    端口确定这台机器上的具体应用

    端口共有65535个  0-65535

    常用8000之后的端口

    子网掩码

    把ip地址和子网掩码分别转成二进制

    然后 分别按位置对比

    1&1 = 1   1&0 ,0&0 ,0&1 = 0

    最后转回二进制,如果相同,两个ip地址就是同一网段

    ip的保留字段

    ipv4的地址是有限的

    0.0.0.0 - 255.255.255.255

    想用哪个ip,需要申请,只能用国内分到的ip地址,用国外的是无效的

    这些网段是没有分配的,是完全不对外提供服务的网址

    10.0.0.0 - 10.255.255.255

    172.16.0.0 - 172.31.255.255

    192.168.0.0 - 192.168.255.255

    这些字段是有可能在各个公司的内网被重复使用的,而不会对外真正提供服务的

    127.0.0.1 本地的回环地址 

    总是找当前自己的机器,不通过交换机

    别的人找不到你 只有自己这台机器能找到你自己

    0.0.0.0  全网段地址

    打到这台机器上的服务,都认为是可以接收进来的

    socket模块

    套接字

    所有的网络通信的底层都是基于socket做的

    通信分为server文件和client文件

    server文件

    import socket
    sk = socket.socket()#创建一个socket对象
    sk.bind(('127.0.0.1',9123))#绑定一个服务端的地址,bind里面的是元组,元组里最后一项需要满足是int类型,8000之后,65535之前
    sk.listen()#开始接受客户端给我的连接
    conn,addr = sk.accept()#阻塞,直到有人连我,conn代表我和他之间的连接,addr代表他的IP地址
    conn.send(b'hello')#给他发消息,必须是bytes类型
    msg = conn.recv(1024)#从他处接受信息,里面写1024代表接受1024字节个消息,不足1024个全部接收,超过只接收1024个字节
    print(msg.decode('utf-8'))#打印消息
    conn.close()#'挂电话'
    sk.close()#'关机'

    client文件

    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',9123))
    msg = sk.recv(1024)#server是先发再收,所以client是先收再发
    print(msg)
    sk.send(b'wahaha')
    sk.close()
  • 相关阅读:
    js加密
    sharepoint更新左侧列表的名字
    HTML转换JS
    Html空格字符代码:
    docker 与host互传文件
    Ubuntu里node命令出错,找不到
    docker查看运行容器详细信息
    docker保存容器的修改
    Docker容器中安装新的程序
    运行docker容器镜像
  • 原文地址:https://www.cnblogs.com/biulo/p/10673569.html
Copyright © 2011-2022 走看看