IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【计算机网络】TCP协议 -> 正文阅读

[网络协议]【计算机网络】TCP协议

TCP协议

TCP协议是什么

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。TCP应用层次是传输层。

TCP协议的特点

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
TCP的职责是进程到进程之间的通信。TCP保证了可靠性。
TCP的可靠性:
(1)TCP尽它最大可能,将数据发送给对方
(2)即使数据没有发送给对方,TCP会给上层(进程)一个交代
(3)保证接收方接收到的数据都是有序的
(4)TCP可以保证不会接收到错误的数据
(5)根据接收能力和网络承载情况做了发送量控制

TCP协议实现机制

TCP如何实现进程到进程

数据通过互联网传输的时候不是单纯的数据,不加任何标识,如果这样数据实现不了指定进程到进程的通信。所以数据在发送的时候,需要加上特定标识,加上特定标识的过程叫做数据的封装,在数据使用的时候再去掉特定标识,去掉特定标识的过程就叫做分用。TCP的4位首部长度就是做解包用的。
在这里插入图片描述

TCP如何实现可靠性

TCP中有确认应答机制。确认应答机制是收到一条报文后,向发送端发送一条确认ACK,此ACK的作用就是告诉发送端:接收端已经成功的收到了消息,并且希望收到下一条报文的序列号是什么。确认序号(Acknowledgment Number)标识了报文接收端期望接收的字节序列。
在这里插入图片描述
校验和:
长度为16位,共2个字节。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,接收端用于对收到的数据包进行验证。

超时重传

在数据发送过程中,我们不应该有上帝视角。在进程到进程通信中。发送端发送数据后,过了很久都没有收到应答,可能有什么原因?

(1)对方完全没有收到数据
a.数据丢了
b.因为时间原因,数据还没有到达对方(因为时间过了很久,所以此项原因我们不考虑)
(2)对方已收到数据,只是应答我们没有收到
a.应答丢了
b.应答因为时间原因,我们还没有收到(因为时间过了很久,所以此项原因我们不考虑)

发生以上这种情况时,我们有一个超时重传机制。
TCP的重传存在原因就是为了保障TCP的可靠性,正是由于TCP存在重传的机制,那些基于TCP的业务应用在网络交互的过程中,不再担心由于丢包、包损坏等导致的一系列应用问题了。
在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。一个报文段可以好几次的超时,也就是说,第一次发此报文段时超时了,发送端会重新发送,第二次发的时候还是超时了,此时发送端还是会重新发送,但是发送端对一个超时的报文段不会一直发,发几次之后,就会丢弃此报文段。

计时器设置的时间在好几次的发送中,为什么要变得越来越长呢?

因为在发送数据的时候,数据传输可能还没建立好,此时就重传,可能会浪费资源。
在这里插入图片描述

延时应答

数据传输的时候,发送端给接收端发送数据,接收端给发送端发去确认应答信息,这样比较耗时,效率低下,延迟应答就是接收端收到数据之后,稍微等一会再应答,这样可以提高数据的传输效率,因为发送端发好几次数据,接收端只需要一次来确认应答,这样可以降低网络拥塞的概率
数量限制:每隔N个包就必须应答一次
时间限制:超过最大延迟时间就必须应答一次

所有的包都可以延迟应答吗?
不是。


  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:32:39  更:2022-05-24 18:33:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 11:13:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码