博客
关于我
[编程] TCP协议概述
阅读量:658 次
发布时间:2019-03-15

本文共 1045 字,大约阅读时间需要 3 分钟。

TCP 协议概述

TCP 协议是互联网中最为广泛使用的面向连接的协议之一,提供了一种可靠的数据传输服务。以下是关于TCP协议的详细介绍。

TCP 的基本特性

TCP(Transmission Control Protocol)提供面向连接、可靠的字节流服务。两个应用程序通过TCP连接交换8位字节构成的字节流。每个TCP连接由源端IP地址、目标IP地址及对应的端口号唯一确定。

TCP 保证可靠性

TCP协议通过以下机制确保数据的可靠传输:

  • 将应用数据分割成适当大小的数据块进行发送
  • 发出数据后启动定时器,等待对方的确认。如果未收到确认,会重发数据
  • 收到数据后发送确认
  • 保持检验和(检验和用于确保数据完整性)
  • 对收到的数据进行重新排序
  • 提供流量控制机制,防止数据过快发送
  • TCP 连接的建立与关闭

    TCP连接可以分为三个主要状态:建立连接、数据传输和关闭连接。

    连接建立过程

  • 客户端发送SYN报文,指定随机的序号
  • 服务器接收SYN报文后,返回SYN-ACK报文,并指定自己的随机序号
  • 客户端接收SYN-ACK报文后,发送ACK确认报文,最终完成连接建立
  • 连接关闭过程

  • 其一方发送FIN报文,标志着数据传输结束
  • 对方接收FIN报文,并返回ACK确认报文
  • 双方按照 tearDown的逻辑完成四次握手,最终状态变为CLOSED
  • TCP连接的状态转换

    TCP连接的状态机如下:

    • 客户端

      • CLOSED:处于初始状态
      • SYN_SENT:发送SYN报文
      • ESTABLISHED:连接已建立
      • FIN_WAIT_1:等待对方发回FIN报文
      • FIN_WAIT_2:发送ACK报文后等待对方确认
      • TIME_WAIT:等待时间超时
      • CLOSED:连接关闭
    • 服务器

      • CLOSED:处于初始状态
      • LISTEN:侦听连接请求
      • SYN_RECEIVED:接收SYN报文
      • ESTABLISHED:连接已建立
      • CLOSE_WAIT:等待客户端发回FIN报文
      • LAST_ACK:等待客户端确认
      • CLOSED:连接关闭

    长连接与短连接

    • 长连接:允许双方在一个连接上发送多个数据包,若无数据传输,需发送链路检测包以确保连接保持。
    • 短连接:连接仅用于发送单个数据包,完成后立即断开。适用于每次通信独立。

    ulimit -a 限制分析

    ulimit -n 用于限制进程能打开的文件描述符最大数目。在Linux系统中,每个网络连接对应的文件描述符受此限制影响。因此,使进程能打开的最大套接字数受到限制,可以影响TCP连接的并发处理能力。

    转载地址:http://rsnmz.baihongyu.com/

    你可能感兴趣的文章
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>