zoukankan      html  css  js  c++  java
  • (网络编程)理论 原理

     

    IP地址分成两部分

    • 网络部分:标识子网(子网掩码)
    • 主机部分:标识主机(ip地址)
    • 172.16.10.2:10101100.00010000.00001010.000000010   (ip)

      255255.255.255.0:11111111.11111111.11111111.00000000  (掩码)

    • 172.16.10.0      (局域网地址)
    • 都为1取1,其他取0

    Arp协议解析IP得到子网地址进而获取对方ip的mac地址

    局域网的ip(自动分配,动态的),mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址

    两个ip子网地址一样:同一局域网>>>以太头(原mac,fffff?) ip头(ip1 ip2 )  数据----通过交换机---->每台机器发一份,只有ip为ip2的机器响应并返回mac

            不一样:不同局域网>>>以太头(原mac,fffff?) ip(ip1 路由器ip)头 端口头 数据-----通过交换机----->每台发一份,路由器(网关默认第4部分为1)响应,返回mac1

                    以太头(mac1路由,fffff?)ip(ip路由1,ip2子网)-----路由协议------>返回ip2子网,路由mac2

                    以太头(mac2路由,fffff?) ip(ip路由2,ip2)---------通过交换机--------->每台发一份,ip为ip2的响应返回mac

    tcp协议:

    可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    以太网头 ip 头               tcp头               数据                                                    

     

    udp协议:

    不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

    以太网头 ip头                      udp头                            数据                                           

                    


    一、其他
    1、互联网协议,可看作是一个安装在计算机上的包(计算机界的英语,通用的标准)
    2、交换机:有mac地址学习功能
    3、ARP(地址解析协议),可将IP地址转成mac地址,mac地址转成IP地址
    4、IP+端口可锁定一架计算机上的某个应用程序
    5、IP 和子网掩码-》局域网地址(子网地址)
    6、 TCD又称好人协议,可靠协议,需要三次握手建立链接
    7、标志位:sgn=1请求信息,ack=1 确认信息,seq=’ ’序列号,ack=1+x(序列号)
    8、在创建链接时如果并发少,基本看不多SYN—REVD。但如若受到洪水攻击(高并发)系统会出现SYN—REVD状态
    9、TCD需要四次挥手以断链接。谁先发完信息,谁先发出断链接请求。通常是SERVER端先发出,但不一定。
    10、fin=1 断链接请求,ack=1 确认信息
    11、Fin_WAIT_1 为主动断链接的一方
    12、在断链接时如果并发少,基本看不多TIME—WAIT。但如若高并发,系统会出现TIME—WAIT状态,需要监查内存
    13、TCP,需要建链接,又称可靠传输,相对安全但效率低,一般用于转账
    14、UDP,不需要建链接,又称不可靠传输,效率高,但安全性较低,一般用于聊天(QQ)和查询
    15、套接字有被称作IP和端口
    16、AF_INET (AF:address family 套接字类型,INET:基于网络)
    17、TCP 被称为流式协议,SOCK_STREAM
    18、UDP 被称为数据报协议,SOCK_DGRAM
    19、127.0.0.1 指本机,主要用于调试
    20、端口0-65535,0-1024被系统使用,其他号码可选用
    21、phone.listen(5): 5指的是同时最多可以用多少个请求,而不是连接数
    22、conn.recv(1024):1024为最大限制的字节数
    23、conn为套接字对象,为三次握手的产物,可收可发
    24、conn.close():回收系统资源
    二、基于tcp协议的套接字通信
    服务端:
    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.bind(('127.0.0.1',8081)) #插手机卡,补充:0-65535 0-1024给系统用的
    phone.listen(5) # 开机
    print('start...')
    conn,client_addr=phone.accept() # 等电话连接
    print('连接来了:',conn,client_addr)
    # 收发消息
    msg=conn.recv(1024) #收消息,1024是一个最大的限制
    print('客户端的消息: ',msg.decode('utf-8'))
    conn.send(msg+'SB'.encode('utf-8'))
    # 挂电话
    conn.close()
    # 关机
    phone.close()
    客户端:
    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.connect(('127.0.0.1', 8081)) # 拨电话,地址为服务端的ip和端口
    phone.send('你好'.encode('utf-8')) # 发消息b'hello'
    data = phone.recv(1024) #收消息
    print(data.decode('utf-8'))
    phone.close()
    三、加上通信循环与连接循环
    服务端:
    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    phone.bind(('127.0.0.1',8081))
    phone.listen(5)
    print('start...')
    while True: # 连接循环
        conn,client_addr=phone.accept()
        print('客户端 ',client_addr)
        while True: # 通信循环
            try:
                msg=conn.recv(1024)
                print('客户端的消息: ',msg)
                conn.send(msg+b'SB')
            except ConnectionResetError:
                break
        conn.close()
    phone.close()
    客户端:
    import socket
    phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
    phone.connect(('127.0.0.1',8081)) # 拨电话,地址为服务端的ip和端口
    while True:
        msg=input('>>>: ').strip()
        phone.send(msg.encode('utf-8')) # 发消息b'hello'
        data=phone.recv(1024) #收消息
        print(data.decode('utf-8'))
    phone.close()
  • 相关阅读:
    Spring MVC中的(多)文件上传和下载
    SSM整合案例
    事务的四种隔离级别和七种传播行为
    注解方式实现IOC和AOP
    顾问包装通知
    使用ProxyFactoryBean进行AOP
    动态代理(jdk&cglib)的用法
    英语中12个典型的中国式错误
    翻译:你的声音太小了,可以大一些吗
    今天天气怎么样
  • 原文地址:https://www.cnblogs.com/3sss-ss-s/p/9554273.html
Copyright © 2011-2022 走看看