• 10 传输模型与套接字(进阶)


    01-传输模型

    第一部分 传输模型

    1、基本模型

    2、层次划分

    MAC地址:唯一的地址

    TCP可靠、UDP不可靠

    3、传输层说明

    说明一:

    ​ 作为Python开发,咱们都是在应用层的HTTP协议之上进行开发的。

    说明二:

    网络编程,主要是了解我们Python能编写的最低的层次,即传输层的基本情况

    说明三:

    HTTP协议是基于TCP之上的,因此我们需要了解TCP连接的基本过程

    第二部分 TCP连接

    1、建立连接(三次握手)

    为什么三次

    因为第一次只是客户端告诉服务端

    第二次,客户端才知道服务端收到了

    第三次,服务端才知道客户端收到了

    2、传输数据

    客户端向服务端请求

    服务端向客户端响应

    一发一收

    一收一发

    3、断开连接(四次握手)

    为什么多了一次?

    因为服务端可能还数据要发。

    到底是一次连接传一次数据;还是一次连接传多次数据?

    都可以:HTTP协议 前者、Websocket 后者

    第三部分 IP地址与端口

    1、IP地址

    127.0.0.1 自己

    0.0.0.0 任意访问

    2、端口号

    端口是用来区分我们的应用程序的,范围:0-65535

    02-套接字

    第一部分 创建套接字

    1、套接字的基本概念

    2、创建套接字实例
    >>> import socket
    >>> sock = socket.socket()
    >>> sock
    <socket.socket fd=792,  # 文件描述符(唯一标识了一个socket)
    family=AddressFamily.AF_INET,   # AF_INET表示IPv4
    type=SocketKind.SOCK_STREAM,    # SOCK_STREAM表示TCP
    proto=0>    # 通常都是0
    3、三种套接字

    第二部分 建立套接字连接

    1、服务端监听套接字的绑定与监听
    >>> import socket
    >>> server = socket.socket()    # 生成套接字     
    >>> server.bind(('0.0.0.0',8899))       # 绑定套接字,4个0为全网地址,可以不写
    >>> server.listen(5)            # 监听套接字,5为监听数量
    2、客户端套接字的主动连接
    >>> import socket
    >>> client = socket.socket()
    >>> client.connect(('127.0.0.1',8899))
    3、服务端对等连接套接字的生成
    >>> import socket
    >>> server = socket.socket()
    >>> server.bind(('',8899))
    >>> server.listen(5)
    >>> conn,addr = server.accept()     # accept会阻塞
    4、accept阻塞说明

    第三部分 使用套接字传输

    客户端 一发 一收

    服务端 一收 一发

    recv 会阻塞哟!

    # 服务端
    >>> import socket
    >>> server = socket.socket()
    >>> server.bind(('',8899))
    >>> server.listen(5)
    >>> conn,addr = server.accept()
    >>> conn.recv(1024)
    b'hello'
    >>> conn.send(b'thanks')
    6# 客户端
    >>> import socket
    >>> client = socket.socket()
    >>> client.connect(('127.0.0.1',8899))
    >>> client.send(b'hello')
    5
    >>> client.recv(1024)
    b'thanks'

    第四部分 断开套接字连接

    1、客户端主动断开连接
    >>> import socket
    >>> client = socket.socket()
    >>> client.connect(('127.0.0.1',8899))
    >>> client.send(b'hello')
    5
    >>> client.recv(1024)
    b'thanks'
    >>> client.close()  # 断开连接
    2、服务端判断客户端断开连接
    >>> import socket
    >>> server = socket.socket()
    >>> server.bind(('',8899))
    >>> server.listen(5)
    >>> conn,addr = server.accept()
    >>> conn.recv(1024)
    b'hello'
    >>> conn.send(b'thanks')
    6
    >>> conn.recv(1024)
    b''         # 接收到空字节,表示客户端已经断开连接
    >>> conn.close()    # 断开连接

    总结:九个操作

    操作一: 服务器套接字:bind

    操作二: 服务器套接字:listen

    操作三: 客户端套接字:connect

    操作四: 客户端套接字:send

    操作五: 对等连接套接字:recv

    操作六: 对等连接套接字:send

    操作七: 客户端套接字:recv

    操作八: 客户端套接字:close

    操作九: 对等连接套接字:close

  • 相关阅读:
    跟光磊学Python开发-面向对象入门
    插件调用下推操作
    K3Wise老单获取单据行数
    git 添加和删除 global 的 remote.origin.url
    CSV转Excel格式
    java 下载文件
    windows下安装redis并设置自启动
    linxu jdk安装
    Linux安装部署Redis
    CentOS上安装MySQL(使用国内源)
  • 原文地址:https://www.cnblogs.com/zcmq/p/9275858.html
Copyright © 2020-2023  润新知