TCP 完整总结

概述

TCP/IP 是网络使用中最基本的通信协议,它规定了互联网中进行通信的标准和方法。其中它包含TCP、UDP、SMTP、IP 等绝大多数协议,因为 TCP、IP 协议最具代表,因此才命名为 TCP/IP 协议。本篇博客我就来简单整理 TCP 协议相关知识


TCP

TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。本篇博客我打算分以下几个模块介绍 TCP 协议:

  • TCP 协议的结构
  • 三次握手与四次挥手
  • TCP 协议如何保证可靠性
  • TCP 协议如何保证性能
  • TCP 常见问题
  • 总结

TCP 协议的结构

TCP 的结构如下图所示:
TCP 结构
其中数据经过传输层会被封装为这种格式:
数据格式
简单来说,根据 OSI 7层协议,数据从顶层应用层到底层物理层,每一层都会添加部分标识,最终拼装成实际发送的数据。接受端接受到数据后,自底向上经过层层解析后,最终将数据输出给对应的上层应用。关于这块的详细内容后面我们出博客专门介绍,本篇主要聚焦到 TCP 协议内容上。

下面我们主要看 TCP 各结构模块的实际功能:

  • 源端口、目的端口:记录数据从哪个端口发送到哪个端口(端口就可以对应到上层应用),各占两字节。
  • 序号(seq):TCP 传输过程中,每个字节都包含对应的序号。这里记录 TCP 数据包第一个字节对应的序号,占四字节。
  • 确认号(ack):是期望收到对方的下一个报文段数据的第一个字节的序号,占四字节。
  • 数据偏移:记录具体传输数据起始首部到 TCP 报文段首部的距离,占4 bit。
  • 保留:顾名思义,保留为以后使用,占6 bit。
  • URG:标识该数据包是否包含紧急数据,如果该值为1,说明此数据为紧急数据,需要优先传输(提高优先级)。
  • ACK:标识确认号是否有效,如果该值为1,说明确认号有效。
  • PSH:标识数据是否需要快速处理,如果该值为1,提示消息接收端迅速将消息从缓冲区读走。
  • RST:标识连接是否需要重新建立,如果该值为1,说明 TCP 连接出现异常,需要断开连接后重连。
  • SYN:标识连接建立请求,如果该值为1,表示该数据包是一个连接请求或连接确定请求。
  • FIN:标识连接断开请求,如果该值为1,表示发送方数据已发送完毕,提示服务端断开连接。
  • 窗口:主要控制对方发送的数据量,通过该字段告诉另一端自己所能接收的数据上限。
  • 校验和:校验 TCP报文头和数据是否正常。
  • 紧急指针:标识哪部分数据属于紧急数据
  • 选项:用于保存附加信息
  • 填充:填充数据,确保数据报头的长度是四字节的整数倍。

三次握手与四次挥手

TCP 规定在客户端和服务端建立连接后进行数据交互,其中建立连接需要经过三次握手:
三次握手
三次握手建立的连接,一方必须是主动打开,另一方被动打开。下面我们假设主动打开的一方是客户端,被动打开的一方为服务端:

  1. 开始三次握手前,客户端主动结束 CLOSE 状态。服务端被动打开,结束 CLOSE 状态,进入 LISTEN 状态

  2. 客户端向服务端发送报文段(SYN = 1,seq = X),随后客户端进入 SYN-SENT 状态

    • SYN = 1:表示该数据包是建立连接请求
    • seq = X:客户端发送消息的序号
  3. 服务端收到客户端的报文后,结束 LISTEN 状态并返回报文段(SYN = 1,ACK = 1,seq = Y,ack = X + 1)发送完毕后进入 SYN-RCVD 状态。

    • SYN = 1:表示该数据包是建立连接请求
    • ACK = 1:表示服务端返回消息的确认号有效
    • seq = Y:服务端发送消息的序号
    • ack = X + 1:表示服务端收到 seq = X 的报文段,并将它的值加一作为自己的确认号返回
  4. 客户端收到服务端回复的报文后确定从客户端到服务端的传

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值