Vinsiny
Vinsiny
大佬写的不错,文中有些图片我这里打不开,不知道是链接给错了,还是我本地网络问题,大佬检查下?
```javascript function flatten(arr) { var res = arr; var i = 0; while (i < res.length) { if (Array.isArray(res[i])) { res.splice(i, 1, ...res[i]); } i++; } console.log(res); return res; }...
### 一、三次握手讲解 1. 客户端发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,服务器由SYN=1知道客户端要求建立联机(客户端:我要连接你) 2. 服务器收到请求后要确认联机信息,向A发送ack number=(客户端的seq+1),syn=1,ack=1,随机产生seq=7654321的包(服务器:好的,你来连吧) 3. 客户端收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,客户端会再发送ack number=(服务器的seq+1),ack=1,服务器收到后确认seq值与ack=1则连接建立成功。(客户端:好的,我来了) ### 二、为什么http建立连接需要三次握手,不是两次或四次? **答:三次是最少的安全次数,两次不安全,四次浪费资源;** ### 三、TCP关闭连接过程 1. Client向Server发送FIN包,表示Client主动要关闭连接,然后进入FIN_WAIT_1状态,等待Server返回ACK包。此后Client不能再向Server发送数据,但能读取数据。 2. Server收到FIN包后向Client发送ACK包,然后进入CLOSE_WAIT状态,此后Server不能再读取数据,但可以继续向Client发送数据。 3. Client收到Server返回的ACK包后进入FIN_WAIT_2状态,等待Server发送FIN包。 4. Server完成数据的发送后,将FIN包发送给Client,然后进入LAST_ACK状态,等待Client返回ACK包,此后Server既不能读取数据,也不能发送数据。 5. Client收到FIN包后向Server发送ACK包,然后进入TIME_WAIT状态,接着等待足够长的时间(2MSL)以确保Server接收到ACK包,最后回到CLOSED状态,释放网络资源。 6. Server收到Client返回的ACK包后便回到CLOSED状态,释放网络资源。...