在TCP协议中,为了确保数据能稳定发送,协议使用数据包中的syn,ack两个字段来监控数据是否正确发生和接收,本节我们看看这两个字段如何保证数据的平稳传输。

假设客户端和服务器通过三次握手建立了连接,然后双方准备互相发生数据。假设握手时客户端将自己的syn字段设置为0,而服务器将自己的syn字段设置为240,于是当服务器收到客户端的SYN包后,在返回的ACK+SYN数据包中,它附带的ack字段就会设置为1,也就是说服务器认为客户端下次发送数据时,数据包包含的syn字段应该设置为1。当客户端收到服务器的ACK+SYN数据包后,返回的ACK数据包中会将ACK字段设置为241,也就是说客户端认为服务器下次发送的数据对应的SYN编号为241.

我们假设数据包最大发送字节数为536字节,因此任何一方想发送超过这个长度的数据时,TCP会将数据切分成多个不超过536字节的小块。假设客户端先发起请求,数据包中的数据是140字节,假设客户端和服务器的滑动窗口大小都是361,由于已经发送了140字节的数据,窗口内还剩220字节数据可以发送,于是不等服务器回应,客户端继续将剩下的220字节数据发送给服务器,注意这时候客户端会将数据包中的SYN字段设置为141,如此表明当前数据要跟在上次发送的140字节数据后面,如果包含220字节的数据包比包含140字节的数据包先抵达服务器端,那么服务器就可以通过syn字段得知哪个包的数据在前哪个包的数据在后面。

假设服务器收到了客户端发来的140字节数据包,此时它发送TCP数据包给客户端,其中包含80字节的数据,此时它的syn字段要设置成241,同时ack字段要设置成141,也就是告诉客户端140字节成功收到,让它发送跟着在140字节后面的数据。此时客户端收到服务器回发的数据包,读取syn字段发现其值为141,这时客户端就知道发出的140字节数据服务器已经收到,这时候它就能把自己的移动窗口向后挪动140字节。如果此时客户端没有数据要发送,那么它会回发一个ACK包里面的ack字段设置为321,这相当于告诉服务器80字节的数据收到,请继续发送80字节后面的数据。

接下来服务器继续向客户端发送120字节数据,此时数据包中syn字段设置为321,当客户端收到这个该数据包后,回复ACK包给服务器并且将其中的ack字段设置为321+120=441,告诉服务器120字节的数据成功接收,此时服务器就可以后移窗口120字节。接下来服务器继续发送160字节数据,此时包头的syn字段设置为441,一旦客户端收到数据包后,它会构造一个ACK包,将其中的ack字段设置为441+160=601发回给服务器,告诉它成功接收到数据,当服务器接收到客户端的ACK包后,自己的所有数据都发送完毕,于是连接关闭阶段,整个数据发送过程可由下图表示:

这个过程看起来蛮复杂,实际上TCP协议运行的过程比当前描述要复杂得多,因为它必须处理多种意外情况。上面描述的通讯过程是”一问一答“,事实上客户端可能一下子像服务器发送多个请求,服务器可以一下子回复多个数据包,同时服务器或客户端发送的ACK包中可能还会包含数据等。

其次一个ACK包可以同时回复前面多个数据包。服务器可以同时将120字节和160字节数据包发送给客户端,客户端只要用ack字段为601的ACK包回复给服务器端即可。同时根据双方各自情况还会有”流控制“,也就是一方要求另一方减少或增加一次数据包的数据量从而减缓接收压力或提升接收效率。此外数据包在发送过程中可能会丢失,这时就需要出发重传机制,同时TCP协议还需实时监测是否有网络拥堵,一旦这种情况出现TCP就得启动相应的应对机制等。

TCP协议异常复杂,因为它为了保障数据稳定传输同时还得面对各种意外网络情况,对于其他重要的协议细节,我们会在后续课程中继续介绍。

更详细的讲解和代码调试演示过程,请点击链接

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
[外链图片转存失败(img-eXUZoEVh-1569400512839)(http://upload-images.jianshu.io/upload_images/2849961-d584a529f20a04da?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

详解TCP数据包中SYN,ACK字段与数据发送的关联相关推荐

  1. 详解TCP三次握手的首次握手协议数据

    我们之前学习计算机网络,都会提到TCP的三次握手.四次挥手,相信不少小伙伴都能简单描述但一直似懂非懂.那么双方主机到底是如何进行协议交互的?今天带领大家从二进制协议数据层面进行深入分析. 一.环境准备 ...

  2. ROS:bag数据包内容提取——雷达点云数据和imu数据

    通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...

  3. TCP/IP详解--TCP传输小数据包效率问题

    摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的.如果在设计方案中不对TCP数据包的 延迟应答,Nagle算法,Winsock缓冲作用引起重视,将会严重影响程序的性能.这篇文章讨论了这些 问 ...

  4. 探秘TCP数据包中的PSH标志

    今天在用wireshark分析TCP数据包的时候,发现一个特别的标志,PSH,和ACK一块使用的,不太了解,所以查了一下,发现大部分的解释都是不外乎表示这个包是带数据的,发送端告诉接收端,这个数据包以 ...

  5. 详解TCP协议(四)——传输中的流量控制

    文章目录 一.流量控制是什么 二.理解TCP流量控制基础 2.1发送缓存与接收缓存 2.2TCP报文结构中接收窗口字段 2.3滑动窗口协议基础 三.综合应用层.套接字及滑动窗口协议的具体步骤 四.总结 ...

  6. 详解 TCP/IP 协议

    什么是TCP/IP协议 TCP/IP通信协议是目前最完整.最被广泛支持的通信协议,它可以让不同网络架构.不同操作系统的计算机之间通信,是Internet的标准通信协议. TCP的介绍 TCP也叫传输控 ...

  7. 详解 TCP 连接的“三次握手”与“四次挥手”

    详解 TCP 连接的"三次握手"与"四次挥手" 前言 TCP的三次握手(Three-Way Handshake) 1."三次握手"的详解 2 ...

  8. Linux网络编程---详解TCP

    Linux网络编程---详解TCP的三次握手和四次挥手_shanghx_123的博客-CSDN博客_tcp的协议数据单元被称为 TCP协议详解(TCP报文.三次握手.四次挥手.TIME_WAIT状态. ...

  9. 详解 TCP 和 UDP的概念、特点和区别

    文章目录 前言 TCP TCP 连接和断开 TCP 协议的特点 UDP UDP 协议的特点 UDP 协议的适用场合 TCP和UDP的比较 TCP和UDP的使用场景 参考 前言 TCP 和 UDP都是传 ...

  10. 详解BLE 空中包格式—兼BLE Link layer协议解析

    BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(pa ...

最新文章

  1. openJDK与JDK的区别
  2. UILable文字不居中问题
  3. Oracle中用一个序列给两个表创建主键自增功能的后果
  4. python opencv imread()函数 (从文件加载图像)
  5. java做条形图_使用Jfree实现吧条形图,java代码
  6. laravel框架——composer导入laravel
  7. python单词词典_python:单词和词形词典
  8. 网易视频云:搜索意图识别浅析
  9. MyBatis 的一级缓存与二级缓存
  10. 淘宝SDK高级模板,设计师模块开放接口详解
  11. Flink Interval Join Left Join
  12. 格拉姆角场(GAF)学习记录
  13. mysql错误1273_mysql8 参考手册--错误代码1273-1294
  14. 19-Python基础知识学习-----迭代器与生成器
  15. lol最克制诺手的英雄_LOL诺手怎么打如何克制诺手 什么英雄好打诺手
  16. Libuv的安装及运行使用
  17. LeetCode(中等)买卖股票的最佳时机含手续费(c#)
  18. 构造IOCTL命令的学习心得-----_IO, _IOR, _IOW, _IOWR 幻数的理解
  19. python数据字典ppt_[关系型数据库][MySQL]用python快速导出数据字典
  20. openxml操作word的基本应用

热门文章

  1. Stemming and lemmatization
  2. 性能工具之stress工具使用教程(带源码说明)
  3. 【程序员读论文】题外篇:怎么读论文
  4. SQL Server 由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN xxx 失败问题解决
  5. 韩国严厉监管元宇宙相关企业
  6. GEO数据挖掘(学习笔记)
  7. 解决SpringCloud客户端启动报错:“Field XXX required a bean of type XXX that could not be found”
  8. 最新鲸发卡企业发卡网系统源码+免授权
  9. Android实现淘宝购物车
  10. c语言题目关于欧姆定律,电压_电流_电阻_欧姆定律计算含答案.doc