tcp协议靠什么实现可靠连接(通信协议TCP的连接和控制)
觉得不错,记得关注《地铁超人笔记》!不一样的平台,一样的精彩!
微信公众号/微博:地铁超人笔记;抖音号:地铁超人·说(MetroSuperman123);哔哩哔哩网站:地铁超人笔记
TCP协议是面向连接端到端的可靠协议。它支持多种网络应用程序,可以在多种硬件构成的网络上运行。它的下层是IP协议,TCP可以根据IP协议提供的服务传送大小不定的数据,IP协议负责对数据进行分段、重组,在多种网络中传送。TCP的上面就是应用程序,上层接口包括一系列类似于操作系统的中断调用。
主机上不同的协议有不同的端口号,一对进程通过这个端口号进行通信。这个通信不包括计算机内的I/O操作,只包括在网络上进行的操作。网络上的计算机被看作数据包传送的源和目的节点。计算机中的不同进程可能同时进行通信,这时它们会用端口号进行区别,不会把发向A进程的数据由B进程接收。
在实现TCP的主机上,TCP也可以调用一些操作系统的功能,TCP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,IP向TCP提供所有TCP需要的服务。
TCP是用一个序号来保证顺序的。响应包内也包括一个序列号,表示准备好接收这个序号的包。在TCP传送一个数据包时,它同时把这个数据包放入重发队列中,并启动计数器,如果收到了关于这个包的确认信息,将此包从重发队列中删除,如果计时超时则需要重新发送此包。
为了保证TCP连接唯一,一个连接由连接两端的套接字标识,本地的套接字可能和不同的外部套接字通信,这种通信是全双工的。当两个机器中的两个TCP建立连接后,它们应当能够同时向对方发送报文段。这就表示,在任何数据传送之前,每一方都必须对通信进行初始化,并得到对方的认可。双方(下面以主机A和主机B为例)在传送数据前,应当完成四个动作。
1. 主机A发送报文段,宣布它愿意建立连接,报文段包括关于从A到B的通信量的初始化信息。
2. 主机B发送报文段确认(证实)A的请求。
3. 主机B发送包括关于从B到A的通信量的初始化信息的报文段。
4. 主机A发送报文段确认(证实)B的请求。
上述步骤(2)和(3)由于是同时发生,可以合并为一个步骤,所以连接的建立也称作三向握手。
在这个过程中,客户应用程序愿意与一个服务器的应用程序使用传输层协议中的TCP协议建立连接。三向握手过程从服务器开始,服务器程序告诉TCP已经准备好接收连接,这叫做被动打开请求,但它自己不能完成这个连接,处于监听状态。客户程序发出请求叫做主动打开请求,它告诉TCP它需要连接到特定的服务器。
1. 客户发送第一个报文段:SYN。这个报文段包括源端口号和目的端口号,以及初始序号。目的端口号清楚地定义了这个客户打算连接的服务器;初始序号用来对从客户发送到服务器的数据字节进行编号。
2. 服务器发送第二个报文段:SYN和ACK。此报文段有两个目的:一是使用ACK标志和确认号字段确认收到第一个报文段,确认号是客户初始序号加1,同时定义客户端的窗口值;二是对服务器的报文段进行初始化。
3. 客户发送第三个报文:ACK。它使用ACK标志和确认号字段确认收到第二个报文段。确认号是服务器的初始序号加1,同时定义服务器窗口值。在第三个报文段可以发送数据。还有一种特殊情况,就是两个进程都主动打开。在这种情况下,两个TCP都向对方发送SYN ACK报文段,然后在双方之间建立一条连接。
参加数据交换的任何一方都可以关闭连接,但连接的关闭是单方向的,连接可以在一个方向关闭,而在另一个方向依然打开。因此,要在两个方向都关闭连接需要完成四个动作。
1. 主机A发送报文段,宣布它愿意终止连接。
2. 主机B发送报文段确认(证实)A的请求。之后,一个方向的连接就关闭了。但主机B还可以向A发送数据。
3. 主机B发送报文段,宣布它愿意终止连接。
4. 主机A发送报文段确认(证实)B的请求。
在这里,步骤(2)和(3)不可以合并,连接终止就称为四向握手。
四向握手的过程从客户开始。客户程序告诉TCP,它已经发完数据,愿意终止连接,这是主动关闭请求。之后,客户TCP就关闭了客户到服务器方向的通信。而另一个方向的通信依然是打开的。当服务器程序发完服务器到客户方向的通信时,就可以请求TCP关闭服务器到客户方向的连接,这是被动关闭请求。
1. 客户TCP发送第一个报文段:FIN。
2. 服务器TCP发送第二个报文段:ACK。该报文段用于确认从客户发来的FIN报文段,报文段中的确认号是FIN报文段中的序号加1。
3. 服务器TCP可以继续向客户发送数据,当数据都发送完时,它就发送第三个报文段:FIN。
4. 客户TCP发送第四个报文段:ACK。该报文段用于证实TCP服务器收到了FIN报文段。
如果当前的连接被破坏,TCP可以在以下三种情况后请求复位:
1. 在某一端的TCP请求与并不存在的端口进行连接。在另一端的TCP就可以发送报文段,把RST位置1,以取消这个请求。
2. 由于出现了异常情况,某一端的TCP可能愿意把连接异常终止。它就可以发送RST报文来关闭这一请求。
3. 某一端的TCP可能发现在另一端的TCP已经空闲了很长时间。它就可以发送RST报文段来撤销这个连接。
TCP的操作必须在两个优先级相同的端口间进行。TCP使用的优先和安全参数在IP协议中定义。如果不符合则发送RST。在一些情况下,应用程序打算把它键入的字符发送给对方的应用程序,并希望立即收到响应。数据的延迟传输和延迟交付对应用程序来说是不可接受的。这时,发送端的应用程序就可以请求推送操作。发送端TCP设置推送位PSH以告诉接收端TCP,这个报文所包括的数据必须尽快地交付接收应用程序,而不要等待更多数据的到来。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com