基本TCP协议问题——send()和recv()上发生了什么

基本TCP协议问题——send()和recv()上发生了什么,tcp,Tcp,我有一些关于TCP协议的基本问题 情况:机器A调用send(sockfd)将数据发送到机器B。send()调用成功 问题:当send()调用返回时,是否意味着数据已经到达机器?还是操作系统刚刚接受了它 情况:机器A调用send(sockfd)向机器B发送数据。但是机器B上的应用程序B从套接字读取数据的速度不够快。应用程序A正在以10MB/s的速度写入,但应用程序B的读取速度仅为1KB/s 问题: 在这种情况下,send()调用何时在机器上成功 它是在数据提交到机器A上的OS_A时成功,还是等到O

我有一些关于TCP协议的基本问题

情况:机器A调用send(sockfd)将数据发送到机器B。send()调用成功

问题:当send()调用返回时,是否意味着数据已经到达机器?还是操作系统刚刚接受了它

情况:机器A调用send(sockfd)向机器B发送数据。但是机器B上的应用程序B从套接字读取数据的速度不够快。应用程序A正在以10MB/s的速度写入,但应用程序B的读取速度仅为1KB/s

问题

  • 在这种情况下,send()调用何时在机器上成功

  • 它是在数据提交到机器A上的OS_A时成功,还是等到OS_B确认后成功

  • OS_B是否要求应用程序_B在向OS_A确认之前提取数据包


  • send
    只关心将数据放入本地套接字缓冲区,即它不会等待收件人计算机的确认,甚至不会等待收件人应用程序处理数据(甚至更晚)。如果您需要此类信息,则需要获得一些应用程序级别的确认。此外,虽然ACK通过TCP发送,但它无论如何也不会通过UDP等其他协议发送


    send
    只有在无法将数据放入套接字缓冲区时才会失败,原因可能是没有套接字缓冲区(套接字已关闭),或者套接字缓冲区已满,但
    send
    称为非阻塞。如果套接字缓冲区已满且
    send
    被称为阻塞,则它将阻塞,直到套接字缓冲区中再次有空间为止。

    1。这意味着所有数据都已传输到本地套接字发送缓冲区。2.对三号。不