-
运输连接有三个阶段:连接建立、数据传送、连接释放。
- TCP连接的建立都是采用客户服务器方式
- 主动发起连接建立的应用进程叫做客户(client)
- 被动等待连接建立的应用进程叫做服务器(server)
-
TCP的连接建立(三次握手)
- 三次握手的原因:
- 前两次握手除了确定双方都能连通外,还通知了双方的一些端口信息。
- 第三次握手为了防止已失效的连接请求报文段突然又传送到了服务端,因为产生错误。(A发出连接请求,但因连接请求报文滞留,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已实效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出了一次新的连接请求。于是就向A发出确认报文段,同意建立连接。)
- 三次握手的原因:
-
TCP的连接释放(四次挥手)
- 为什么建立连接三次握手,释放连接是四次挥手?
- 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN + ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。
- 但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以先回复一个ACK报文,告诉Client端,“你发送的FIN报文我收到了”。只有等到Server端所有的报文都发送完了,才能发送FIN报文,因此不能一起发送,故需要四次挥手。
- TIME_WAIT的作用?
- 第一,为了保证A发送的最后一个ACK报文段能够到达B。
- 第二,防止“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
- 为什么建立连接三次握手,释放连接是四次挥手?
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)