LWIP中TCP协议的介绍

TCP协议(Transmission Control Protocol)传输控制协议在LWIP协议栈中占据了大半的代码,它是最常见的传输层协议,也是最稳定的传输层协议,很多上层应用都是依赖TCP协议进程传输数据,如SMTP,FTP等等

TCP服务介绍

TCP与UDP一样,都是传输层的协议,但是提供的服务却不相同,UDP为上层应用提供的是一种不可靠的,无连接的服务,而TCP提供一种面向连接,可靠的字节传输服务,TCP让两个主机建立连接的关系,应用数据以数据流的形式进行传输。

UDP运载的数据是以报文的形式,各个报文在网络中互不相干传输,UDP每收到一个报文就递交给上层应用,因此对于大量数据来说,应用层的重装是非常麻烦的,因为UDP报文在网络中到达目标主机的顺序是不一样的

而TCP采用数据流的形式传输,先后发出的数据在网络中虽然也是互不干扰的传输,但是这些数据本身携带的信息确实紧密联系的,TCP协议会给每个传输的字号进行编号,当然了,两个主机方向上的数据编号是彼此独立的,在传输的过程中,发送方把数据的起始编号与长度放在TCP报文中,接收方将所有数据按照编号组装起来,然后返回一个确认,当所有的数据接收完成后才将数据递交到应用层。

TCP的特性

连接机制

TCP是一个面向连接的协议,无论哪一方向另一发送数据之前,都必须在双方之间建立一个连接,否则将无法发送数据,一个TCP的连接必须与双方的IP地址和端口号,就像打电话一样,必须知道双方的电话号码才能打电话

一个完整的TCP传输必须有数据的交互,接收方在接收到数据之后必须正面进行确认,向发送方报告接收的结果,而发送方在发送数据之后必须等待接收方的确认,同时发送的时候会启动一个定时器,在指定超时时间内没收到确认,发送方就会认为发送失败,然后进行重发操作,这就是重传报文。

TCP提供可靠的运输层,但是他依赖的是IP层的服务,IP数据报的传输是无连接,不可靠的,因此他通过确认来知道接收方确实已经收到数据了,但是数据和确认都有可能会丢失,因此TCP通过在发送时设置一个超时机制(定时器)来解决问题,如果当超时时间到达的时候还没有收到对方的确认,他就重传该数据。

缓冲机制 

在发送方要发送数据的时候,由于应用程序的数据大小,类型都是不可预估的,而TCP协议提供了缓冲机制来处理这些数据,在数据量很小的时候,TCP会将数据存储在一个缓冲空间中等到数据量足够大的时候再进行发送数据。这样子能提供传输的效率并且减少网络中的通信量。而且在数据发送出去的时候并不会立即删除数据,还是让数据保存在缓冲区中,因为发送出去的函数不一定被接收方正确接收,它需要等待到接收方的确认再将数据删除。同样的在接收方也需要有同样的缓冲机制,因为在网路中传输的数据到达的时间是不一样的,而且TCP协议还需要把这些数据报组装成完整的数据,然后再递交到应用层。

全双工通信

在 TCP 连接建立后,那么两个主机就是对等的,任何一个主机都可以向另一个主机发 送数据,数据是双向流通的,所以 TCP 协议是一个全双工的协议,这种机制为 TCP 协议 传输数据带来很大的方便,一般来说,TCP 协议的确认是通过捎带的方式来实现,即接收 方把确认信息放到反向传来的是数据报文中,不必单独为确认信息申请一个报文,捎带机 制减少了网络中的通信流量。由于双方主机是对等的存在,那么容易一方都可以断开连接, 此时这个方向上的数据流就断开了,但是另一个 方向上的数据仍是连通的状态,这种情况 就称之为半双工。

流量控制

一条 TCP 连接每一侧的主机都设置了缓冲区域。当该接收方收到数据后,它就将数据放入接收缓冲区,当确认这段数据是正常的时候,就会向发送方返回一个确认,并且向相关的应用层递交数据,但不一定是数据刚已到达就立即递交。事实上,接收方的应用也许正忙于其他任务,甚至要过很长时间才会去处理这些数据。这样子如果接收方处理这些数据时相对缓慢,而发送方发送的太多,太快,就会容易地使结束访的接收缓冲区发生溢出。

因此TCP提供了流量控制服务以消除发送方缓冲区溢出的可能性,流量控制是一个速度匹配服务,即发送方的发送速率与接收方的应用程序的读取速率相匹配,TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制,,他用于给发送方一个一个知识:接收方还能够接收多少数据,接收方会将此窗口值放在TCP报文的首部中的窗口字段,然后传递给发送方,这个窗口的大小是在发送数据的时候动态调整的。

那可能有人问,这个窗口既然是动态调整的,那有没有可能是 0,这样子发送方不就 是没法继续发送数据到接收方了?为了解决这个问题,TCP 协议的规范中有些要求,当接收方主机的接收窗口为 0 时,发送方继续发送只有一个字节的报文段,这些报文段将被接 收方接收,直到缓存清空,并在确认报文中包含一个非 0 的接收窗口值。

流量控制是双方通信之间的控制信息,这是很有必要的,比如两个新能不对等的主机, 建立了 TCP 协议连接,但是其中一个主机一直发送数据,但是接收的主机来不及处理,这 样子的处理就不是最佳的,因此,TCP 协议中使用滑动窗口的流量控制方法,它允许接收 方根据自身的处理能力来确定能接收数据的多少,因此会告诉发送方可以发送多少数据过 来,即窗口的大小,而发送方尽可能将数据都多发到对方那里,所以发送方会根据这个窗 口的大小发送对应的数据 ,通俗地来说就是接收方告诉发送方“我还有能力处理那么多的 数据,你就发那么多数据给我就行了,不要发多了,否则我处理不了”。

差错控制

除了确认与重传之外,TCP 协议也会采用校验和的方式来检验数据的有效性,主机在 接收数据的时候,会将重复的报文丢弃,将乱序的报文重组,发现某段报文丢失了会请求 发送方进行重发,因此在 TCP 往上层协议递交的数据是顺序的、无差错的完整数据。

拥塞控制

什么是拥塞?当数据从一个大的管道(如一个快速局域网)向一个较小的管道(如一 个较慢的广域网)发送时便会发生拥塞。当多个输入流到达一个路由器,而路由器的输出 流小于这些输入流的总和时也会发生拥塞,这种是网络状况的原因。 如果一个主机还是以很大的流量给另一个主机发送数据,但是其中间的路由器通道很 小,无法承受这样大的数据流量的时候,就会导致拥塞的发生,这样子就导致了接收方无 法在超时时间内完成接收(接收方此时完全有能力处理大量数据),而发送方又进行重传, 这样子就导致了链路上的更加拥塞,延迟发送方必须实现一直自适应的机制,在网络中拥 塞的情况下调整自身的发送速度,这种形式对发送方的控制被称为拥塞控制(congestion control),与前面我们说的流量控制是非常相似的,而且 TCP 协议采取的措施也非常相似, 均是限制发送方的发送速度。

端口号的概念

TCP 协议的连接是包括上层应用间的连接,简单来说,TCP 连接是两个不同主机的应 用连接,而传输层与上层协议是通过端口号进行识别的,如 IP 协议中以 IP 地址作为识别 一样,端口号的取值范围是 0~65535,这些端口标识着上层应用的不同线程,一个主机内 可能只有一个 IP 地址,但是可能有多个端口号,每个端口号表示不同的应用线程。一台拥 有 IP 地址的主机可以提供许多服务,比如 Web 服务、FTP 服务、SMTP 服务等,这些服务 完全可以通过 1 个 IP 地址来实现,主机是怎样区分不同的网络服务呢?显然不能只靠 IP 地址,因为 IP 地址只能识别一台主机而非主机提供的服务,这些服务就是主机上的应用线 程&#x

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值