• 【网络】OSI模型 与 TCP/IP模型 对比


    一、OSI模型

    OSI模型包含7个层次,从下到上分别是:

    1. 物理层(Physical Layer)

       - 功能:处理与电子设备物理接口相关的细节(如电压、引脚布局、同步,等等)。
       - 协议:以太网物理标准(如Ethernet 10BASE-T, 100BASE-TX等)、光纤(如SONET/SDH)。

    2. 数据链路层(Data Link Layer)

       - 功能:建立、维护和终结节点间的链路;错误检测与修正。
       - 协议:以太网(Ethernet)、PPP(点到点协议)、STP(生成树协议)、ARP(地址解析协议)。

    3. 网络层(Network Layer)

       - 功能:负责数据封包的路由选择。
       - 协议:IP(Internet Protocol)、ICMP(Internet Control Message Protocol)、IGMP(Internet Group Management Protocol)。

    4. 传输层(Transport Layer)

       - 功能:提供可靠或不可靠的传输,并进行流量控制。
       - 协议:TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)。

    5. 会话层(Session Layer)

       - 功能:建立、管理和终止会话。
       - 协议/服务:NetBIOS、SMB(Server Message Block)、RPC(Remote Procedure Call)。

    6. 表示层(Presentation Layer)

       - 功能:确保信息已经正确的被接收节点理解,可以参与数据格式转换。
       - 协议/格式:JPEG、ASCII、EBCDIC、TIFF、GIF、PICT、XML、MIME、MPEG。

    7. 应用层(Application Layer)

       - 功能:允许访问OSI环境的手段,使用户能够接入网络。
       - 协议/服务:HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)、DNS(Domain Name System)。

    二、TCP/IP模型

    TCP/IP模型通常被描述为四个层次结构,有时候也被称作五层结构(加上物理层和数据链路层作为单独的层)。下面按照四层结构介绍:

    1. 链路层(Link Layer)

       - 对应OSI模型的物理层和数据链路层。
       - 功能:主管通过物理网络媒介发送和接收数据。
       - 协议:Ethernet、PPP、ARP、ATM。

    2. 网络层(Internet Layer)

       - 对应OSI模型的网络层。
       - 功能:选择和管理数据包通过网络的路径(路由)。
       - 协议:IP、ICMP、IGMP、IPsec。

    3. 传输层(Transport Layer)

       - 对应OSI模型的传输层。
       - 功能:提供端对端或主机到主机的通信。
       - 协议:TCP、UDP。

    4. 应用层(Application Layer)

       - 对应OSI模型的会话层、表示层和应用层。
       - 功能:允许访问网络服务,支持各种应用。
       - 协议/服务:HTTP、FTP、SMTP、DNS、Telnet、SSH。

    OSI模型更加严谨和细化,TCP/IP模型更加流行。

    三、代码示例

    1. # OSI模型示例代码
    2. # 导入所需的库
    3. import socket
    4. # 创建套接字(传输层)
    5. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    6. # 绑定地址和端口(网络层)
    7. sock.bind(('localhost', 8000))
    8. # 监听连接(传输层)
    9. sock.listen(1)
    10. while True:
    11. # 接受连接(传输层)
    12. connection, address = sock.accept()
    13. # 接收数据(应用层)
    14. data = connection.recv(1024)
    15. # 处理数据(应用层)
    16. # 这里可以解析HTTP请求、处理FTP文件传输等
    17. # 发送响应(应用层)
    18. response = b"Hello from server!"
    19. connection.sendall(response)
    20. # 关闭连接(传输层)
    21. connection.close()

    上述示例代码展示了传输层和应用层的一些操作。在实际应用中,还需要处理更低层次(如网络层、数据链路层、物理层)的细节,这通常由操作系统和网络库透明地处理。

  • 相关阅读:
    数据结构5---矩阵和广义表
    使用 redis 减少 秒杀库存 超卖思路
    HTML介绍及第一次编写网页
    Flutter命令行全局配置(command not found: flutter)
    Metabase使用及DB迁移注意事项
    你知道图论的spfa吗?
    阿里云 短信服务——开启验证码防盗刷监控
    智能家居的四种无线技术
    Unix Network Programming Episode 78
    代码随想录算法训练营第五十九天| 503.下一个更大元素II,42. 接雨水
  • 原文地址:https://blog.csdn.net/eidolon_foot/article/details/134488726