TCP协议之差错控制

说明: 本文仅供学习交流,转载请标明出处,欢迎转载!

 本文是以下文献相关内容的总结

[1] 《TCP/IP详解 卷1:协议》

[2] 《TCP/IP协议族 第4版》

[3] 《计算机网络 第5版》

TCP是一种面向连接的、可靠的、基于字节流的协议。可靠性指的是发送应用程序把数据流交付给TCP后,能够把数据流按序地、无差错地交给接收端的接收端的应用程序。TCP通过差错控制来提供可靠性,TCP差错控制包括:(1)检测并重传受损伤的报文段;(2)重传丢失的报文段;(3)丢弃重传的报文段并重传该报文段的ACK;(4)保证接收缓冲区的报文段按序交给接收端的应用程序。

FAQ1:TCP如何检测数据报是否损伤?

TCP接收端在收到报文段后,在报文段的首部加上伪首部后,连同数据部分一块计算检验和,如果计算结果为全1,说明数据没有收到损伤。

FAQ2:接收方在什么时候产生ACK报文段?

(1)当接收方收到发送方发来的按序到达的报文段时,就发送过一个ACK报文段;

(2)当收到的报文段的序号比期望的报文段的序号大时,接收方立即发送之前那个为收到的序号(即还是之前那个期望的序号);

(3)接收方收到一个重复的报文段时,丢弃该报文段,并立即向发送端发送该报文段的ACK。

FAQ3:发送方何时重传?

情况一:当发送方发送一个数据段出去时,会启动重传计时器,若在RTO内没有收到该数据段的ACK,则发送端则重传该数据段,该情况叫超时重传

情况二:当发送端收到接收端发送过来的三个对重复的ACK时(即三个期望收到的报文段相同时),即便RTO为到时,发送端也重传接收方期望的那个数据段,该情况叫快重传

FAQ4:接收方如何处理失序到达的报文段?

TCP并不会丢弃失序到达的报文段,而是将这些失序达到的报文段临时存放在接收缓冲区,并把它们标志位失序报文段,直到确实的报文段到齐。一定要记住:TCP永远都不会将失序的报文段交给接收进程

 FAQ5:发送端与接收端何时可能产生死锁现象?TCP是如何解决该死锁僵局的?

当接收端向发送端发送一个零窗口报文段(报文段首部中窗口值的大小设置为0),发送端就停止向接收端发送报文段。后来接收端想通知发送端,让发送端接着发送数据时,便向发送端发送一个非零窗口报文段。不幸的是,该报文段在路上丢失了。而接收端以为该非零报文段已经发送给发送端,于是便傻乎乎地等待发送端发送数据过来。而发送端由于没有收到接收方的非零窗口报文段,于是便在那安逸地休息,随时等待接收方的非零窗口报文的通知。于是两端都傻乎乎地等,陷入“死锁”的状态。

为了避免这一死锁的状态,TCP为发送端设置了一个持续计时器(persistent timer),当发送端收到接收端发来的零窗口报文段时,并启动该持续计时器,便等待着接收方的非零通知。如果一直没收到接收方的通知,持续计时器又超时了的时候,发送端便向接收方发送一个“探测报文段”,该探测报文仅携带1B的数据,该探测报文会消耗一个序号,但特殊的是,该探测报文段的序号永远不需要确认。该探测报文段的目的是仅仅是促使TCP接收端重传一个确认,该确认的内容包括接收端希望发送端的发送窗口的大小作为回复,即:如果接收端希望发送端的窗口大小仍然是0,那么发送端在收到该确认报文后,便会重置该持续计时器;如果接收方期望发送发的窗口不是0,则该僵局便打破了。

   注意:即便发送发收到了零窗口设置的报文段,发送端也能接收这几种报文段:探测报文段、ACK报文段和携带紧急数据的报文段。

TCP协议之差错控制

时间: 2025-01-05 04:22:39

TCP协议之差错控制的相关文章

tcp协议报文和三次握手与四次挥手

tcp协议: tcp是面向连接.可靠的进程到进程之间的协议.tcp提供全双工服务:即:数据可在同一时间双向传输. tcp报文段首部格式: 各字段含义: 源端口号:16位字段,为发送端进程对应的端口号 目标端口:16位字段,为接收端进程对应的端口号,接收方接收到数据包之后根据这个字段确定将数据发送给对应程序来处理 序号:32位字段,当tcp从进程中接收到数据之后,就会把他存储在发送缓存中.并对每一个字节进行编号,形成的序列号.特点如下: 会生成一个随机数作为第一个字节的编号,成为序列号(ISN),

IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个bit.标识包括选项在内的IP头部字段的长度. 3.服务类型:8个bit.服务类型字段被划分成两个子字段:3bit的优先级字段和4bit TOS字段,最后一位置为0. 4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小花费.4bit中只能将其中一个bit位置1.如果4个bit均为0,则

TCP协议详解(TCP建立连接与断开连接)

TCP是面向连接的.可靠的进程到进程通信的协议.它提供的是全双工(双向可传输)的服务,每个TCP都有发送缓存和接受缓存,用来临时存储数据. 1.TCP报文段:TCP把若干个字节构成一个分组,称为报文段(segment).TCP报文段封装在IP数据报中,TCP报文段的首部格式如下图所示: 首部长度为20~60个字节,一下是各个字段的含义:①:源端口号:它是16位字段,为发送发进程对应的端口号:②:目标端口号:它是16位字段,对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给哪

浅谈TCP协议(建立与断开连接)

TCP是面向连接的,可靠的进程到进程通信的协议.TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存,用来临时存储数据.TCP将若干个字节构成一个分组,成为报文段(segment)TCP报文段封装在IP数据报中:TCP报文段的首部格式如图:首部长度为20--60字节,源端口号:他是16位字段,为发送方进程对应的端口号.目标端口号:他是16位字段,对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给那个应用程序的进程.序号:当TCP从进程接收数据字节时,就

TCP协议详解,你从未见过额全新版本

前言: TCP/IP协议簇的传输层协议主要有两个,TCP(Transimission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议) 一:TCP协议介绍 TCP是面向连接的,可靠的进程到进程通信的协议. TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存,用来临时存储数据. 二:TCP报文格式 2.1TCP报文段 TCP将若干个字节构成一个分组,成为报文段. TCP报文段封装在IP数据报中

深入理解TCP协议及其源代码——connect及bind、listen、accept背后的“三次握手”

一.TCP简介 TCP(Transmission Control Protocol,传输控制协议)是一个传输层(Transport Layer)协议,它在TCP/IP协议族中的位置如图1所示.它是专门为了在不可靠的互联网络上提供一个面向连接的且可靠的端到端(进程到进程)字节流而设计的.互联网络与单个网络不同,因为互联网络的不同部分可能有截然不同的拓扑.带宽.延迟.分组大小和其他参数.TCP的设计目标是能够动态地适应互联网络的这些特性,而且当面对多种失败的时候仍然足够健壮. 图1 TCP在TCP/

网络协议及tcp协议详解

问题来源:面试中面试官会看到你的简历上写着熟悉网络.http.tcp协议等,那你真的了解他吗?今天它来了 一.网络协议: 层次说明: 第七层:应用层(http) 为操作系统或网络应用程序提供访问网络服务的接口. 第六层:表示层 处理两个通信系统中交换信息的表示方式.为上层用户解决用户信息的语法问题.包括数据格式交换.数据加密与解密.数据压缩与终端类型的转换. 第五层:会话层 在两个节点之间建立端连接.为端系统的应用程序之间提供了对话控制机制.会话层不参与具体的传输,它提供包括访问验证和会话管理在

tcp协议分析

tcp协议解析 TCP在网络OSI的七层模型中的第四层--Transport层,IP在第三层--Network层,ARP在第二层--Data Link层.在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据叫Segment. 我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理 TCP头格式 TCP数据段格

时间获取程序服务器 TCP 协议相关性

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取服务器程序.它和时间获取程序客户端一道工作. TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_p