socket有没有同步写一说(怎么判定数据一定达到了对端?还得用户态)
网络上的同步写和异步写和磁盘的同步和异步不一样
网络上的同步写是写到tcp的缓冲区中,如果缓冲区没有地方了,那么是直接返回给用户态程序还是让用户程序卡住,这个是阻塞和非阻塞发生的地方。
注意:阻塞是指tcp缓冲区中是否有数,然后在机器不重启的情况下,tcp协议会保证你的数据到达对端!!!!也就是tcp协议是一种同步的协议!tcp协议就是文件系统中的“同步写”,他会有各种各样的机制来保证数据一定会达到对端!当然了这一路可能发生各种各样的事情!比如我发送端机器异常重启了,比如对端机器down机了,比如中间路由器挂掉了,所以在网络传输中,是怎么判断数据到没到对端?
有没有一种语义,我这条数据一定达到了对端?只能通过用户态来保证了,比如收到了数据之后,返回一条确认数据,然后对端接收,返回一个确认收到的数据包,只有用户态才能做这件事情。
用户态怎么判定数据一定达到了对端?
tcp链接我们知道数据一定是对到达对端的,但是这些超时重传啊什么的,都是内核态的行为,用户态怎么知道数据发送到没有。
这就是tcp的同步,那么放到了tcp的缓冲区之后,到底是谁发送出去的呢?是当前线程还是别的线程捏?【一切与文件系统对标,哈哈哈哈哈】
阻塞!