• 网络通信协议


    一.osi(open system interconnect)七层协议

    1.应用层:最靠近用户的osi层,为用户的应用程序提供网络服务

    2.表示层:可以确保一个系统的应用层所发的信息可以被另一个系统的应用层读取.数据转换

    3.会话层:通过传输层建立数据传输的通路,主要在你的系统之间发起会话或者接收会话请求

    4.传输层:定义了一些传输数据的协议和端口号(eg:tcp,udp),分段数据,然后接收数据并重组数据

    5.网络层:不同地域的网络中两个主机系统之间提供连接和路径选择.

    6.数据链路层:定义如何让格式化数据以进行传输,以及如何控制对物理介质的访问,这一层通常还提供错误检测和纠正,以确保数据的可靠传输.

    7.物理层:主要定义物理设备的标准

    二.tcp/ip五层模型

    1.物理层:主要是基于电器特性发送高低电压(电信号)

    2.数据链路层:第一电信号的分组方式

      1.以太网协议:用来统一电信号的标准,一组电信号构成一个数据包,叫做帧.

        每组数据帧分成:报头head和数据data两部分

      2.mac地址:物理地址

      3.广播:原始方式

    3.网络层:引入一套新的地址用来区分不同的广播域/子网

      1.ip协议:规定网络地址的协议叫ip协议    

      2.子网掩码:确定哪些地址在同一子网

      3.ip数据包:ip数据包也有head和data,ip数据包在以太网包的data里

        head:长度为20-60字节

        data:最长为65516字节

      4.ARP协议:通过ip地址获取mac地址

    4.传输层:建立端口到端口的通道

      1.tcp协议:定义为端口号拼接到ip地址构成套接字

        tcp协议是可靠的字节流传输,tcp数据包没有长度限制,但是为了保证网络的效率,通常不会唱过ip数据包的长度,以确保单个tcp数据包不必再分割.  

    以太网头 ip头 tcp头 数据

        tcp协议的三次握手和四次挥手(连接和断开过程)

      2.udp协议:定义为端口号拼接到ip地址构成套接字

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

    以太网头 ip头 udp头 数据

    5.应用层:规定应用程序的数据格式

      组包,拆包的过程

      

    三.基于tcp和udp协议下的socket的通讯流程

    1.tcp协议:可靠的,面向连接的协议(eg:打电话),传输效率低,全双工通信,面向字节流

    import socket
    
    server = socket.socket()
    ip_port = ("127.0.0.1",8888)
    server.bind(ip_port)
    server.listen(1)
    while 1:
        conn ,addr = server.accept()
        while 1:
            from_client_msg = conn.recv(1024).decode("utf-8")
            print(from_client_msg)
            if from_client_msg == "bye":
                break
            to_client_msg = input("回复:").encode("utf-8")
            conn.send(to_client_msg)
            if to_client_msg == "bye":
                break
        conn.close()
    import socket
    
    client = socket.socket()
    ip_port = ("127.0.0.1",8888)
    
    client.connect(ip_port)
    while 1:
        to_server_msg = input("发消息:")
        client.send(to_server_msg.encode("utf-8"))
        if to_server_msg == "bye":
            break
        from_server_msg = client.recv(1024).decode("utf-8")
        print(from_server_msg)
        if from_server_msg == "bye":
            break
    
    client.close() 

     2.udp协议:不可靠的,无连接的服务,传输效率高,一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无阻塞控制.

    import socket
    
    client = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ("127.0.0.1",8888)
    
    while 1:
        to_server_msg = input("发送:").encode("utf-8")
        client.sendto(to_server_msg,ip_port)
    
        from_server_msg,server_addr = client.recvfrom(1024)
        print(from_server_msg.decode("utf-8"))
    import socket
    
    server = socket.socket(type=socket.SOCK_DGRAM)
    ip_port = ("127.0.0.1",8888)
    server.bind(ip_port)
    while 1:
        conn,addr = server.recvfrom(1024)
        print(conn.decode("utf-8"))
    
        to_client_msg = input("回复:").encode("utf-8")
        server.sendto(to_client_msg,addr)
    

    3.基于tcp和udp协议socket流程区别

      TCP需要连接,而UDP不需要.

  • 相关阅读:
    js返回上个页面再刷新
    xm-select 获取选选择的值
    接口可以跨域访问
    gitlab 版本查看
    gitlab 在linux安装环境下存储地址
    iosUILable基本使用及其所有方法
    iOS富文本字符串AttributedString具体用法
    SQL Server 开发指南
    SQL Server 数据库安全
    SQL Server 触发器
  • 原文地址:https://www.cnblogs.com/q767498226/p/10217505.html
Copyright © 2020-2023  润新知