2020-11-12socket编程tcp编程心得(新得)包含:单向连续发包的seq序列号和ack序列号问题

注:192.168.43.169为客户端tcp进程
192.168.43.104为服务器tcp进程
客户端部分测试代码
客户端部分测试代码
socket的tcp通信三次握手后的第一次受到客户端数据
socket的tcp通信三次握手后的第一次受到客户端数据
socket的tcp通信三次握手后的第二次受到客户端数据
socket的tcp通信三次握手后的第二次受到客户端数据

可以看到第一次收到的数据包明显短,且被’\n’分割,说明客户端第一次write的’\n’刷新了缓冲区;
还可一看到从第二次收到的数据包开始’\n’包含在数据包中,说明从第二次开始客户端的’\n’就不会再刷新缓冲区。
原因:::TCP协议独立于 write()/send() 函数,数据有可能刚被写入缓冲区就发送到网络,也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,这取决于当时的网络情况、当前线程是否空闲等诸多因素,不由程序员控制。

单向连续发包

                          **单向连续发包**

从选中的包开始往下看,短时间内,一直是客户端向服务器发送数据包,在这期间没有服务器回发的报文,从这些数据宝中可以看出,客户端可以根据最近一次一次收到的服务器的包和自身发送数据的长度,来修改seq序列号,而ack序列号则一直是最近一次收到的数据包的seq和数据长度计算得出(图中数据长度为0),只要服务器没有回报文则ack序列号不变。而seq则根据自身发送的数据长度和上个数据包的seq计算得出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值