社区
网络及通讯开发
帖子详情
发送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
谢谢
...全文
179
2
打赏
收藏
发送tcp数据时的排队问题
两个tcp流 一个正在发数据,sendbuffer开的很大,里面有一堆包(d1, d2,……dn)正在发送中 一个需要回复ACK(a1) 那这个ACK是否是sendbuffer内包被全部发完后再发送,即 d1,d2,……dn,a1的顺序? 此时ACK能否有办法插队,即 d1,a1,d2,……dn 谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 =
【C语言】linux内核
tcp
_push函数
在进行
TCP
通信
时
,
数据
推送通常与`
tcp
_sendmsg`、`
tcp
_write_xmit`和`
tcp
_push_one`等函数相关,它们处理
数据
的
发送
以及确保在适当
时
候将
数据
推送到网络上。不过,内核确实包含了处理
TCP
数据
发送
的逻辑,这通常涉及一个名为`
tcp
_push`的操作,这个术语通常是在讨论当内核需要
发送
TCP
数据
时
所采取的策略。在Linux内核中实现
TCP
数据
发送
的函数通常位于`net/ipv4/
tcp
.c`文件中,并涵盖了一套复杂的
TCP
协议实现,包括
数据
段的
发送
、接收、重传等逻辑。
socket UDP、
TCP
发送
接收
数据
socket UDP、
TCP
发送
接收
数据
基础计算机网络概念两台电脑的通信IP地址与协议公网IP和内网IPNAT技术端口介绍socket简介
TCP
/IP协议socketUDP
发送
接收
数据
udp
发送
数据
udp接收
数据
TCP
发送
接收
数据
TCP
与UDP的区别 基础计算机网络概念 两台电脑的通信 两台电脑之间的通信类似于写信,
数据
通过网线传输到服务器,在经过服务器传输给目标电脑,其中ip地址是唯一标识,用来识别你要
发送
的对象,在写信中ip地址就相当于我们的通信地址。 IP地址与协议 规定网络地址的协议称为ip协
网络及通讯开发
1,317
社区成员
8,874
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章