社区
网络及通讯开发
帖子详情
发送tcp数据时的排队问题
赵小东砰砰砰
2015-09-10 10:11:17
两个tcp流
一个正在发数据,sendbuffer开的很大,里面有一堆包(d1, d2,……dn)正在发送中
一个需要回复ACK(a1)
那这个ACK是否是sendbuffer内包被全部发完后再发送,即 d1,d2,……dn,a1的顺序?
此时ACK能否有办法插队,即 d1,a1,d2,……dn
谢谢
...全文
170
2
打赏
收藏
发送tcp数据时的排队问题
两个tcp流 一个正在发数据,sendbuffer开的很大,里面有一堆包(d1, d2,……dn)正在发送中 一个需要回复ACK(a1) 那这个ACK是否是sendbuffer内包被全部发完后再发送,即 d1,d2,……dn,a1的顺序? 此时ACK能否有办法插队,即 d1,a1,d2,……dn 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
我不懂电脑
2015-09-11
打赏
举报
回复
数据在sendbuffer后会重新分包发送ack对应新包的顺序
土著巫师
2015-09-11
打赏
举报
回复
TCP协议是基于流的协议,也是无边界的协议,没有包的概念(UDP才有包的说明),在TCP流上传输数据,要自己界定解析数据的起、止标记。TCP上只有带外数据可以插队传输,否则都是顺序发送、顺序接收的。关于什么是带外数据一两句话讲不清楚。
LwIP
TCP
Client 解决长
数据
发送
的困扰
问题
描述 LWIP 的
TCP
Client
发送
数据
可以调用
tcp
_write() 函数,将
数据
储存在缓冲区里面,然后等待超
时
自动
发送
或者调用
tcp
_output()函数进行
发送
。 然而
tcp
_write() 函数 需要
发送
的
数据
过长
时
,将无法
发送
,并返回 ERR_MEM。
tcp
_write()函数解析
tcp
_write()的函数代码很多,就不细看代码了, 先看
tcp
_write()的完整函数: err_t
tcp
_write(struct
tcp
_pcb *pcb, const void
Python实现
TCP
通信
TCP
:由于
tcp
是
数据
流的形式接收,所有
发送
数据
都会粘着一起,如果接收
数据
超过我们指定的,则会出现粘包现象,那么此
时
这个
数据
还会保存在缓冲区,这里也就是recv内,待我们下次再次recv
时
,取到的就会是上次没有取完的
数据
。
问题
的根源在于,接收端不知道
发送
端将要传送的字节流的长度,所以解决粘包的方法就是围绕,如何让
发送
端在
发送
数据
前,把自己将要
发送
的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有
数据
。定义:
数据
全部粘在一起,如果一次性未取完,下一次接着上一次未取完的
数据
部分接着取。
网络协议
TCP
数据
段 . 帧
#
TCP
数据
段格式 源端口 ,目的端口 :16位 2字节,
发送
端的端口号和接收端的端口号,和ip地址就可以完整的标识一个端点,也就构成了之前说过的,套接字socket. 序号(seq):32位 4字节,用来标示计算机 A------>B
数据
包序号,
TCP
连接中,传送的
数据
字节流中的每一个
数据
字节都要按顺序进行编号,在“
数据
段头”中标识的只是每个
数据
段的第一个
数据
字节的编号,这个要传送的字节流的起始序号必须在连接建立
时
设置。 确认号(ack):32位 4字节,客户端和服务端都可
发送
, ACK =
socket UDP、
TCP
发送
接收
数据
socket UDP、
TCP
发送
接收
数据
基础计算机网络概念两台电脑的通信IP地址与协议公网IP和内网IPNAT技术端口介绍socket简介
TCP
/IP协议socketUDP
发送
接收
数据
udp
发送
数据
udp接收
数据
TCP
发送
接收
数据
TCP
与UDP的区别 基础计算机网络概念 两台电脑的通信 两台电脑之间的通信类似于写信,
数据
通过网线传输到服务器,在经过服务器传输给目标电脑,其中ip地址是唯一标识,用来识别你要
发送
的对象,在写信中ip地址就相当于我们的通信地址。 IP地址与协议 规定网络地址的协议称为ip协
传输层学习之三(
TCP
数据
传输)
TCP
提供了可靠的传输服务,这是通过下列方式提供的: 应用
数据
被分割成
TCP
认为最适合
发送
的
数据
块。由
TCP
传递给IP的信息单位称为报文段或段(segment)当
TCP
发出一个段后,它启动一个定
时
器,等待目的端确认收到这个报文段。如果不能及
时
收到一个确认,将重发这个报文段。当
TCP
收到发自
TCP
连接另一端的
数据
,它将
发送
一个确认。这个确认不是立即
发送
,通常将推迟几分之一秒
TCP
将保持它首部和
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章