简述
TCP/IP代表的是协议族,含有大量的协议在内。其中的TCP至关重要,客户端要与服务器交互数据,就必须先完成TCP的连接。那么TCP的是怎么连接的呢?
三次握手
客户端(浏览器)要与服务器进行通信,则必须先进行三次握手。
下面用一幅图简单的介绍一下TCP三次握手的过程:
简单理解为:这里的syn包用于建立连接,ACK包用于确认是否成功建立连接。
那为什么TCP连接一定要进行三次握手,两次不行吗???
三次握手的必要性
举个简单的生活例子:
小张和小李经常网上交友。
一天,小张在xxx网站上看到了小李的交友信息,于是小张兴高采烈地向小李发送了一句英文:“Nice to meet you,guy!”(如果此时小李不认识英文、认为小张是傻子、亦或是由于网络问题信息没有传达过去,第一次沟通失败)
小李正坐在屏幕前等待着有缘人。"噔噔",小李收到并惊疑地看着信息,歪果仁?小李小心翼翼的用着他很烂的英语水平回复:"Can you speak 中文?"(如果此时因为网络问题信息传达不过去,亦或是由于小张的个人问题没有及时回复邮件,第二次沟通失败)
小张看到消息后不由的乐了,立刻回复:“兄弟,你可真逗!”(如果此时因为网络问题消息传达不过去,第三次沟通失败)
小李接收到了消息,回复:"老兄,我的英语不太好,都是中国人,就说中国话!"于是,兄弟俩愉快的聊起了天来。(第三次沟通成功后,双方建立可靠的通信渠道)
通过上面这则例子,应该不难看出来三次握手的必要性。哪有人和你说一句话,你就把他当成真挚的朋友,总得多说几句话吧!
同样的,客户端(浏览器)与服务器要成功通信,则必须保证双方能建立可靠的通信渠道,三次握手的必要性不言而喻。
如果服务器在第二次握手后接受不到客户端的确认请求,那么服务器会在一段时间后自动释放资源(之前的请求过程当做垃圾扔掉~)。
三次握手后的信息交流
成功建立了联系当然就得开始交流了,下面是双方交流的过程:
这里就不再详细解释里面的东西,接着我们的四次握手~
四次握手==四次挥手
客户端与服务器不可能一直保持通信,(你总得关闭浏览器去干别的事,比如玩大型单机游戏?)。这里就有了四次握手,不过我觉得四次挥手更符合我们的日常行为(难道你临走前还得握握手表示一下你对别人的尊重?)。
一幅图说明过程:
简单理解为:fin包请求自身关闭连接,ACK包用于确认请求。
浏览器向服务器发送fin包的时候,已经处于半关闭状态(我很疲惫了,不太想聊天了~)。
服务器接收到fin包后立刻返回ACK包确认客户端的即将关闭状态。
之后,服务器发送fin包,告诉客户端我也要关闭了。
客户端接收到fin包后返回ACK包进行确认。
此后,两者关闭。
感觉客户端和服务器已经被我说成一对好基友了~~
关注不吃亏
图画的有点难看,不要介意
领取专属 10元无门槛券
私享最新 技术干货