计算机网络 —— TCP、UDP 和 ARP 的知识点总结
三次握手
B 的 TCP 服务器进程先创建传输控制块 TCB,准备接受客户进程的连接请求,然后服务器进行就处于 LISTEN 状态,等待客户的连接请求。
A 的 TCP 客户进程也是首先创建传输控制块 TCB,然后向B发出连接请求报文段,这时首部中的同步位 SYN = 1,同时选择一个初始序号seq = x。TCP 规定,SYN 报文段(即 SYN = 1 的报文段)不能携带数据,但要消耗掉一个序号,此时,客户端进入 SYN-SENT(同步已发送)状态。
B 收到连接请求报文之后,若同意连接,则向 A 发送确认,在确认报文段中应把 SYN 和 ACK 位都置为1,确认序号是 ack = x + 1,同时也要为自己选择一个初始序号 seq = y。请注意,这个报文段也不能携带数据,但同样要消耗一个序号,这时,TCP 服务器进程进入 SYN-REVD 状态。
TCP 客户进程收到 B 的确认之后,还要向 B 给出确认。确认报文段的 ACK 置为 1,确认号 ack = y + 1,而自己的序号 seq = x + 1。TCP 的标准规定,ACK 报文段可以携带数据,但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍然是 seq = x + 1。这时 TCP 连接已经建立,A 进入 ESTABLISHED 状态。当 B 收到 A 的确认之后,也进入 ESTABLISHED 状态。
上述称为三次握手
为什么要三次?
采用三次握手是为了防止失效的连接请求报文段突然又传送到主机 B,因而产生错误。失效的连接请求报文段是指:主机 A 发出的连接请求没有收到主机 B 的确认,于是经过一段时间后,主机 A 又重新向主机 B 发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机 A 第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机 B,主机 B 以为是主机 A 又发起的新连接,于是主机 B 同意连接