三次握手目的是保证双方都准备好资源。
三次握手:客户端告诉服务端准备好资源
服务端告诉客户端,我准备好了,你准备好了?
我也准备好了
四次挥手是保证双方都把资源释放掉。
四次挥手过程:
第一次调用close()发送了一个数据包,然后得回一个,这个时候客户端知道服务端收到了,第二次用recv解阻塞,有数据就处理,第三次没有数据就关闭,调用close关闭就会向对方发送一个数据包,第四次客户端回复。
为啥是四次挥手而不合并为三次挥手?
不能合并因为不调用第三次挥手的close就不能得到回复。
为啥服务端不能先调用close?
客户端先调用等两分钟随机分配再连再分配。
服务器先调用不允许绑定端口,会出现端口被占用,
setsockopt 套接字选项,REUSEADDR重复利用资源解决端口调用。