在TCP套接字代码中,我们创建了2个套接字。第一个接受新连接,第二个接受来自客户端的数据,并在建立新连接时创建。
TCP标头中的哪个控制位允许服务器知道是将这个段传递给ServerSocket(发送连接请求的那个)还是Socket(建立连接后为通信创建的套接字)? / p>
答案 0 :(得分:2)
TCP标头中的哪个控制位允许服务器知道是将这个段传递给ServerSocket(发送连接请求的那个)还是Socket(建立连接后为通信创建的套接字)? / p>
除了SYN之外,没有这样的控制位。如果TCP数据包到达并且与该4元组 {源IP,源端口,目标IP,目标端口} 建立了TCP连接,则将其传递到该连接的本地套接字。如果不是,则可能是对SYN-ACK的ACK,如果有一个未完成的序列号,则导致半成形连接被放置在监听积压队列上。否则它是一个错误并导致发出RST。
答案 1 :(得分:0)
以非常简化的方式:
来自TCP客户端的连接请求消息被标识为SYN数据包。这有SYN位设置。在此类数据包上,控件将由listen
上的accept
和listen_sd
电话接管;该过程以新套接字结束 - conn_sd
。
conn_sd
由本地IP标识:端口和远程IP:端口(仅listen_sd
本地IP:端口)
没有设置SYN位的其他数据包(数据消息或控制信令消息,如ACK(将设置确认位))将发往conn_sd
。
listen_fd
。
进一步阅读: