TCP协议白话解释

1.为啥要有TCP协议

      我们都知道,网络协议分为7层,第一层给我们提供了基础的物理网络;第二层的以太协议,定义了一小群电脑,怎么进行点对点的传输。第三层,我们通过ip协议,进行整个互联网直接的传输,但是我们的ip协议,重点解决了,查询地址的问题,至于数据传输的可靠性,ip协议并没有做支持。基于网络传输的不稳定性,因此出现了tcp协议。ip确保通讯,tcp确保传输稳定,两者均为互联网通讯中起到了基石般的用,因此,互联网协议很大部分,都被叫做TCP/IP协议族。第四层的传输层一直有Tcp和Udp两种协议,udp简单理解就是在ip地址上作了端口号的甄别,确保数据在应用程序之前可以传输。而TCP,不仅保证数据可以传输,还保证了数据传输的可靠性。

      我想大家都玩过王者荣耀吧,你们可想过没,为啥我们每个操作的顺序,都和我们操作的一模一样,可能大家都觉得是理所当然,但是在网络上实现这个是非常难的,而在这个过程中,TCP就是这理所当然过程的核心。

2.tcp协议建立连接的过程

      我们都知道tcp 在建立连接期间 需要进行三次握手,之前一直很好奇,为啥建立连接要三次握手呢。三次握手分别是,客户端发起连接,向服务端写入一个序号,这是第一次。然后服务端向客户端写入一个应答(TCP规范下 除了ack的消息都得应答),同时发送一个序号给客户端,这是第二次握手。第三次,就是客户端单纯的回复服务端的序号。至此三次握手完成 连接建立。建立一个连接,为啥需要这么做呢?一开始,我以为,是为了测试双方通讯是否正常,客户端写入一次,服务端回复,说明客户端写入木有问题,服务端写入一次,客户端回复,双方均确认写入无异常,可以正式建立连接。后来,我再三阅读资料,发现客户端在第一次会发送一个syn号,就是一个整型,相当于当前连接的id,服务端接收以后给个回复,同时自己也给客户端发送一次syn号,也是相当于id。双方通讯都可以通过id来确认是否是当前应该收到消息。如果没有这个保证,以后所有的消息,都会出现乱套的情况。三次握手建立以后,tcp就正式的建立了连接。

3.通过现实例子来了解三次握手的意义

      简单来说,就是我给一个陌生人打电话,第一句你好,我是xxxx,请问你是xxx么,他回复是的,我是xxx,请问你找我有啥事儿么xxx,我这边再回复,你好xxx先生,很荣幸和你通话! 请问你要买茶叶么? 不需要,滚蛋! 三次握手,就相当于买茶叶之前的内容,询问买茶叶是正式的通讯了。如果上面的不好理解,我们换个场景!比如 小明和小美被催着相亲,两个人约着在某咖啡厅某位置见面,小美先到,小明后到。小美找到小美位置后,先说,1.你好美女,请问你是小美是吧?2.小美回复,你好帅哥,我是小美,你是小明么?3.是的,我是小明,很高兴认识你 小美。于是乎,两个人开启了快乐的相亲之旅。开头的对白,看似简单 平常 ,其实着里面包含两个相当重要的信息:1.两个人是否可以正常沟通,没有这个基础,那就是扯淡;2两个人身份是否正确,要是不正确,那不就闹乌龙了?tcp协议在建立连接的时候,设置三次握手,就是为了保证两端是否可以正常通讯,两端身份是否正确。这也是保证接下来真正可靠的基石。

4.TCP正常通讯的过程

      连接建立以后,就是开始真正的通讯了。tcp协议,保证高可用和顺序性真正的基石就是通过每条消息都

进行ack来进行确认消息发送是否收到。现在可以简单粗浅的认为,每条消息都有一条确定的id,根据每条id是否收到ack来确认消息是否正常发送。比如 客户端发 1 req,2 req,3 req,req4,req5 ,服务端收到应该这样回复 1 ack,2 ack,3 ack,4 ack,5 ack 。客户端拿到这些ack以后,再发送6 7 8 9 10。假如6 没有收到 ,客户端却发了5条那服务端会回复客户端 5 ack ,5 ack,5 ack,5 ack  客户端如果在一段时间内连续收到这样的信息,就知道这条消息丢了,然后进行补发。如果服务端在一定时间内收到了,就会返回正常的 6 7 8 9 10给客户端。

      我们通过网游来了解这个过程,我们感官最明显的就是打游戏的时候,突然发现卡了,人不动了,其实就是在tcp过程中,某条包传输出现延迟,导致你的角色,就一直在重复一个动作,等你网络恢复以后,他会非常快的把你之前的操作一口气做完。这样的原因,就是中间一包消息晚到,出现这种大家头疼的画面,等恢复过来,发现你挂了,屏幕是黑白的了。如果这个时候,咋们不用tcp 用udp,会发生什么 ,比如你的角色 用1技能 再接2技能 再接3技能 连招 ,网络一瞬间延迟,1技能数据包没到服务器,2技能先到,网络忽然好了1技能再到,然后你手机显示的效果就是2技能 1技能 3技能,脾气暴的人,估计想砸手机了吧

5.TCP连接的关闭

    然后就是tcp连接关闭的过程,就是所谓的四次挥手,1.首先主动关闭方,会给被动关闭方发一个关闭请求被动关闭方,2.收到请求后会给主动关闭方一个反馈。3.然后被动关闭方也想关闭,所有同时也要发一次关闭请求,4.主动关闭方回复  四次挥手完成以后,连接关闭,通信双方拆除对应的通讯通道。由于每条tcp连接需要读写缓冲区,以及队列等资源,所以,通讯两端还是很耗资源的一个过程,再这个过程中,就是确定回收资源的前置步骤,等通讯双方达成一致性以后,再次确定是否关闭通道

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容