TCP连接为什么是3次握手,不是2次或4次?
- 为了实现可靠传输,发送方接收方始终需要同步(SYNchronize)序号,序号并不是从0开始,而是由发送方随机选择的初始序列号(Initial Sequence Number,ISN)开始。由于TCP是一个双向通信协议,通信双方都有能力发送信息,并接收响应。因此,通信双方都需要随机产生一个初始序列号,并且把这个起始值告诉对方。
- TCP是可靠的连接,至少需要进行三次握手。
- 两次握手无法保证是可靠的连接,还会浪费资源。例如client 先发送了一个请求给服务端,但是由于网络延迟迟迟没有抵达服务端,client以为服务端没有收到,又发送了一次请求给服务端,服务端先接收到了后者的请求并响应。响应完了之后,关闭链接。延迟的请求抵达了服务端,此时服务端又响应返回给了 client,但 client 已经不会在做出响应了,这里服务端就浪费了资源等待 client 响应。
- 理论上最后一次客户端响应给服务端,也不能 100%的保证两者之间建立了可靠的链接。三次就足以建立链接,再多次数只是浪费资源。
TCP连接4次挥手流程是怎样的,为什么?
- client 先向 server 请求关闭连接。
- server 收到请求,返回给 client ,允许关闭连接。
- server 接续发送报文,请求关闭连接。
- client等待 2MSL 后,确认 server 没有返回任何东西,关闭连接。两者断开。
如何复用 TCP 连接?
- 在HTTP1.0中,客户端每一个HTTP请求都必须通过独立的TCP连接进行处理,而在HTTP1.1中进行了改进,客户端可以在一个TCP中发送多个HTTP请求。
- TCP连接复用最根本区别在于,TCP连接复用是将多个客户端的HTTP请求复用到一个服务器或TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。使用keep-alive可复用TCP链接。
TCP和UDP的区别?
TCP是可靠通信协议,而UDP是不可靠通信协议。TCP接收方收到的数据是完整,有序,需要经过三次握手。UDP接收方接收的数据可能存在部分丢失,顺序也不一定能保证。
TCP 拥塞控制是什么?怎么工作的?
- 拥塞:在某段时间内,如果对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要发生变化,叫做拥塞。
- 拥塞控制:防止过多的数据注入到网络当中,这样可以使网络中的路由器或链路不致过载。
- 拥塞控制的方法:慢开始、拥塞避免、快重传、快恢复
- 流量控制:流量控制作用于接收者,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失。
TCP 如何保证传输正确的?
TCP 在发包过程中会记录发送字节长度,比如发送了 100,响应的时候就会响应 101,代表前 100 都接收完毕了。以此来确保准确性。
一个 TCP 连接中 HTTP 请求发送可以一起发送吗?
不可以,TCP 是阻塞式的只能一个返回在发另外一个。
为什么有的时候刷新页面不需要重新建立 SSL 连接?
TCP 会与浏览器保持连接一段时间,所以不需要,重新建立 TCP,自然 SSL 也不需要。