美文网首页
day18总结

day18总结

作者: liuperson | 来源:发表于2018-09-12 17:33 被阅读0次
    image.png
    1.IP地址:每地方对应ip地址是不同的,每条电脑连上网都有IP地址,IP地址区域分配
    2.路由器:分配网络该怎么走,有很多口,网络请求要有IP地址,路由器会根据目标地址,自己来看每一步该走哪一条。
    3.光纤:作用就是只是连接。
    mac地址:是硬件的唯一标识,出厂前在网卡里面设定好的,全球唯一,网卡换了就变。

    image.png

    操作过程:
    1.www.baidu.com,先包装,准备数据有,date,源ip,目标ip,当前mac地址m1,下一跳的mac地址m2,mac地址是唯一的,所以它找得到,准备好后发送,到达下一个,m1变m2,m2变m3,最后找到DNS服务器(它会找www.baidu.com注册时备份的ip地址),源ip,目标ip互相交换,10.7.181.1,源ip,目标ip,当前mac地址,下一跳的mac地址,到对应的网页请求数据
    2.局域网不出交换机,不产生流量,cmd netstat -nb,查看木马


    image.png
    1.掌握最多前4层,怎么来确定,根据协议,文档或者代码支持


    image.png
    image.png
    image.png

    http协议:对网络请求的规定,属于应用层协议,tcp和udp同层
    7层都是在硬件里完成的,然后才交到网络里面,实现传输 数据封装后,传到另一边,需要对数据进行解封装



    image.png
    image.png

    TCP协议实现可靠传输,会建立会话,大的数据不能一次返回,它会拆分数据成多段,分多次返回,可靠传输,拆完过后,会标记记号1,2,3,拷贝一份,进入缓存区,先传1,1收到会发送,我已经收到1,这时缓存删除1,传输2,如果中间断了,服务器收不到客服端是否接收到的消息,如果等了一段时间,没有收到消息,它会自己再发一次,选择其他路径,如果收到,缓存区删除2,过程很啰嗦,因为它有会话,每次传送都有确认,所以可靠,请求只一次

    不可靠传输,客服端给服务端发送一次请求,服务器一次给你,但不建立会话,如果失败,只能再请求,视频
    流量控制,会话内容大小,数据大小,有必要才传


    1.服务端

    socket套接字:基于tcp和udp,用在服务端和客户端的两端,客服端:发送请求,服务端:收到请求,返回数据。
    python对套接字支持,提供socket库

    import socket
    def creat_server():
        """写服务器"""
        #1 创建套接字对象
        """
        socket(family,type)
        family:确定IP协议类型
        AF_INET:ipv4
        AF_INET6:ipv6
        
        type:传输协议类型
        SOCK_STREAM:TCP协议
        SOCK_DGRAM:UDP协议
        """
        server=socket.socket()#family=socket.AF_INET,type=socket.SOCK_STREAM
        #创建对象完成
    
        #2.绑定IP地址和端口
        # 查看IP,cmd--ipconfig,10.7.153.104
        """
        bind(ip地址,端口)
        端口:一台电脑上一个端口标记一个唯一的服务,范围0-65535,
        0-1024是著名端口,专门用来标记一个特殊的服务,一般不用
        但是,同一端口,同一时间,只能绑定一个服务
        """
        server.bind(('10.7.153.104',8080))
    
        #3.开始监听
        """
        listen(最大个数),同一时间,能够连接的客服端的个数
        """
        server.listen(512)
    
        #4.让服务器处于运行状态
        while True:
            print('监听状态')
            #5.连接客服端(建立连接),返回连接对象,和客服端地址
            connect,addr=server.accept()#返回元组
            #这句代码会让程序停下来,直到有客服端来请求当前服务器为止,input也是,堵塞线程
            print(addr)
            #6.服务器给客户端发送消息
            """
            send(data)
            data:python3中要求bytes类型,python2中可以是字符串
            图片都是二级制发送
            字符串:转换成二进制,str-->bytes
            1.字符串.encode(默认utf-8,可以不传)
            2.bytes('你好','utf-8')
            """
            while True:
                message=input('服务端:')
                connect.send(message.encode())
                # connect.send(bytes('我是谁','utf-8'))
    
                #7.也可以接收客户端发过来的消息
                """
                recv(bufsize),recv一样会堵塞线程
                bufsize:每次能接收的最大的字节数,如果实际偏大,分多次传输
                返回值:就是接收到的数据,但是编码方式任然是二进制的
                二进制转字符串
                recv_data.decode()
                str(recv_data,'utf-8')
                """
                recv_data=connect.recv(1024)
                print(str(recv_data,'utf-8'))
    
            #8.断开连接
            connect.close()
    creat_server()
    

    2.客户端

    
    import  socket
    def creat_socket():
        #1.创建
        client=socket.socket()
    
        #2.连接
        """
        connect(服务器地址)
        """
        client.connect(('10.7.153.104',8080))
        while True:
        #3.接收消息
            data=client.recv(1024)
            print(data.decode(encoding='utf-8'))
    
            #4.发送消息
            message=input('客户端:')
            client.send(message.encode())
    
        #5.断开
        client.close()
    
    creat_socket()
    

    3.图片服务端

    
    import socket
    #1.创建座机
    server=socket.socket()
    
    #2.插入电话线
    server.bind(('10.7.153.104',12345))
    
    #3.人坐电话旁
    server.listen(520)
    
    #保证电话开机
    while True:
        #4.接电话
        connect,addr=server.accept()
        print(addr)
    
        #5.讲电话
        with open('./files/luffy2.png','br')as f:
            data=f.read()
    
        connect.send(data)
    
        #6.听电话
        # connect.recv(1024)
    
        #7.挂电话
        connect.close()
    

    4.图片客户端

    
    import socket
    
    client=socket.socket()
    client.connect(('10.7.153.103',12344))
    
    
    all_data=bytes()
    data=client.recv(1024)
    while data:
        print('接收到数据')
    
        all_data+=data
        data=client.recv(1024)
    with open('./files/new.png','wb')as f:
        f.write(all_data)
    
    client.close()
    

    相关文章

      网友评论

          本文标题:day18总结

          本文链接:https://www.haomeiwen.com/subject/pfdmgftx.html