TCP如何进行数据传输?

TCP如何进行数据传输?,第1张

1、作好编程准备,包括后面要搭敬燃用的头文件,以及一些变量的定义。

2、在终端界面上显示提示信息,告诉TCP运行后的结果,如传送完成、传送了多少字节、速度是多少等。

3、提示客户端用法,如何从键盘输入数据,用什么格式输入,打开套接字,为传送的字节分配内存。

4、用connect函数,指定字节数,时间和遵从的协议。传送完毕,关闭套接知虚字。

5、打开侦听函数,并且等待接收来自客户端的TCP数据。

6、接收完毕,关闭套接字,并且在屏幕显稿乎示传输结果。

注意事项:

TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。

在计算机网络的经典五层协议中,TCP属于运输层,实现了进程间的通信,保证了数据的可靠传输,属于计算机网络协议族中最重要的协议之一,那么TCP是如何实现可靠数据传输的呢?

运输层的进程间通信是通过socket实现的,socket是一个抽象的概念,在Linux系统中以文件的形式存在。网络层通过IP来区分主机,运输层则增加了端口的概念来区分进程。TCP协议中使用目标IP、目标端口、源IP、源端口来定义一个socket,只需要在运输层的报文头部附加上这些信息,目标主机就会知道数据要发送那个socket,对应监听该socket的进程就可以收到数据进行处理。

TCP报文包括首部和数据部分,首部附加了TCP报文的信息,首部长度固定部分为20字节,还有40字节的可选部分,具体如下图所示:

其中几个关键字段的作用如下:

网络层只管尽可能将数据从一个主机发送到另一个主机,并不保证数据可靠到达,由于网络环境总是不稳定的,可能存在丢包、差错等请求,TCP则通过一系列的机制在运输层保证了数据的可靠传输。

网络传输可能发生的异常情况和解决方法:

要实现可靠传输,最简单的方法就是发送方发送一个报文,接收方收到报文后发送确认报文表示我收到了,你可以发下一个了,传输模型如下:

这种方式保证可靠传输称为停止等待协议,这种方式缺点也很明显,效率非常低。

为了提高传输效率,充分利用带宽,发送方会连续的发送数据包,如下图所示:

客户端不等收到前一个包的确消皮认报文就开始不断的发下一个包,这样可以充分利用网络带宽,提高传输效率,但是于此同时也带来了另外的问题,那么TCP是如何解决这些问题的?

累计确认 :网络中充斥着大量的发送包和确认回复报文,这些数据只是为了确认报文到达,并不是实际需要传输的数据。是不是一定要每一个报文都要发一个回复确认的报文呢,TCP采用了累计确认的方法:接收方在累计收到了一定量的数据包后发送一个确认报文告诉发送方在此之前的数据包都已经收到了,这样便可以减少确认报文的数量,提高带宽利用率。

GBN(回退n步) :如果发简滑生丢包的情况,在连续ARQ中,如果接受方收到了123 567个字节,编号为4字节的包丢失了,按照累计确认只能发送3的确认回复,567都要丢掉,因为发送发会进行重传。

选择确认ACK :在TCP报文头部的选项字段部分设置已收到的报文,每一段用两个边界来确定,比如上述情况可以用[1,3]和[5,7]来表示,客户端就会根据选项只重传丢失的数据段。

因为接收方读数据的能力有限,发送发不能一直发送报文直到把缓冲区所有数据发送完,这样会导致接收方无法接收丢弃掉数据包,发送方收不到确认认为超时又会继续重传,产生了大量拦桥腊无用数据的重传。对此情况TCP使用滑动窗口来解决,基本模型如下:

滑动窗口机制实现了TCP的 流量控制 ,不至于发送太快导致太多的数据丢弃和重传。

为了避免网络过分拥挤导致丢包严重,传输效率低,TCP实现了拥塞控制机制,拥塞控制的解决办法本质上是流量控制,控制发送方发送的速度,而上文提到流量控制是通过滑动窗口来实现的,所以最终也是通过调整发送方的滑动窗口大小来实现的。

拥塞控制的几个重要的概念:慢启动、拥塞避免、快恢复、快重传

Reno算法是比较常见的TCP实现的拥塞控制算法,其他拥塞算法还有Tahoe(已废弃不用)、New Reno等,通过拥塞控制算法可以很大程度避免网络拥挤。

【书籍】计算机网络:自顶向下方法

【码农有道】 这一篇TCP总结请收下


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12278253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存