socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)

Posted honpey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)相关的知识,希望对你有一定的参考价值。

网络上的同步写和异步写和磁盘的同步和异步不一样

网络上的同步写是写到tcp的缓冲区中,如果缓冲区没有地方了,那么是直接返回给用户态程序还是让用户程序卡住,这个是阻塞和非阻塞发生的地方。

注意:阻塞是指tcp缓冲区中是否有数,然后在机器不重启的情况下,tcp协议会保证你的数据到达对端!!!!也就是tcp协议是一种同步的协议!tcp协议就是文件系统中的“同步写”,他会有各种各样的机制来保证数据一定会达到对端!当然了这一路可能发生各种各样的事情!比如我发送端机器异常重启了,比如对端机器down机了,比如中间路由器挂掉了,所以在网络传输中,是怎么判断数据到没到对端?

有没有一种语义,我这条数据一定达到了对端?只能通过用户态来保证了,比如收到了数据之后,返回一条确认数据,然后对端接收,返回一个确认收到的数据包,只有用户态才能做这件事情。

用户态怎么判定数据一定达到了对端?

tcp链接我们知道数据一定是对到达对端的,但是这些超时重传啊什么的,都是内核态的行为,用户态怎么知道数据发送到没有。

这就是tcp的同步,那么放到了tcp的缓冲区之后,到底是谁发送出去的呢?是当前线程还是别的线程捏?【一切与文件系统对标,哈哈哈哈哈】

阻塞!

以上是关于socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)的主要内容,如果未能解决你的问题,请参考以下文章

一个简单的SOCKET程序的数据包结构和封解包函数

深度学习-机器视觉学习路线

kvm竟然抓不到kvm的tracepoint

php观

再理一下prerouting和postrouting等插入点

systemtap如何写C函数 捎带着看看ret kprobe怎么用