sniperD

导航

TCP协议学习

TCP协议(传输控制协议)是TCP/IP协议簇中的一员,位于传输层。相对于UDP协议(数据报协议),TCP协议是一种可靠传输协议,这意味着TCP协议会尽力保证所传输的信息的完整性与传输的可靠性。本篇主要介绍TCP协议的三次握手和四次挥手,还有TCP如何保证传输的可靠性。

一、TCP三次握手

在进行TCP连接的时候,需要进行三次握手。通过三次握手,服务器和客户端双方都可以确定对方能够接收到自己的信息。考虑以下场景:

小明与小红分别在两个山头,由于相距较远,他们只能用飞鸽传书进行交流。
小明传书对小红说:‘嗨,小红,你能收到我的信息吗?’
小红收到传书之后给小明传书:‘我收到啦,你能收到吗?’
小明收到小红的传书之后又给小红传书:‘小红,我收到啦!’
然后他们就都确定了对方能收到自己的传书,之后就可以愉快的进行交流啦。

试想一下,如果只有两次传书,小明收到小红的信息之后没有回复,那么这时候只有小明能确定小红能收到他的信息,但是小红并不能确定小明能收到她的信息,因为小明没有告诉小红他收到没有。因此,要建立连接的话,至少需要进行三次信息的传递才能让双方都确定对方能收到自己的信息。这个过程就被形象的称为三次握手。

二、TCP四次挥手

在断开TCP连接的时候,需要进行四次挥手。为什么TCP连接时进行三次握手,断开连接时却要进行四次挥手呢。考虑以下场景:

小明与小红用飞鸽传书进行了深入的交流,小明临时有事,只能结束这次交流,于是:
小明传书给小红:‘不好意思小红,我临时有事,需要结束这次交谈了。。’
小红收到后回小明:‘好的,真遗憾,你等等,我想想我这还有什么要告诉你的哈。。’
小红确认没有需要说的之后,给小明传书说:‘没什么要说的了,今天就聊到这吧,你去忙你的吧。’
小明收到后回到:‘好的,跟你聊天很愉快,再见啦!’
然后小明等了一段时间后确认确实没有飞鸽过来了,就离开了山头。

在这里,小明首先发出了结束聊天的请求,小红与小明聊天意犹未尽,所以先告诉小明先等等,之后再依依不舍的确认说没什么要说的了,小明收到之后也是在等了一段时间都才离开了这个聊天的地方。在这个过程中,他们互相保证了再没有什么遗漏的信息。
那么为什么小明要等一段时间在离开呢?因为小明最后发的传书有可能在中途会丢失,如果丢失了,小红没有收到小明的确认就会一直等着,然后再发一个传书给小明。所以小明等了一段时间之后,没有收到小红再次发过来的确认聊天结束的传书,就说明小红已经收到了,就可以安心的离去了。
最后小明等的一段时间有多长呢?小明和小红约定信鸽在两点之间的飞行时间最长为X秒,如果超出这个时间就认为信鸽已经失踪了。那么小明最后等待的时间是2X秒

三、TCP传输可靠性

TCP是面向连接的可靠传输协议,那么TCP如何保证传输的可靠性呢?

小红与小明为了保证他们交流的可靠性,做了很多约定:

  • 为了避免同事收到太多信息导致阅读遗漏,他们约定了一个窗口大小,即最多只能在一端积累这么多条信息。
  • 为了避免空中又大量信鸽来往影响信鸽自由的通行,他们约定当信鸽太多影响信息的接收时要适当减少传书的发送频率。
  • 为了能确定每次信息对方都收到了,他们约定每收到一次传书必须要返回一次确认,如果发送方很长时间都没有收到确认,则说明用于传书的信鸽失踪了,那么发送方要把同样的信息在传书一次。这个最大的等待时间就是设置为N,这个N必定是小于等于2X的。
  • 至此已经能基本保证他们之间交流的可靠性了,但是在真实的TCP中还有很多其他措施,这里就不再赘述了。

在TCP中的如何保证可靠传输可以参考:TCP可靠传输

四、我想

本文是希望用另外一种拟人的方式来阐述TCP的原理,并不面面俱到,并不一定准确。但是我希望今后能用相对来说更加有趣的写法来记录我在工作学习中学到的理论、技术,如果要达成这个目标,必定少不了对相应理论和技术的深刻理解,这正是我的目的。

posted on 2020-05-06 15:33  sniperD  阅读(182)  评论(0编辑  收藏  举报