服务端没有listen,客户端发起连接建立

服务端只bind了ip和端口,但是没有listen这个socket监听,客户端此时发起建立连接,会怎样?

服务端会返回RST,即把SYN丢掉

RST 报文是什么?

RST 报文是 TCP 中的一种“暴力”断开连接的方式。它的意思是 Reset,即“复位”。当接收方发送 RST 时,它是在告诉对方:“我无法建立这个连接,请立即终止!” 这和正常的四次挥手断开连接不同,RST 是一种不包含任何确认的、突然的连接终止。

不使用listen,可以建立tcp连接吗

可以的。tcp自连接(同一台机器内的不同进程连),也可以是两个客户端同时发起建立连接的请求(两个独

立的客户端之间,它们同时尝试与对方建立连接)。

这两种情况都不需要listen,但都可以建立连接

半连接和全连接队列都是在服务端listen时内核自动创建的,故客户端是没有这个东西的。

但内核有个全局hash表,用来存放sock的信息

在tcp自连接中,客户端在connec方法中,会将自己的连接信息放入这个全局hash表中

然后将信息发出,消息经过回环地址重新回答tcp传输层时,就会根据IP+端口信息去这个全局hash中取信息

于是握手一来一回,最后成功建立连接

在两个独立的客户端之间,同时尝试与对方建立连接时: