浏览器通过 DNS 可以得到域名对应的 IP 地址,得到 IP 地址后就可以建立 TCP 连接,和服务端通信了。
在建立 TCP 连接之前,客户端和服务器之间会发送三次数据,以「确认双方的接收和发送能力」,这个过程称为三次握手(Three-way Handshake):
三次握手
第一次握手:刚开始客户端处于 CLOSED 的状态,服务端处于 LISTEN 状态。客户端给服务端发送一个同步序列编号 SYN(Synchronize Sequence Numbers)报文,并指明客户端的初始化序列号 ISN(Initial Sequence Number),此时客户端处于 SYN_SEND 状态。
第二次握手:当服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也指定了自己的初始化序列号 ISN。同时会把客户端的 ISN + 1 作为确认字符 ACK (Acknowledge character)的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RECV 的状态。
第三次握手:当客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也同样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方成功建立起了连接。
![](https://i-blog.csdnimg.cn/blog_migrate/6b0008feaa866f436890d026a70a93b8.png)
TCP三次握手
在三次握手成功后,服务端和客户端会建立 TCP 连接,开始正常地通信啦!(比如发送 HTTP 请求等)
问题一:为什么需要第三次握手?
答:首先我们要清楚三次握手的目的是:「确认双方的接收和发送能力」。前两次握手只能确认:1. 客户端的发送能力;2. 服务端的发送、接收能力。无法确认客户端的接收能力。因此我们需要第三次握手。
当我们内容传输完毕后,就要关闭 TCP 连接了,关闭之前,我们要进行四次挥手:
四次挥手
第一次挥手:在挥手之前服务端与客户端都处于 ESTABLISHED 状态。客户端发送一个 FIN (Finish) 报文,用来关闭客户端到服务器的数据传输,此时客户端处于 FIN_WAIT_1 状态。
第二次挥手:当服务端收到 FIN 之后,会发送 ACK 报文,并且把客户端的序列号值加 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT 状态。
第三次挥手:如果服务端同意关闭连接,则会向客户端发送一个 FIN 报文,并且指定一个序列号,此时服务端处于 LAST_ACK 的状态。
第四次挥手:当客户端收到 ACK 之后,处于 FIN_WAIT_2 状态。待收到 FIN 报文时发送一个 ACK 报文作为应答,并且把服务端的序列号值 +1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。等待一段时间后会进入 CLOSED 状态,当服务端收到 ACK 报文之后,也会变为 CLOSED 状态,此时连接正式关闭。
![](https://i-blog.csdnimg.cn/blog_migrate/2ffbf735f82c3bf9575e41fd6a5cf39e.png)
四次挥手
TCP 和 UDP 的区别是什么?
TCP 是面向连接的;UDP 是面向无连接的
TCP 仅支持单播传输;UDP 提供了单播、多播、广播
TCP 稳定传输(数据不丢失不重复);UDP 不稳定传输
UDP 数据传输效率高,实时性好(适用于视频会议、语音通话)
TCP 如何保证数据包传输的有序可靠?
TCP主要提供了检验和、序列号/确认应答、超时重传、滑动窗口控制、拥塞控制等方法实现了可靠性传输。
校验和:通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃 TCP 段,重新发送。检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部
序列号/确认应答:发送端发送信息给接收端,接收端会回应一个包,这个包就是应答包。发送端没有收到应答包就会重发数据。这就可以保证数据的完整性。
超时重发:发送出去的数据包到接收到确认包之间的时间,如果超过了这个时间会被认为是丢包了,需要重传。
滑动窗口控制:超时重传的机制存在效率低下的问题,发送一个包到发送下一个包要经过一段时间才可以。所以我们就想着能不能不用等待确认包就发送下一个数据包呢?这就提出了一个滑动窗口的概念。通过对多个段进行确认应答的功能。通过下一次的确认包可以判断接收端是否已经接收到了数据,如果已经接收了就从缓冲区里面删除数据。
拥塞控制:TCP 会先发出少量数据,先探明当前的网络拥堵状态后,再决定按照多大的速度传送数据。
原文链接:https://zhuanlan.zhihu.com/p/411843083 原文作者:社本