• 9.5(day31)网络编程,socket套接字编程


    网络编程

    架构

    架构
    单机软件:只有c
    C/S架构:c表示client,客户端,s表示server,服务端
    B/S:b表示browser,浏览器服务端,s,server,服务端
    B/S本质也是C/S,只不过客户端换成了浏览器
    
    学习网络编程为了写CS架构软件
    C端---网络---S端
    S端:有固定的ip,稳定,支持并发,
    
    

    网络协议

    网络:网络连接介质+网络协议(osi七层协议)
    七层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
    五层:应用层,传输层,网络层,数据链路层,物理层
    四层:应用层,传输层,网络层,网络接口层
    '''
    '''
    网络协议:今天学的为五层(应传网数物),所有网络传输必须遵循
    物理层:一堆电信号,二进制(0101110101),携带数据
    数据链路层:
        遵循Ethernet,以太网协议,对物理层的电信号进行分组,
            一组电信号叫做一个数据报或者数据帧,每组数据分两部分,报头(发送者地址,
            6个字节,接受者地址:6个字节,数据类型,6个字节,报头固定18字节),数据部分
            (data,最少46字节,最多1500字节)
        mac地址;发送者接受者的地址就是mac地址,每个网卡都会有唯一mac地址,mac地址(
            前六位厂商编号,后六位流水线号)
        广播:同一个局域网内通信,所有人都能收到,会出现广播风暴
    网络层:
        ip:ipv4通过32位2进制数表示,点分十进制,从0.0.0.0到255.255.255.255
            范围是有限的,不能表示所有网络设备,所以出现了ipv6,ip地址分为两部分,
            子网掩码:通过子网掩码和ip判断两个ip是否处在同一个网段,通过ip地址,子网掩码,做
             ip地址:  172.16.10.1:      10101100.00010000.00001010.000000001
            子网掩码:255.255.255.0:     11111111.11111111.11111111.000000000
            按位与运算:172.16.10.0      10101100.00010000.00001010.000000000
            172.16.10.10/24  包含了ip地址和子网掩码
            按位与运算(将ip地址,子网掩码用二进制表示,上下两个都为1为1,其余都为0)
            ip与mac有转换关系:ARP协议,通过广播发送数据包,获取目标mac地址,同一个网络下
            带着源mac,目标mac(未知),源ip,目标ip,数据,局域网内每个人都发一次
            mac地址学习:mac地址和ip地址的映射表,在第一次接受到就会在表中添加一条数据(相
            当于字典,一个mac地址对应一个ip地址)
            任何一种协议都有头和数据部分
    传输层:
        tcp协议(好人协议):tcp连接是可靠的,三次握手(建立双向通路),四次挥手(断开双向通路)
        双向通路:C端给S端发送数据,S端也给C端发送数据
        tcp可靠原因:因为传输过程中CS必须回执,确保收到消息
        服务端如果大量看到syn_rcvd的状态,可能遭受攻击了
        dos攻击和ddos攻击:拒绝服务攻击,分布式拒绝服务攻击
        端口号:0-65535,系统占用端口:0-1023
        通过ip+子网掩码唯一确定一台设备
        通过ip+子网掩码+端口号唯一确定一个软件
        半连接池:建立双向通路的请求放到半连接池中,队列,先进先出,通过软件(连接池大小不是控制
        的链接数,而是链接在中间状态的连接数)
        控制,有内存来放,所以dos攻击无法防范,
        (udp):不可靠传输,不需要相应
    socket(抽象层,在应用层与其他层之间,抽象tcp,ip写成简单的接口)
        在python中通过socket写一个CS架构的软件
    应用层:
        根据应用程序
        http协议
        ftp协议
        邮件协议
    
    

    上网流程分析

    上网流程分析:
        浏览器输入地址,
        会去DNS服务器,通过域名解析成ip地址加端口号
        向ip+端口号这个地址发送请求,底层基于socket
    

    三次握手

    四次挥手

    socket

    # 简单通信客户端
    import socket
    # 先导入模块
    
    # 想想买手机打电话,SOCK_STREAM.tcp链接,udp链接用SOCK_DGRAM
    soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 相同机器通讯:AF_UNIX   不同机器通讯:AF_INET
    # 插卡,传ip地址,端口号
    soc.bind(('192.168.11.209',8080))
    # 如果写本机ip,外部可以访问,127.0.0.1只能自己访问
    # 开机,监听
    soc.listen(5)   # 5是半连接池大小
    conn,addr = soc.accept()   # 等别人给打电话
    data = conn.recv(1024)
    print(data)
    # conn就是通路,
    # conn.send发送数据,数据必须是二进制格式
    conn.send(b'nihao')
    # 挂断电话
    conn.close()
    # 销毁手机
    soc.close()
    
    # import socket
    # # 创建soc对象
    # soc = socket.socket()
    # # 链接服务端地址
    # soc.connect(('192.168.11.209',8080))
    # # 发送消息
    # soc.send(b'hellosir')
    # data = soc.recv(1024)
    # print('shoudao',data)
    # soc.close()
    
  • 相关阅读:
    hadoop中的序列化
    web服务端的架构演变
    网易考拉规则引擎平台架构设计与实践
    spring分布式事务学习笔记(2)
    质量评估面面观--聊一聊软件上线前的质量评估
    用script标签加载
    Windows下命令行下启动ORACLE服务
    笔记本优化八项
    C#编程总结(一)序列化
    学习之路十四:客户端调用WCF服务的几种方法小议
  • 原文地址:https://www.cnblogs.com/jiann/p/11529542.html
Copyright © 2020-2023  润新知