当前位置: 首页 > article >正文

【面试】【详解】计算机网络(TCP 三次握手,四次挥手)

一、计算机网络详解

  • (一)计算机网络概述

  • 定义:计算机网络是通过传输介质将多台计算机连接起来,以实现数据通信和资源共享的系统。

  • 功能:

    • (1) 数据通信:实现不同设备之间的数据传输。

    • (2) 资源共享:硬件资源(如打印机)和软件资源(如数据库)共享。

    • (3) 分布式处理:多台计算机协作完成任务。


  • (二)TCP 三次握手

  • 1. 定义
  • TCP(三次握手)是建立可靠连接的重要步骤,确保双方准备好通信并初始化必要的参数。

  • 2. 过程详解
  • 第一次握手(SYN):

    • 客户端向服务器发送一个 SYN(synchronize)报文,表明希望建立连接。
    • 此时,客户端进入 SYN-SENT 状态。
  • 第二次握手(SYN + ACK):

    • 服务器收到 SYN 后,回复一个 SYN + ACK 报文,表示接收到请求并同意建立连接。
    • 服务器进入 SYN-RECEIVED 状态。
  • 第三次握手(ACK):

    • 客户端收到 SYN + ACK 后,发送 ACK 报文,表示确认。
    • 客户端和服务器进入 ESTABLISHED 状态,连接正式建立。
  • 3. 为什么需要三次握手?
  • 确保双方都能(收,发)数据,就是将双方四个状态都确定:

    • (1) 第一次握手客户端发送数据,确认自己可以发送
    • (2) 第二次握手服务器接收到数据,确认自己可以接收,同时告知客户端可以发送
    • (3) 第三次握手客户端确认自己可以接收数据
  • 防止服务器资源浪费:如果仅两次握手,可能导致服务器误认为已建立连接,浪费资源。

  • 4. 代码示例(Socket 编程)
    import socket
    
    # 服务端代码
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(("127.0.0.1", 8080))
    server.listen(1)
    print("等待客户端连接...")
    conn, addr = server.accept()
    print(f"连接已建立: {addr}")
    
    # 客户端代码
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(("127.0.0.1", 8080))
    print("连接成功")
    

  • (三)TCP 四次挥手

  • 1. 定义
  • 四次挥手是关闭 TCP 连接的步骤,确保双方的数据传输完全结束。

  • 2. 过程详解
  • 第一次挥手(FIN):

    • 客户端发送 FIN(finish)报文,表示不再发送数据。
    • 客户端进入 FIN-WAIT-1 状态。
  • 第二次挥手(ACK):

    • 服务器收到 FIN 后,回复一个 ACK 报文,表示已收到请求。
    • 服务器进入 CLOSE-WAIT 状态。
  • 第三次挥手(FIN):

    • 服务器发送 FIN 报文,表示不再发送数据。
    • 服务器进入 LAST-ACK 状态。
  • 第四次挥手(ACK):

    • 客户端收到 FIN 后,回复一个 ACK 报文。
    • 客户端进入 TIME-WAIT 状态,确保服务器收到 ACK 后关闭。
  • 3. 为什么需要四次挥手?
  • TCP 是全双工通信:双方需要单独关闭发送和接收通道。

  • 确保数据完全传输:通过分阶段关闭,防止未传输的数据丢失。

  • 4. TIME-WAIT 状态的作用
  • 防止丢失的报文被误处理:等待一段时间确保所有报文从网络中消失。

  • 确保连接的完整关闭。

  • 5. 代码示例(Socket 编程)
    import socket
    
    # 服务端代码
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(("127.0.0.1", 8080))
    server.listen(1)
    conn, addr = server.accept()
    print("连接已建立")
    conn.close()
    print("连接已关闭")
    
    # 客户端代码
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(("127.0.0.1", 8080))
    print("连接成功")
    client.close()
    print("连接已关闭")
    

  • (四)UDP 与 TCP 的区别

    特性TCPUDP
    连接方式面向连接(三次握手)无连接
    可靠性提供可靠传输,确保数据无误不保证数据可靠性
    速度较慢(有流控与拥塞控制)快(无流控与拥塞控制)
    场景文件传输、HTTP、数据库等视频直播、DNS、游戏

  • (五)总结

  • 三次握手:建立连接,确保双方通信能力。

  • 四次挥手:断开连接,确保数据完整传输。

  • TCP 与 UDP:

    • TCP 提供可靠性,适用于需要严格保证数据正确的场景。

    • UDP 提供高效性,适用于实时性要求高的场景。

      通过深入理解 TCP/UDP 的机制,可以优化网络程序的设计,提高通信效率。


http://www.kler.cn/a/524901.html

相关文章:

  • Windows 程序设计7:文件的创建、打开与关闭
  • Vue.js组件开发-实现导出PDF文件可自定义添加水印及水印样式方向
  • 10.1 DriveInfo类获取磁盘分区信息
  • 011-mac自带vnc
  • leetcode——二叉树的最大深度(java)
  • Selenium 浏览器操作与使用技巧——详细解析(Java版)
  • 8. 网络编程
  • 鸢尾花书01---基本介绍和Jupyterlab的上手
  • 杨立昆退休?中国Deepseek超Llama 4触发Meta
  • 单片机基础模块学习——超声波传感器
  • Python的那些事第五篇:数据结构的艺术与应用
  • 【redis】redis操作zset类型的key发生了什么?
  • 企业知识管理平台助力企业创新与竞争力提升的有效策略探讨
  • 网关登录校验
  • Qwen2.5-max 性能
  • JAVA实战开源项目:网上超市系统(Vue+SpringBoot) 附源码
  • 蓝桥备赛指南(5)
  • TCP 握手数据包分析
  • 「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)
  • 【自学笔记】计算机网络的重点知识点-持续更新