TCP协议:

TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的 控制。TCP是相对可靠并不是绝对的安全。

TCP协议格式段

6位标志位: URG:紧急指针是否有效 ACK:确认号是否有效 PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走 RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段 SYN:请求建立连接;我们把携带SYN标识的称为同步报文段 FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段 16位窗口大小:后面再说 16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。此处的检验和不光 包含TCP首部,也包含TCP数据部分。

16位紧急指针:标识哪部分数据是紧急数据;

确认应答机制(安全机制):

每一个ACK都带对应的确认序列号,意思是告诉发送者,我们已经接受到了那些数据,接下来你要从哪里开始发。

超时重传机制(安全机制):

主机A发送给主机B数据后,可能因为网络拥堵等原因,数据无法到达主机B

如果主机A在一个特定的时间收到主机B发来的确认应答,就会进行重新发送

但是也有可能是因为B发送来的信息丢包,导致A没有收到

解决方案:

最理想的情况是,找到一个最小的时间,保证“确认应答在一定的时间能够返回”。

但是这个时间的长短,随着网络的环境,是有所差异的

如果设置的时间过长会影响效率

如果时间设置的太短,可能会重复发送

链接管理机制(安全机制):

在正常情况下TCP要进行三次握手,断开要进行四次挥手。

 服务端:

[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态,等待客户端连接;

[LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段),就将该连接放入内核等待队列 中,并向客户端发送SYN确认报文。

[SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文,就进入ESTABLISHED状 态,可以进行读写数据了。

[ESTABLISHED -> CLOSE_WAIT] 当客户端主动关闭连接(调用close),服务器会收到结束 报文段,服务器返回确认报文段并进入CLOSE_WAIT;

[CLOSE_WAIT -> LAST_ACK] 进入CLOSE_WAIT后说明服务器准备关闭连接(需要处理完之前 的数据);当服务器真正调用close关闭连接时,会向客户端发送FIN,此时服务器进入 LAST_ACK状态,等待最后一个ACK到来(这个ACK是客户端确认收到了FIN)

[LAST_ACK -> CLOSED] 服务器收到了对FIN的ACK,彻底关闭连接。

客户端:

[CLOSED -> SYN_SENT] 客户端调用connect,发送同步报文段;

[SYN_SENT -> ESTABLISHED] connect调用成功,则进入ESTABLISHED状态,开始读写数 据;

[ESTABLISHED -> FIN_WAIT_1] 客户端主动调用close时,向服务器发送结束报文段,同时进 入FIN_WAIT_1;

[FIN_WAIT_1 -> FIN_WAIT_2] 客户端收到服务器对结束报文段的确认,则进入FIN_WAIT_2, 开始等待服务器的结束报文段;

[FIN_WAIT_2 -> TIME_WAIT] 客户端收到服务器发来的结束报文段,进入TIME_WAIT,并发 出LAST_ACK;

[TIME_WAIT -> CLOSED] 客户端要等待一个2MSL(Max Segment Life,报文最大生存时 间)的时间,才会进入CLOSED状态。

滑动窗口(效率机制):

批量传送数据,批量应答,动态实时准备数据
①数据丢失:会补发,正常补发之后,返回最大ACK值,这种机制叫做快重传
②ACK丢失:最后一条ACK没丢就没有关系,只要接受了对方就能知道;按照收到最大的ACK来算,补发其他后面的就可以。

流量控制(安全机制):

接收端处理数据的速度是有限的。如果发送端发的太快,导致接收端的缓冲区被打满,这个时候如果发 送端继续发送,就会造成丢包,继而引起丢包重传等等一系列连锁反应。 因此TCP支持根据接收端的处理能力,来决定发送端的发送速度。这个机制就叫做流量控制(Flow Control);

拥塞控制(安全机制):

虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据。但是如果在刚开始阶段就发送大 量的数据,仍然可能引发问题。 因为网络上有很 多的计算机,可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发 送大量的数据,是很有可能引起雪上加霜的。 TCP引入 慢启动 机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传 输数据;

当TCP开始启动的时候,慢启动阈值等于窗口最大值; 在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置回1; 少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络拥塞; 当TCP通信开始后,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立刻下降; 拥塞控制,归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的 折中方案。 TCP拥塞控制这样的过程,就好像 热恋的感觉

延迟应答:

①每隔一段时间进行延迟应答,一定程度上加速大消息的速度
②每隔N次延迟应答一次
注意事项:有可能会触发超时重传,所以一定要小于超时重传的时间(500ms),一般为200ms

捎带应答:

  1. 断开连接一般是四次挥手,但是没有待处理的数据时,服务器可以将两次挥手合并为一次响应,发送给客户端。这就是捎带应答。

TCP面向数据流会遇到沾包,半包即得到不准确数据的问题的解决方法:

  • 1.以\n作为数据流的边界
  • 2.发送固定大小的数据流信息

网络原理之TCP协议特性相关推荐

  1. 网络编程——基于TCP协议的通讯录【课程设计】

    网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...

  2. 计算机网络原理fin,一个动画看懂网络原理之TCP建立和释放过程

    一个动画看懂网络原理之TCP建立和释放过程 一.TCP的概念 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.T ...

  3. 网络编程之TCP协议与UDP对比

    网络编程之TCP协议与UDP对比 UDP协议: 1,面向无连接. 2,不可靠协议,容易丢包. 3,速度快. 4,包体积有限制,64k以内. 通常,聊天,在线视频,凌波. TCP协议: 1.面向连接. ...

  4. 网络5g以及tcp协议等

    网络5g以及tcp协议等 通讯的有关信息 网络的有关信息 OSI七层模型参考 TCP/IP 5层模型 数据的封装和解封 ------------------------------------- 通讯 ...

  5. 网络原理之TCP/IP协议

    文章目录 1.网络基础 1.1 认识IP地址 1.1.1概念 1.1.2 作用 1.1.3 格式 1.1.4 组成 1.1.5 分类 1.2 子网掩码 1.2.1 格式 1.2.2 作用 1.2.3 ...

  6. ppp协议pap验证过程状态转移图_电脑网络知识:TCP协议的高级特性,你所不知道的TCP...

    一. TCP状态转换 要清楚的掌握在连接建立.连接终止以及数据传送时所发生的不同事件,TCP协议以有限状态机的形式来实现.有限状态机是能够经历有限数目状态的一种机器.这个机器总是处于某一个状态中.若没 ...

  7. 网络原理之TCP/UDP协议

    UDP协议 UDP协议端格式 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度; 如果校验和出错, 就会直接丢弃 UDP的特点 UDP传输的过程类似于寄信. 无连接: 知道对端的 ...

  8. JavaEE:网络原理之TCP/IP

    文章目录 一.网络基础 1.认识 IP 地址 2.子网掩码 3.认识 MAC 地址 4.总结IP地址和MAC地址 二.应用层重点协议 1.DNS 2.NAT 3.NAPT 4.HTTP/HTTPS 三 ...

  9. 网络基础(二)- TCP协议

    TCP协议 TCP全称为 "传输控制协议(Transmission Control Protocol").它最重要的是解决在传输层通信的过程中,解决网络通信过程中可靠性的问题.当然 ...

最新文章

  1. 科技部部长:院士头衔不是学术不端挡箭牌、铁帽子!已有多位院士及候选人、校长、教授等被“拿下”...
  2. python是用c写的吗-python是用c写的吗
  3. C++ 高质量程序设计指南读书笔记
  4. 3、ACE-实用生活口语---讲打电话Talking on the phone
  5. iOS SDK: Send E-mail In-App
  6. 系统带你学习 WebAPIs 第五讲
  7. 2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!
  8. oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...
  9. Android的ListView长按监听器
  10. PowerShell 学习笔记 - 2 PS Module
  11. win11关机后主机依旧运行怎么办 Windows11关机后主机依旧运行的解决方法
  12. 几行Java解决图片提取文字功能
  13. steam加速_Steam玩家们快看看,追梦加速器的试用体验者怎么说?
  14. WebM视频解析与修复
  15. asset文件夹路径 unity_Unity资源常用目录和路径大总结
  16. 思岚RPLIDAR A2激光雷达开箱
  17. [蛋蛋涂鸦]难道要学达芬奇画鸡蛋喵??
  18. .bat、python与C++程序进行批量处理的学习与实践
  19. ESP32 学习日志(5)——NVS
  20. Windows操作系统截屏快捷键

热门文章

  1. vue、Cascader 级联选择、Cascader 属性事件方法、vue Cascader 所有级联选择样式、vue Cascader 级联选择全部属性事件方法
  2. 简单介绍控制理论(经典、现代)
  3. 进程,线程与多核,多cpu之间的关系
  4. SLCP验厂辅导,发布网关是SLCP系统中用于数据托管和共享的关键角色
  5. f4menu2----Total Commander 增强型F4插件
  6. 对中国四大名著--红楼梦 使用jieba进行分词处理 排除去停词 统计完整词频并按降序排列 前20词绘制词云图
  7. 信捷伺服刚性调整_信捷伺服常见问题分析解答.pdf
  8. 元素地球化学类毕业论文文献有哪些?
  9. 软件领域专利申请的特点及案例
  10. SQLIntegrityConstraintViolationException: ORA-00001: unique constraint及sequence调整初始值