TCP/IP详解 卷1 第十七章 TCP:传输控制协议

Posted xcywt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP详解 卷1 第十七章 TCP:传输控制协议相关的知识,希望对你有一定的参考价值。

17.2 TCP的服务

TCP提供了一种面向连接的、可靠的字节流服务。两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接。

 

TCP通过下列方式来提供可靠性:

1)  应用数据被分割成TCP认为最合适发送的数据块

2)  当TCP发送一个段后,它会启动一个定时器,等待目的端确认。如果不能及时收到确认,将重发这个报文段。

3)  TCP收到数据后,它会发送一个确认。这个确认不是立即发送的,通常会推迟几分之一秒

4)  TCP将保持它首部和数据的校验和。(这是一个端到端的校验和,如果收到段的检验有错误,TCP将丢弃这个报文也不进行确认,这就会导致超时重传)

5)  TCP报文段作为IP数据报来传输,IP数据报的到达可能会失序。tcp段也就有可能会失序。所以TCP将对收到的数据进行重新排序,以正确的顺序将数据传给应用层。

6)  IP数据报会重复,TCP的接收端必须丢弃重复的数据

7)  TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出

 

另外、TCP对字节流的内容不作任何解释。对字节流的解释由TCP 连接双发的应用层解释。

 

17.3 TCP的首部

TCP数据被封装在一个IP数据报中,如下:

 技术分享图片

 

下面是TCP首部的数据格式,如果不及任选字段,它通常是20个字节:

 技术分享图片

源端口和目的端口:用于寻找发端和收端应用进程。(再加上IP首部中源端目的端IP地址就可以唯一确定一个TCP连接)

序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。

确认序号:包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加1.(只在ACK标志为1 时确认号才有效)

首部长度:首部中32bit字的数目。4位,最多就是15*4 = 60bit。没有任选字段时,正常长度是20字节。

6个标志比特:它们中的多个可以同时被设置为1,这里先简单说明:URG(紧急指针)、ACK(确认序号有效)、PSH(接收方应该尽快将这个报文交给应用层)、RST(重建连接)、SYN(发起连接)、FIN(发送端完成发送任务)。

16位的窗口大小:用于TCP的流量控制,窗口大小为字节数,起始于确认序号字段指明的值。

16位的校验和:校验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性字段,一定是由发端计算,收端验证

16位的紧急指针:只有在URG标志为1时才有效。这是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号

选项:最常见的可选字段是最长报文大小MSS。每个连接方通常都在通信的第一个报文段(连接时设置SYN的那个段)中指明这个选项,它表示本端所能接收的最大长度的报文段。

 

17.4 小结

TCP将用户数据打包成报文段:它发送数据后启动一个定时器;

另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复的数据

tcp提供端到端的流量控制,并计算和验证一个强制性的端到端校验和。

 

以上是关于TCP/IP详解 卷1 第十七章 TCP:传输控制协议的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP详解 卷1 第十八章 TCP的建立与终止

《TCP/IP详解》卷1第16章 TCP拥塞控制&&BBR分析

第十七章 Python网络编程

TCP/IP详解,卷1:协议--IP:网际协议

TCP/IP传输层协议实现 - TCP的坚持定时器(lwip)

Linux篇第十七篇——网络基础(概念+协议的认识+OSI七层模型+TCP/IP五层模型+网络传输的流程)