Python socket网络编程(通信介绍)

时间:2022-08-19 08:28:50
 
socket通信介绍

Python socket网络编程(通信介绍)

Python socket网络编程(通信介绍)

通信介绍(一)

  1.所有网络协议的基础就是:socket

  2.socket对TCP与UDP协议封装,让用户进行简单操作。

  3.socket只做两件事:发 send,收 receive 。

其他概念

传输协议有 TCP与UDP

  TCP/IP

  三次握手

    1.客户端   syn-->     服务端

    2.客户端   <--syn+ack   服务端

    3.客户端   ack-->     服务端

OSI七层

  应用层       ..

  表示层       ..

  会话层       ..

  传出层       协议

  网络层       ip

  数据链路层     mac

  物理层 二进制    0 1

通信介绍(二)

1.每个机器上有65535个端口(port)

2.实现通信需要IP加端口。

1.socket

1.sockt支持TCP与UDP

伪代码发送端(客户端)

  #1.添加模块

    import socket

  #2.定义操作类型

    socket.TCP/IP

  #3.链接对方,不需要三次握手

    connect(a.ip,a.port)

  #4.发送数据

    socket.send(hello)

  #5.收回数据

    socket.recv()

  #6.关闭链接

    socket.close()

伪代码接收端(服务端)

  #1.添加模块

    import socket

  #2.定义操作类型

    socket.TCP/IP

  #3.监听端口

    listen(0.0.0.0,6969)

  #4.等待数据来

    waiting()

  #5.收数据

    recv()

  #6.发回数据

    send

Python socket网络编程(通信介绍)

2.socket

  (1)socket Families(地址簇)

    #网络层

    socket.AF_UNIX unix本机进程间通信,协议类型就是地址簇

      ①进程与进程之间是无法通信的

        注:两个进程想通信,可以通过序列化pickle实现。

        注:同过Pickle把A进程里面的内存对象存到硬盘上,

          B进程在打开A进程的硬盘文件在load回来。(比较慢)

        注:进程间可以访问就相当于QQ直接可以把word读出来

      ②如果想快速读数据可以通过AF_UNIX本机进程间通讯。

         注:本机会有一个local.socket,转一次数据,完成进程间交互。

    socket.AF_INET IPV4

      ①网络层相当于地址簇

    socket.AF_INET6  IPV6

      ①网络层相当于地址簇

   (2)socket Types

    #传输层

    socket.SOCK_STREAM  #for tcp

    socket.SOCK_DGRAM   #for udp 

    socket.SOCK_RAW

      ①可以处理普通套接字处理不了的

        注:原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,

          而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文。

      ②可以伪造报IP头

        注:利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。

      ③可以进行洪水攻击(Dos攻击)

        注:通过发送大量的请求服务并发给服务,达到服务瓶颈,

          导致服务无法承受负载压力。

        Dos攻击:TCP三次握手,第二次握手,服务会进行syn_recve等待状态

             两分钟(可修改),大量进行IP头修改可形成dos攻击。

     socket.SOCK_RDM

      ①是一种可靠的UDP形式,即保证交付数据报但不保证顺序。

        注:SOCK_RAM用来提供对原始协议的低级访问,

          在需要执行某些特殊操作时使用,如发送ICMP报文。

          SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。

     socket.SOCK_SEQPACKET #废弃了