zoukankan      html  css  js  c++  java
  • 网络基础,tpc,udp

    一 , 网络基础相关知识

      1. 架构 (重点)

        C / S  架构 : client 客户端(APP) 和 server 服务器端

          能充分发挥pc机的性能

        B / S 架构 : browser 浏览器 和 server 服务器  (延伸于c/s架构)

          B / S 架构统一了应用的接口

      2. 通信

        同一台电脑上俩个py程序通信 : 打开一个文件

        俩个电脑通信 : 连一个网线

        多个电脑通信 : 借助于交换机

      (1).网卡 : mac地址(具有唯一性) : 物理地址,可以唯一标示某一台电脑 ; 

           生产厂商遵循国际标准生产

      (2).IP地址 : 标识计算机在网络地址中的地址 , 四位 , 以 . 分割 , 十进制

         过程 : 机器1发送请求 : 自身ip和mac信息和目的机信息的ip地址(想通过ip地址查找

          mac地址然后通信),单播发送给交换机,交换机在本地学习记录信息,交换机通过广

          播的形式发送,目的机接收确认信息后,单播发送给交换机,交换机此时可以单播发送给

          机器1,因为之前已经记录了及其地址信息,所以不需要广播,机器1和目的机相互知道

          物理地址后便可以直接相互通信,不用经过交换机.

        (3).arp协议 : 将IP地址获取目标mac地址的一个协议(过程)

        (4).端口 : 操作系统为本机上每一个运行程序都随机分配一个端口,其他电脑上的程序可以

         通过端口获取到这个程序

        (5).IP地址+端口  能唯一找到某台电脑上的某一个服务程序

        (6).路由器 : 连接不同网段,路由

        (7).网关 : 类似于局域网的入口出口

        (8).网段 : 一个局域网的IP地址范围

        (9).子网掩码 : 子网掩码 & IP 地址 得到网段

        (10). osi 五层模型

          应用层  ;  传输层 ; 网络层 ;  数据链路层 ; 物理层

        互联网协议与osi模型

          每层运行常见物理设备

        hattp协议:超文本传输协议 ;   ftp协议 : 上传与下载协议

     

      osi模型 (层层包装)

    二 , socket模块

     1,

     用户运行通信类应用时调用socket模块,进行执行,通过选用tpc / udp 协议传输到目的通信类应用

          

     2. socket又叫套接字,有很多类型,(只了解俩种)

      1. 基于文件类型的套接字 AF_UNIX (早期socket是源自于unix系统而研发的一种功能,主要是

       为了同一台脑上多个程序直接通信)

      2. 基于网络类型的套接字 AF_INET

     3. tpc协议和udp协议

      tpc 双方相互知道地址(全双工) ; udp 只要知道对方地址就可以发送消息,不保证数据安全但是传输快

      基于tpc协议 : SOCK_STRFAM    基于udp协议 : SDCK_DGRAM

    服务器端
    
    import socket

    sk = socket.socket() #创建对象  默认基于网络类型的TPC协议
    sk.bind(('127.0.0.1',18080)) # 绑定一个'ip',端口  端口范围 0-65535 但是 0-1023 不能用 
    sk.listen() #同时能接受的连接(类似于手机中的开机)

    conn,addr
    = sk.accept() #等待接收客户端的连接 accept会接收客户端的俩个连接(等待等待)
    #print(conn) #family,type等 服务端的地址信息 和客户端的地址信息
    #print(addr ) #客户端的IP地址,和端口 元组类型

    #相互通信
    msg_r = conn.recv(1024) #接收数据大小 1024个字节
    print(msg_r.decode('utf-8')) #同时也需要解码

    conn.close()
    #关闭服务(类似于手机中的挂断电话)
    sk.close() #关闭程序(类似于手机中的关机)



    客户端
    import socket

    sk = socket.socket() sk.connect(('127.0.0.1',18080)) #连接 服务器的地址 #sk.send(b'hello')
    msg_s = input('>>') sk.send(msg_s.encode('utf-8')) #若是中文需要转码

    sk.close()


     三次挥手,四次握手:

      三次握手:

       客户端首先发送请求连接服务器 ;

       服务器返回收到的请求,并要求连接客户端 ;

       客户端回复可以连接

      四次挥手 :

       (谁先发起断开连接的请求都可以)客户端发起断开连接的请求 ,但是还可以接受数据 ; 

       服务器回复接收到客户端的请求 ;

       服务器发送准备断开连接 ;

         客户端回复确认断开连接 

      

     重点 : arp协议 ;  

        路由器与交换机区别 ;  

        tcp协议和udp协议的特点,及tcp协议的编码 ;

        osi五层模型;

        挥手与握手.

     udp协议

      通信优势 : 允许一个服务器同时和多个客户端通信

    #服务端
    
    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)#upd协议
    sk.bind(('127.0.0.1',8090))  #绑定一个 ip 和端口
    
    #收发
    
    msg_r , addr = sk.recvfrom(1024)#接收来自哪里的消息 msg_r接收的信息,addr客户端地址
    print(msg_r.decode('utf-8'))
    msg_s = input(('>>'))    #只有客户端向服务器先发送后,服务器才能向客户端发送,否则服务器不知道客户端地址
    
    sk.sendto(msg_s.encode('utf-8'),addr)#发给谁的消息  sendto(发送的消息 , 发送的目的地址)
    sk.close()
    
    
    
    #客户端
    
    import socket
    sk = socket.socket((type = socket.SOCK_DGRAM))
    msg_s
    = input('>>') sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8090)) msg_r , addr = sk.recvfrom(1024) print(msg_r.decode('utf-8'))
    sk.close


     设置颜色

      结构 : 33[ 字体颜色,背景颜色  数据 33[ 0m   (第一个33为开始,第二个为恢复默认颜色)

    #服务端
    
    import socket
    sk = socket.socket(type = socket.SOCK_DGRAM)#upd协议
    sk.bind(('127.0.0.1',8090))  #绑定一个 ip 和端口
    #根据每个客户端的名字加上颜色
    dic = {'小红':'33[32m','金老板':'33[33m'}
    
    #收发
    
    msg_r , addr = sk.recvfrom(1024)#接收来自哪里的消息 msg_r接收的信息,addr客户端地址
    msg_r = msg_r.decode('utf-8')
    name = msg_r.split(':')[0].strip()
    color = dic.get(name,' ')#获取字典中key对应的value值,没有返回空
    print('%s %s 33[0m' % (color,msg_r))#按照结构排列
    
    msg_s = input(('>>'))    #只有客户端向服务器先发送后,服务器才能向客户端发送,否则服务器不知道客户端地址
    
    sk.sendto(msg_s.encode('utf-8'),addr)#发给谁的消息  sendto(发送的消息 , 发送的目的地址)
    sk.close()
    
    
    
    #客户端
    
    import socket
    sk = socket.socket((type = socket.SOCK_DGRAM))
    
    msg_s = input('>>')
    sk.sendto(msg_s.encode('utf-8'),('127.0.0.1',8090))
    msg_r , addr = sk.recvfrom(1024)
    print(msg_r.decode('utf-8'))
    
    sk.close
  • 相关阅读:
    HDU3555:Bomb
    入门OJ:售货员的难题
    Zju1100 Mondriaan
    与图论的邂逅08:树上倍增
    入门OJ:八中生成树2
    Poj2286 The Rotation Game
    P1379 八数码难题
    [SCOI2005]骑士精神
    与图论的邂逅07:K短路
    [Usaco2007 Feb]Cow Party
  • 原文地址:https://www.cnblogs.com/panda-pandeyong/p/9457109.html
Copyright © 2011-2022 走看看