• 传输模型,网络层次划分,三次握手,四次挥手,IP与端口,套接字socket


    了解套接字之前,需要先了解基本的传输模型

    其次,还需要了解网络的七层划分和四层结构

    在python中,数据链路层相当于硬件层,python不需要了解,只用在传输层进行学习就足够了

    其中,传输层分为TCP传输协议和UDP协议,TCP协议相当于打电话,是可靠传输,但是UDP的传输是不可靠的,就像发短信,

    当短信发出,可能会出现时间的混乱,可能会出现发送失败的情况,是不可靠的。

    需要提前明白的是:

      作为python开发,都是在应用层的HTTP之上进行开发的,而HTTP协议是基于TCP协议之上的

      python网络编程,其最底层,就在传输层,再往下,python是做不了的


    还需要了解的,关于TCP的连接

      建立连接(三次握手)

      数据传输

      断开连接(四次挥手)

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

    客户端向服务器发起请求连接的包(一次),当服务器接收的请求,就会返回一个同意连接的包(第二次),

    在客户端就会建立连接,然后向服务器发送已经建立连接的信息(三次),服务器收到客户端成功连接的信息,

    就会正式开始连接

    第三次是为了确认,假设如果客户端网络不好,第一次请求由于网络延时,由于长时间的等待

    客户发起了第二次请求,完成了三次握手后,第一次请求连接的包发送到了服务器,服务器向客户端发起同意连接,

    但是并没有收到客户端的成功连接信息,服务器就不会建立连接,从而达到网资源的不浪费】

    2. 数据传输

    数据的传输,客户端发起请求,服务器发起响应,完全按照一发一收,一收一发

    3.断开连接(四次挥手)

    客户端向服务器发起完成(出动关闭)请求(第一次),服务器收到请求返回同意请求(第二次),但此时并没有完全关闭,还会有一段等待的时间,

    服务器会在会这短时间将未传输完成的数据传输完毕,当完成全部传输,就会向客户端发起关闭请求(第三次),客户端收到以后,会返回确认信息(第四次),

    这时服务器就会关闭,客户端会也会等待一段时间,然后关闭。

    【第四次还是为了确认】


    通信定位的流程

    1. 先找IP

    IP地址确定用户,127.0.0.1表示本地IP,0.0.0.0表示任意访问    最大到255.255.255.255

    2. 再找端口

    端口从0到65535,0~1023都是一些专有特殊端口,不能使用。1024~65535之间的是动态端口,可以随意使用(也有特殊的)。

    其中,一些特殊的,比如80表示HTTP,22表示ssh,21FTP,3306表示Mysql,6379表示redis,27017表示MongoDB


     最后学会使用套接字socket创建服务器和客服端

    创建一个服务器端口

     1 import socket
     2 server = socket.socket()
     3 server.bind(("", 9999))    # 元组
     4 server.listen(3)    # python3.6以后才支持的监听最大量操作
     5 conn,addr = server.accept() # 取conn建立对等连接
     6 while True:
     7     data = conn.recv(1024)
     8     if not data:
     9         break
    10     print(data.decode())
    11     conn.send(data)    #原数据返回
    12 conn.close()
    13 server.close()    #关闭

    建立一个客户端:

    import socket
    client = socket.socket()
    client.connect(('127.0.0.1', 9999))    #本地IP
    while True:
        data = bytes(input('>>>'), encoding='utf-8')
        if not data:
            break
        client.send(data)    # 发送消息
        re_data = client.recv(1024)
        print('回执消息:', re_data)
    client.close()

    先运行服务器,再运行客户端,就可以向服务器发送信息,并接收到服务器回执的相同的消息

  • 相关阅读:
    elasticsearch 5.x 系列之七 基于索引别名的零停机升级服务
    Linux 查看系统硬件信息(实例详解)
    linux grep命令详解
    Boot loader: Grub进阶(转)
    Boot loader: Grub入门(转)
    内核模块管理(转)
    Centos启动流程(转)
    Linux 内核启动流程(转)
    程序的运行顺序(转)
    查询进程打开的文件(转)
  • 原文地址:https://www.cnblogs.com/pywjh/p/9450778.html
Copyright © 2020-2023  润新知