当前位置:   article > 正文

tcp 发送数据长度比预设缓存大_TCP结构衍生的相关重点问题

tcp中send函数的的长度大于了缓存区的大小

要掌握 TCP ,就要知道TCP首部的结构及相关重点问题:

TCP报文段=首部+数据

  1. 顺序问题 (序号)
  2. 丢包问题 (发送端频率太高,超过接收端的接收能力)
  3. 连接维护
  4. 流量控制 (窗口大小)
  5. 拥塞控制 (注意与流量控制的区别)

470999a41e80411c5aa7583abe2b9885.png

3b2235bb3e423b7fed4518143c8e796a.png

1、端口号:用来标识同一台计算机的不同的应用进程。

[1]源端口:源端口和IP地址的作用是标识报文的返回地址。

[2]目的端口:指明了接收方计算机上的应用程序接口。

TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

2、序号和确认号:是TCP可靠传输的关键部分。

序号:确保了TCP传输的顺序性,用来标识TCP发端向TCP收端发送的数据字节流。

确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK=1时才有效,也规定连接建立后所有发送的报文的ACK必须为1

3、首部长度:用来表示报文首部的长度,单位是4byte。由于首部可能含有可选项,所以TCP报头的长度是不确定的。

4、保留:为将来定义新的用途保留,现在一般置0,无用处。

5、控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。

[1] URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。(urgent)

[2] ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。(acknowledgement)

[3] PSH:为1时表示当前报文需要进行push操作,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

[4] RST:重置连接标志,重置TCP连接。(reset)

[5] SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此,SYN置1就表示这是一个连接接受报文。

[6] FIN:finish标志,用于释放连接,当 FIN = 1时,表明发送方的数据已经发送完毕,并要求断开连接。

6、窗口:窗口值是

之间的整数,用来通知发送端,接受端能承受的最大缓存大小,以此发送端发送的数据就不会超了,从而实现
流量控制。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

7、校验和:检验范围包括首部和数据两部分。TCP校验首部和数据的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验或有差错,TCP将丢弃这个分片,并不确认收到此报文段,最后就会超时重发

8、紧急指针:只有当 URG= 1 时紧急指针才有效。

9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

10、数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,就会发送不带数据部分的报文。

二、丢包问题

丢包问题描述

1、TCP协议定义(Transimission Control Protocol)是以一种面向连接的、可靠的、基于字节流的传输层通信协议。
2、TCP是基于不可靠的网路实现可靠传输,肯定会存在丢包问题。
3、如果在通信过程中,发现缺少数据或者丢包,那边么最大的可能性是程序发送过程或者接受过程中出现问题。

假如我有2台服务器a和b。

a服务器发送数据给B服务器频率过高时,b服务器来不及处理,造成数据丢包。(原因可能是程序逻辑问题,多线程同步问题,缓冲区溢出问题)

如果a服务器不控制一下自己的发送频率或者重发数据的话,b服务器收到数据肯定会少,就会造成丢失数据。这种现象,其实本质上来说不是丢包,也不是丢数据,只是因为程序处理有错误,导致有些数据没有成功地被socket发送出去。

丢包问题的解决

  1. 丢包重传:tcp本身有丢包重传的功能,链路有少量丢包,tcp可以自动重传,但是如果tcp重传三次失败,tcp自动会发送
    断开链接,tcp会话会中断,必须再次三次握手建立会话。
  2. 数据分片:发送端对数据进行分片,接受端要对数据进行重组,由TCP确定分片的大小
  3. 到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认
  4. 超时重发:发送方在发送分片时设置超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片数据
  5. 滑动窗口:窗口值是
    之间的整数,用来通知发送端,接受端能承受的最大缓存大小,以此发送端发送的数据就不会超了,从而实现
    流量控制。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
  6. 失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;
  7. 重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据
  8. 校验和:TCP校验首部和数据的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验或有差错,TCP将丢弃这个分片,并不确认收到此报文段,最后就会超时重发

三、流量控制

窗口值是

之间的整数,用来通知发送端,接受端能承受的最大缓存大小,以此发送端发送的数据就不会超了,从而实现
流量控制。之所以要有这个限制,是因为接收方的数据缓存空间是有限的,防止出现发送端发送数据频率太大,出现丢包。

四、拥塞控制

定义

在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的,网络的性能就要变坏,这种情况就叫做拥塞。

拥塞控制的标志

  1. 重传计时器超时
  2. 接收到三个重复确认
拥塞控制与流量控制的区别?? 拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。 流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。

TCP的四种拥塞控制算法

1.慢开始

2.拥塞避免

3.快重传

4.快恢复

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/157415
推荐阅读
相关标签
  

闽ICP备14008679号