day18总结

2018-09-12  本文已影响0人  liuperson
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()
上一篇下一篇

猜你喜欢

热点阅读