我不确定如何在TCP中告诉发送者何时完成向我发送信息。
例如,如果A需要发送200字节给B, B如何知道A完成了发送,并且信息已经准备好传递给应用层?
有FIN标志,但据我所知,它只是用来表示你要关闭连接。
谢谢。
TCP没有义务告诉接收方何时发送方完成了连接上的数据发送。它不能,因为它不理解它正在传输的更高级别协议数据。
但是,它会告诉您连接是否关闭(然后您将在网络跟踪中看到FIN, FIN- ack)序列。从编程的角度来看,假设您使用的是C语言,函数recv将在对等端关闭连接时返回0。
您定义了一个协议,例如首先以指定的字节顺序发送一个4字节的int,该字节顺序指示消息正文中有多少字节。
如果您在unix/linux上,select
和poll
可以向您发出信号,表示另一端完成了传输(完成了半/全关闭)。如果你已经读取了所有的数据,并且想要从一个关闭的连接中读取,read
也会返回一个错误。
如果你在一个连接上进行多次传输,并且想要标记一个"包"的结束,你必须将其构建到你的协议中。