0
点赞
收藏
分享

微信扫一扫

三次握手建立失败的几种情况以及三次握手的理解

三次握手建立失败的几种情况以及三次握手的理解_tcp/ip
上面的图是阻塞式socket进行通信的过程,阻塞的时候是操作系统内核网络协议栈在工作

调用 connect 函数将激发 TCP 的三次握手过程,而且仅在连接建立成功或出错时才返回。其中出错返回可能有以下几种情况:
1、三次握手无法建立,客户端发出的 SYN 包没有任何响应,于是返回 TIMEOUT 错误。这可能是对应的服务端 IP 写错
2、客户端收到了 RST(复位)回答,这时候客户端会立即返回 CONNECTION REFUSED 错误。。这可能是客户端发送连接请求时的请求端口写错。
产生 RST 的三个条件是:
目的地为某端口的 SYN 到达,然而该端口上没有正在监听的服务器。
TCP 想取消一个已有连接。
TCP 接收到一个根本不存在的连接上的分节。
3、客户发出的 SYN 包在网络上引起了"destination unreachable",即目的不可达的错误。这可能是客户端和服务器端路由不通

关于三次握手问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的。
客户端第一次发送握手消息到服务端,
服务端接收到握手消息后把ack和自己的syn一同发送给客户端,这是第二次握手,
当客户端接收到服务端发送来的第二次握手消息后,客户端可以确认“服务端的收发能力OK,客户端的收发能力OK”,但是服务端只能确认“客户端的发送OK,服务端的接收OK”,
所以还需要第三次握手,客户端收到服务端的第二次握手消息后,发起第三次握手消息,服务端收到客户端发送的第三次握手消息后,就能够确定“服务端的发送OK,客户端的接收OK”,
至此,客户端和服务端都能够确认自己和对方的收发能力OK,,tcp连接建立完成。


举报

相关推荐

0 条评论