TCP/IP协议—TCP

TCP/IP协议—TCP

  • TCP协议
    • TCP通信特点
    • TCP技术概念
    • TCP定时器
  • TCP头部报文
  • TCP连接
    • 三次握手(建立连接)
    • 四次挥手(释放连接)
    • 连接状态

TCP协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的协议,提供了可靠的数据传输服务,通过序列号、确认机制、重传等机制实现数据的顺序和完整性。应用层很多通信协议都基于TCP进行传输,比如HTTPMQTT等。
TCP协议源文档

TCP通信特点

  • 面向连接通信
  • 可靠通信方式
  • 面向字节流
  • 在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销
  • 通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点

为了满足上述特点,TCP协议作了以下规定
数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组。
到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认。
超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片。
滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出。
失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据。
数据校验:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,TCP将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。

TCP技术概念

MTU:Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小,以普遍使用的
以太网为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 Byte需要发送,只需要一个IP包就可以完成发送任务,如果IP层有>=1500 Byte数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同

MSS:Maximum Segment Size,TCP提交给IP层最大分段大小,不包含TCP Header和TCP Option,只包含TCP Payload,MSS是TCP用来限制application层最大的发送字节数,如果底层物理接口MTU=1500 Byte,则MSS=1500-20(IP Header)-20(TCP Header)=1460 Byte(MSS),如果application有2000 Byte发送,则需要两个Segment才可以完成发送,第一个TCP Segment=1460,第二个TCP Segment=540

RTO:Retransmission Time Out,重传超时时间,TCP超时与重传中一个很重要的部分是对一个给定连接的往返时间(RTT)的测量,由于网络流量的变化,这个时间会相应地发生改变,TCP需要跟踪这些变化并动态调整超时时间RTO

RTT:Round Trip Time,一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值,由三部分组成:链路的传播时间,接收端的处理时间,返回到发送端的时间

MSL:Maximum Segment Lifetime,指明TCP报文在Internet上最长生存时间,每个具体的TCP实现都必须选择一个确认的MSL值。建议是2分钟。

拥塞窗口:拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如果再考虑到接收方的接收能力,那么发送窗口还可能小于拥塞窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减少一些,以减少注入到网络中的分组数

滑动窗口:一个TCP连接发送端在某个时刻能发多少数据是由滑动窗口控制的,而滑动窗口的大小实际上是由两个窗口共同决定的,一个是接收端的通告窗口,也就是TCP头部中的Window Size,会随着ACK报文发送给发送端,发送端必须保证发送的数据不超过这个剩余的空间以免造成缓冲区溢出。另一个窗口是发送端的拥塞窗口。滑动窗口的大小就是通告窗口和拥塞窗口的较小值。

慢启动:在拥塞窗口大小指数增大到一定程度后,遇到网络拥塞会造成丢包,一旦出现此类问题,拥塞窗口就会迅速减小,以便网络能够缓过来。

拥塞避免:在拥塞窗口达到一定程度后,减慢增大的速度,从指数增大改变为线性增大。

TCP定时器

连接建立定时器:connection-establishment timer,连接请求发送后启动,75秒内没有得到确认则会关闭连接。
重传定时器:retransmission timer,在TCP发送数据后启动,超时后没有得到确认的数据将会被重传,定时器重新启动。定时器取值根据重传次数和RTT时间动态变化,取值范围在1~64秒之间。若定时器13次超时后仍得不到确认,连接将被终止。
延迟应答定时器:delayed ACK timer,在用户数据量少且次数多的情况下(等数据发完后一起确认,减少网络开销),在TCP收到需要确认,但可以延迟确认的数据后启动。取值为200ms,如果200ms内有数据发送,则随数据一起发送,否则在200ms后单独发送。
坚持定时器:persist timer,在对端Window Size为0时启动,在定时器超时后发送一字节数据的报文探测对端接收缓存是否有空间(Window Szie不为0)。坚持定时器采用退避算法取值,取值范围在5~64秒之间。
保活定时器:keepalive timer,在连接长时间空闲时启动,在空闲2小时后会超时并且发送探测报文,判断对端是否存在,超时后会重启并取值75秒,如果超过8次后仍未得到确认,则连接被终止。
FIN_WAIT_2定时器:FIN_WAIT_2 timer,在进入FIN_WAIT_2状态后启动,退出FIN_WAIT_2状态后停止。FIN_WAIT_2定时器第一次取值10分钟,超时重启,取值75秒,再次超时后强行终止连接。
TIME_WAIT定时器:TIME_WAIT timer or 2MSL timer,在进入TIME_WAIT状态启动,取值为2MSL(最大值)。

TCP头部报文

在这里插入图片描述
TCP头部大小为20个字节(不包含任何TCP选项)
(1)TCP端口号
包括源端口号和目标端口号,大小为各2个字节

  • 源端口号:source port,发送方端口号。
  • 目标端口号:destination port,接收方端口号。

(2)TCP序列号
Sequence Number,保证TCP传输数据的顺序性。序号标识了从TCP发送端到TCP接收端单向发送的数据字节流(同一时间两个方向的序号不一定相同),TCP用序号对每个字节进行计数,比如现在序列号为1000,发送了1000,下一个序列号就是2000。序号是一个32位的无符号数,达到最大值后会重新从0开始。
(3)TCP确认号
Acknowledgment Number,保证TCP传输数据的可靠性。确认号用于响应TCP报文。
(4)TCP头部大小
Header Length,大小为4位,单位为4个字节。因此,TCP头部大小范围为20~60(15*4)个字节,没有任何选项字段的TCP头部长度为20字节,最多可以有60个字节的TCP头部。
(5)TCP预留位
Reserved,预留位,数据都为0,大小为4位。
(6)TCP控制位

  • CWR:Congestion window reduced,拥塞窗口减少。拥塞窗口减少标志被发送主机设置,用来表明它接收到了设置ECE标志的TCP包。拥塞窗口是被TCP维护的一个内部变量,用来管理发送窗口大小。
  • ECE:ECN-Echo,显式拥塞提醒回应。当一个IP包的ECN域被路由器设置为11时,接收端而非发送端被通知路径上发生了拥塞。ECN使用TCP头部来告知发送端网络正在经历拥塞,并且告知接收端发送段已经受到了接收端发来的拥塞通告,已经降低了发送速率。
  • URG:Urgent Pointer field significant,紧急位,当URG=1时,表示此报文段中有紧急数,是高优先级的数据,应尽快传送,不用再缓存里排队,配合紧急指针使用。
  • ACK:Acknowledgment fieldsignificant,确认位,当ACK=1时,表示确认号有效,TCP就是根据ACK号来告知对方是否收到了消息。
  • PSH:Push Function,推送位,当PSH=1时,表示接接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。
  • RST:Reset the connection,重置位,当RST=1时,表示TCP连接出现了严重错误(心跳包超时,连接超时等),必须释放连接,然后再重新建立传输连接。
  • SYN:Synchronize sequence numbers,同步位,当SYN=1时,表示是一个连接请求/连接请求接收报文。
  • FIN:No more data from sender,终止位,当FIN=1时,表示此报文发送方数据已发送完毕,要求释放连接。

(7)TCP窗口大小
Window size,指发送该报文时接收缓冲区的空闲空间大小,因此是动态的,主要用于进行流量控制,解决流控拥塞问题。总共占2个字节。
(8)TCP校验和
TCP Checksum,对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。TCP的校验方法和IP相同-算数和求补,不同的是IP只校验报文头部,TCP校验整个报文。总共占2个字节。
(9)TCP紧急数据指针
Urgent Pointer,只有当URG标志为1时才有效,紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
(10)TCP选型

TCP连接

在这里插入图片描述

三次握手(建立连接)

第一次握手:客户端给服务端发送建立TCP连接的请求报文,报文中SYN同部位置1,表示这是一个建立连接报文。报文中seq序列号是随机生成的整数。同时客户端进入同步已发送状态(SYN-SENT)。
第二次握手:服务端返回请求应答报文,报文中SYN同部位置1,表示这是一个建立连接报文。报文中seq序列号是随机生成的整数。报文中ack为请求报文的seq+1,表示对请求已经收到。同时服务端进入同步已接收状态(SYN-RCVD)。同时客户端进入连接已建立状态(ESTABLISHED)。
第三次握手:客户端对服务端的回复发送应答报文,报文中SYN同部位置1,表示这是一个建立连接报文。报文中seq是请求报文的seq+1,表示对哪次连接请求的确认。报文中ack为服务端请求应答报文的seq加1,表示收到服务器的应答对确认连接的建立。同时服务端进入连接已建立状态(ESTABLISHED)。

四次挥手(释放连接)

第一次挥手:客户端给服务端发送释放连接的请求报文,报文中FIN终止位置1,表示这个一个释放连接报文。报文中的seq和ack在前面数据交互的基础上+1。同时客户端进入FIN_WAIT_1状态。
第二次挥手:服务端给客户端返回释放应答报文,报文中FIN终止位置1,表示这个一个释放连接报文。报文中ack为释放请求报文的seq+1,表示收到释放连接请求。同时服务端进入CLOST_WAIT状态。客户端进入FIN_WAIT_2状态。
第三次挥手:服务端等待一段时间,以处理客户端发过来的数据后,发送释放报文给客户端,报文中FIN终止位置1。seq为释放报文的ack值。同时服务端进入LAST_ACK状态。
第四次挥手:客户端收到服务端发送的FIN报文后,向服务端发送ACK报文作为确认,ack为FIN报文seq+1。同时客户端进入TIME_WAIT状态。服务器端接收到ACK报文后会变成CLOSED状态,客户端等待一段时间后,如果服务端没有数据返回,也会变成CLOSED状态

连接状态

LISTEN:监听状态,服务端状态,等待客户端TCP 连接请求。

SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。如果75秒内得不到确认,连接将被关闭。

SYN_RECEIVED:发送连接请求并且接收到后等待连接请求确认。

ESTABLISHED:表示一个打开的连接,连接的数据传输阶段的正常状态。

FIN_WAIT_1:等待对端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

FIN_WAIT_2:等待对端TCP 的连接终止请求。

CLOSE_WAIT:等待的连接终止请求。

LAST_ACK:等待先前发送给对端TCP 的连接终止请求的确认

TIME_WAIT:等待以确保对端TCP 接收到它的连接终止请求的确认。

学习笔记,有问题欢迎指出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545384.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《柳叶刀》子刊:突破性临床试验,证实粪菌移植治疗帕金森病的潜力

帕金森病&#xff08;Parkinson’s Disease&#xff0c;PD&#xff09;&#xff0c;是一种复杂的神经退行性疾病&#xff0c;也是世界上第二常见的神经退行性疾病&#xff0c;仅次于阿尔茨海默病&#xff08;AD&#xff09;&#xff0c;影响着约1%-2%的65岁及以上老人。随着全球…

Ribbon-负载均衡原理解析(案例)

简介&#xff1a;负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行&#xff0c;例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等&#xff0c;从而协同…

明厨亮灶厨师帽佩戴检测的难点与优化方式 Yolov5+bytetrack

随着国家一系列食品安全政策的出台&#xff0c;厨房的安全卫生问题逐渐被人们重视。其中&#xff0c;工作人员是否佩戴厨师帽是很关键的一环。人们希望能通过一种方式实现自动化的检测&#xff0c;但目前市场上大部分“明厨亮灶系统”或“未佩戴厨师帽检测系统”都无法满足用户…

【UE5.1】使用MySQL and MariaDB Integration插件——(1)连接MySQL

效果 步骤 1. 在虚幻商城下载“MySQL and MariaDB Integration”插件 2. 购买安装后&#xff0c;我们将插件添加到一个新工程中&#xff0c;打开新工程可以看到已经添加了插件 3. 新建一个蓝图&#xff0c;选择父类为“MySQLDBConnectionActor” 这里命名为该蓝图为“BP_MySQL…

腾讯测试岗位的面试经历与经验分享【一面、二面与三面】

腾讯两个月的实习一转眼就结束了,回想起当时面试的经过,感觉自己是跌跌撞撞就这么过了,多少有点侥幸.马上腾讯又要来校招了,对于有意愿想投腾讯测试岗位的同学们,写了一些那时候面试的经历和自己的想法,算不上经验&#xff0c;仅供参考吧! 一面 — —技术基础&#xff0c;全面…

linux 自定义命令/别名

参考资料 Linux(Ubuntu)自定义命令的使用Linux/Ubuntu系统自定义Shell命令Ubuntu/Linux 操作系统 自定义命令 目录 一. 为路径取别名二. 修改.profile文件2.1 .profile简介2.2 需求2.3 修改.profile文件 三. 创建软链接 一. 为路径取别名 ⏹需求&#xff1a;有一个work文件夹…

API网关工具Kong或nginx ingress实现对客户端IP的白名单限制,提高对外服务的访问安全

一、背景 部署在生产环境的应用&#xff0c;供内部服务调用外&#xff0c;还需要暴露外网访问。 比如consul ui管理界面&#xff0c;我们需要给到开发和测试人员&#xff0c;观察服务的注册情况。 再比如前端页面和后端接口在一起的服务&#xff0c;后端接口供内部服务接口调用…

蓝桥杯备赛刷题——css

新鲜的蔬菜 这题需要使用grid 我不会 去学一下 一.什么是grid Grid 布局与 Flex 布局有一定的相似性&#xff0c;都可以指定容器内部多个项目的位置。但是&#xff0c;它们也存在重大区别。 Flex 布局是轴线布局&#xff0c;只能指定"项目"针对轴线的位置&#…

XTTS数据迁移方案

前置条件检查 XTTS使用限制较多&#xff0c;V3版本按照本节逐项检查 目标库操作系统不能是windows 源库&#xff1a;redhut 7.9 目标库&#xff1a;redhut 7.9 检查数据库时区&#xff08;两边都需要&#xff09; SQL> select dbtimezone from dual; 检查结果两边都一致…

自然语言处理NLP关键知识点

大家好&#xff0c;在人工智能出现之前&#xff0c;机器智能处理结构化的数据&#xff0c;例如 Excel 里的数据。但是网络中大部分的数据都是非结构化的&#xff0c;例如文章、图片、音频、视频等。在非结构数据中&#xff0c;文本的数量是最多的&#xff0c;他虽然没有图片和视…

Compose UI 之 Card 卡片组件

Card Card 是用于显示带有圆角和可选阴影的矩形内容容器。它通常用于构建用户界面,并可以包含标题、文本、图像、按钮等元素,表示界面上的可交互元素,我们称它是 “卡片”。 Card 使用的一些经典的场景: 列表数据,例如 新闻列表,产品列表等。信息提示框,使用 Card 组件…

升级win11后无线鼠标失灵,win11鼠标用不了

鼠标失灵是常见的设备故障问题,今天带来相关的解决方法,本文主要是针对升级win11后无线鼠标失灵的处理方法。不少小伙伴在使用电脑的过程中,都遇到过鼠标移动缓慢或者动不了的情况,升级到win11系统的小伙伴也不例外。一般刚升级新系统后,才出现的鼠标失灵问题,那么可能会…

计算机网络——网络地址转换(NAT)技术

目录 前言 前篇 引言 SNAT&#xff08;Source Network Address Translation&#xff09;源网络地址转换 SNAT流程 确定性标记 DNAT&#xff08;Destination Network Address Translation&#xff0c;目标网络地址转换&#xff09; NAT技术重要性 前言 本博客是博主用于…

SENet模型原理及代码介绍

一.模型简介&#xff1a; SENet的全称叫Squeeze-and-Excitation Networks&#xff08;挤压-激励网络&#xff0c;简称SENet&#xff09;&#xff0c;于2017年提出&#xff0c;并拿下了当年的ImageNet分类比赛的冠军。ResNet是2015年ImageNet的冠军&#xff0c;2016年ResNeXt&am…

暖宝轻工机械有限公司现已加入2024第13届生物发酵展

参展企业介绍 公司坐落于富饶的长江三角洲&#xff0c;美丽的瓯越山水---温州&#xff0c;成立20多年来&#xff0c;专业从事换热器新品研发、应用设计、生产制造、销售服务为一体的综合性生产企业。 公司致力于食品、饮料、果酒、制药、暖通、化工等行业领域的加热冷却、蒸发…

Magnet AXIOM 7.8 Windows Multilingual - 数字取证与分析

Magnet AXIOM 7.8 Windows Multilingual - 数字取证与分析 Digital Forensic Software 请访问原文链接&#xff1a;https://sysin.org/blog/magnet-axiom/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 恢复并分析一个案件中…

商业照明专用SLM211A系列24V,15mA到200mA支持PWM调光功能的线性恒流LED驱动芯片

SLM211A系列SLM211AAC-7GTR--SOT23-6&#xff0c;SLM211ACB-13GTR--SOP8-EP是用于产生单通道、高精度恒流源的 LED 驱动芯片&#xff0c;在各种 LED 照明产品中非常简单易用。SLM211A 具有宽输入电压范围、高输出精度、超低 drop-out 压降、卓越的线性/负载调整率等特性&#x…

Python中的list()和map() 用法

list() 在Python中&#xff0c;list() 是一个内置函数&#xff0c;用于创建列表&#xff08;list&#xff09;对象。它有几个不同的用途&#xff0c;但最常见的是将一个可迭代对象&#xff08;如元组、字符串、集合或其他列表&#xff09;转换为一个新的列表。 以下是一些使用…

理解计算中的随机性与伪随机性:Avi Wigderson的理论计算科学贡献

目录 前言1 随机性和伪随机性在计算中的角色2 随机性的动态理解3 伪随机性的应用4 理论到实践的应用结语 前言 近期&#xff0c;普林斯顿大学数学教授Avi Wigderson荣获了2023年图灵奖&#xff0c;以表彰他在理论计算机科学领域的杰出贡献。他的研究聚焦于计算复杂性理论&…

ODI(境外投资备案)作用、类别和申请流程详解

中国企业越来越多地选择在境外进行投资&#xff0c;而国家相关部门也出台了多项政策以规范这一行为。在进行海外投资前&#xff0c;企业必须在政策指导下进行合法操作并办理相应手续&#xff0c;其中ODI&#xff08;境外投资备案&#xff09;是其中一种最常见的方式之一。 以…