【网络】TCP的三次握手与四次挥手以及面试相关的问题
一、TCP的三次握手与四次挥手 1、三次握手 定义: 指建立一个TCP连接时,需要客户端和服务器总共发送3个包。建立连接的过程为三次握手 目的: 连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。 可能触发三次握手的情况: 在socket编程中,客户端执行connect()时,将触发三次握手。 三次握手的作用: ①使得通讯双方都做好通讯准备; ②告诉对端本端通讯所选用的报文标识号; ③防止已失效的连接请求报文段又突然传递到了服务器,从而产生错误。 三次握手的过程: 2、四次挥手 关闭连接的过程为四次挥手,由于TCP的全双工的通讯,所以每个方向都必须单独进行关闭。 四次挥手的过程: 当一方完成他的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能继续发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 问题: 1、三次握手,每一次都携带什么数据?为什么要给确认报文段中的ACK的值+1? seq是数据包本身的序列号;ack是期望对方继续发送的那个数据包的序列号。 2、为什么是三次握手?两次可以么?四次呢? 显然是不可以的。 ① 客户端发送SYN包A1,由于网络链路问题,到达时间滞后,因为客户端迟迟收不到服务器的响应,以为丢包,清理A1