0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解TCP协议

CHANBAEK 来源:嵌入式攻城狮 作者:嵌入式攻城狮 2023-04-21 12:36 次阅读

TCP协议深入

TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输

1. 序列号+确认应答

在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做确认应答(ACK); 序列号是按照顺序给发送数据的每一个字节都标上号码的编号。 接收端查询接收数据TCP首部中的序列号和数据的长度,将自已下一步应该接收的序号作为确认应答返送回去

图片

2. 重发超时

重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔,如果超过了这个时间仍未收到确认应答,发送端将进行数据重发。 理想的重发超时具体时长是找到一个最小时间,它能保证确认应答一定能在这个时间内返回

图片

数据也不会无限、反复地重发。 达到一定重发次数后,若仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接,并通知应用通讯异常强行终止

3. 连接管理

为了准确无误地将数据送达目标处,TCP协议采用了 三次握手 (three-way handshaking)策略。 用TCP协议将数据包送出去后,TCP一定会向对方确认是否成功送达。 若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的顺序包。 而 四次挥手 (Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开

图片

三次握手,即建立连接

第一次握手:客户端发送一个带SYN标志的TCP报文到服务器。 这是三次握手过程中的段1

第二次握手:服务器端回应客户端,是三次握手中的第2个报文段,同时带ACK标志和SYN标志。 它表示对刚才客户端SYN的回应; 同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯

第三次握手:客户必须再次回应服务器端一个ACK报文,这是报文段3

数据传输

客户端发出段4,包含从序号1001开始的20个字节数据。

服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数据,这称为piggyback。

客户端发出段6,对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号8011开始的数据

四次挥手,即关闭连接

第一次挥手:客户端发出段7,FIN位表示关闭连接的请求

第二次挥手:服务器发出段8,应答客户端的关闭连接请求

第三次挥手:服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求

第四次挥手:客户端发出段10,应答服务器的关闭连接请求

下图是一次完整的三次握手、数据传输以及四次挥手的wireshark抓包测试

图片

4. 流控制

在建立TCP连接时,可以确定发送数据包的单位,即最大消息长度(MSS:Maximum Segment Size)。 MSS是在三次握手的时候,在两端主机之间被计算得出的。 两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自已的接口能够适应的MSS大小,然后会在两者之间选择一个较小的值投入使用

TCP以一个段为单位,若每发一个段进行一次确认应答的处理,会导致往返时间较长通信性能较低。 为了解决该问题,引入了窗口这个概念,使得确认应答不再是以每个分段,而是以更大的单位进行确认

窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。 这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。 在收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置,就可以顺序地将多个段同时发送以提高通信性能。 这种机制也被称为滑动窗口控制

图片

上图就是一个滑动窗口控制实例,其详细流程见如下分析:

发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。 接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6K。 发送端应答,三方握手结束。

发送端发出段4-9,每个段带1K的数据,发送端根据窗口大小知道接收端的缓冲区满了,因此停止发送数据。

接收端的应用程序提走2K数据,接收缓冲区又有了2K空闲,接收端发出段10,在应答已收到6K数据的同时声明窗口大小为2K。

接收端的应用程序又提走2K数据,接收缓冲区有4K空闲,接收端发出段11,重新声明窗口大小为4K。

发送端发出段12-13,每个段带2K数据,段13同时还包含FIN位。

接收端应答接收到的2K数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2K。

接收端的应用程序提走2K数据,接收端重新声明窗口大小为4K。

接收端的应用程序提走剩下的2K数据,接收缓冲区全空,接收端重新声明窗口大小为6K。

接收端的应用程序在提走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。

下图是一次完整的滑动窗口控制实例的wireshark抓包分析:

开启以socket客户端,发送2593个字节的数据到开发板

图片

使用wireshark抓包工具,抓取完整的收发过程

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据传输
    +关注

    关注

    9

    文章

    1882

    浏览量

    64573
  • 服务器
    +关注

    关注

    12

    文章

    9141

    浏览量

    85381
  • 主机
    +关注

    关注

    0

    文章

    993

    浏览量

    35123
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1353

    浏览量

    79064
  • TCP协议
    +关注

    关注

    1

    文章

    91

    浏览量

    12070
收藏 人收藏

    评论

    相关推荐

    TCP/IP协议包括哪些协议 详解TCP/IP协议

    TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。
    发表于 07-21 09:56 1.2w次阅读
    <b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>包括哪些<b class='flag-5'>协议</b> <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b><b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>

    TCP-IP详解_卷3_TCP事务协议,HTTP,NNTP

    TCP-IP详解_卷3_TCP事务协议,HTTP,NNTP和UNIX域协议
    发表于 03-24 22:42 39次下载

    TCP-IP详解_卷1_协议

    TCP-IP详解_卷1_协议
    发表于 03-24 22:45 50次下载

    TCP/IP详解,卷3:tcp事务协议等(pdf电子书)

    TCP/IP详解,卷3:tcp事务协议等(pdf电子书):第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握的四个基本方
    发表于 08-06 08:54 505次下载

    tcp ip协议详解卷三 下载

    tcp ip协议详解卷三:第三卷的内容细节覆盖了当今TCP/IP编程人员和网络管理员必须熟练掌握的四个基本方面:    T/
    发表于 05-19 11:52 437次下载
    <b class='flag-5'>tcp</b> ip<b class='flag-5'>协议</b><b class='flag-5'>详解</b>卷三 下载

    tcp ip协议详解

    tcp ip协议详解:《TCP/IP详解,卷1:协议
    发表于 05-19 12:02 712次下载

    tcp ip协议_什么是tcp ip协议

    什么是tcp ip协议tcp ip协议详解,深刻讲述了tcp ip
    发表于 05-14 16:29 6034次阅读
    <b class='flag-5'>tcp</b> ip<b class='flag-5'>协议</b>_什么是<b class='flag-5'>tcp</b> ip<b class='flag-5'>协议</b>

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNI

    TCP-IP详解卷3:TCP事务协议,HTTP,NNTP和UNIX域协议,个人收集整理了很久的资料,大家根据自己情况,有选择性的下载吧~
    发表于 10-27 14:04 0次下载

    TCP-IP详解卷2_ARP:地址解析协议

    TCP-IP详解卷2 ARP:地址解析协议,学习TCP很好的资料。欢迎下载。
    发表于 05-09 14:13 0次下载

    TCP:传输控制协议

    TCP-IP详解卷2 TCP:传输控制协议,学习TCP很好的资料。欢迎下载。
    发表于 05-09 14:33 0次下载

    详解TCP传输控制协议

    TCP(Transmission Control Protocol 传输控制协议)是种面向连接(连接导向)的、可靠的、 基于IP的传输层协议
    发表于 05-25 15:38 1599次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>详解</b><b class='flag-5'>TCP</b>传输控制<b class='flag-5'>协议</b>

    TCP协议与UDP协议的区别和相同点有哪些 看懂TCP协议与UDP协议的优缺点

    首先咱们弄清楚,TCP协议和UCP协议TCP/IP协议的联系,很多人犯糊涂了,直都是说
    的头像 发表于 05-26 14:35 9803次阅读
    <b class='flag-5'>TCP</b><b class='flag-5'>协议</b>与UDP<b class='flag-5'>协议</b>的区别和相同点有哪些 <b class='flag-5'>一</b><b class='flag-5'>文</b>看懂<b class='flag-5'>TCP</b><b class='flag-5'>协议</b>与UDP<b class='flag-5'>协议</b>的优缺点

    Siemens PLC TCP协议详解

    Siemens PLC TCP 协议详解 说明:蓝色文字表示已经破解部分,[红色文字] 表示对破解部分数字的说明,黑色文字表示对破解部分的进步说明,黑色斜体加粗文字表示未破解部分
    发表于 04-17 11:46 3次下载
    Siemens PLC <b class='flag-5'>TCP</b><b class='flag-5'>协议</b><b class='flag-5'>详解</b>

    LwIP协议栈源码详解TCP/IP协议的实现

    电子发烧友网站提供《LwIP协议栈源码详解TCP/IP协议的实现.pdf》资料免费下载
    发表于 07-03 11:22 3次下载

    了解TCP/IP协议

    TCP/IP协议是现代计算机网络通信的基础,是互联网及局域网广泛使用的协议TCP/IP协议
    的头像 发表于 08-07 15:38 1886次阅读
    <b class='flag-5'>一</b><b class='flag-5'>文</b>了解<b class='flag-5'>TCP</b>/IP<b class='flag-5'>协议</b>