在上一节中,以现实中的邮政系统为例,各层的计算机网络协议分别有着对应和特点
城市内的跑腿小哥1. 货物被打包到快递盒内(封装成帧)
2. 啥货物只要打包好都可以送(透明传输)
3. 保证货物不被雨淋损坏(差错控制)
【而且不知道运的是什么,只保证将货物安然无恙的送到目的地】
2. 负责规划运输路线(最佳路径)
3. 出错了要及时处理(网际控制)
2. 服务点与服务点之间传输(点对点)
3. 用户只管寄货,不用管怎么运的(逻辑传输)
我们把传输层比作邮政系统内的服务点,而服务点又根据用户的需求将业务分为了两大类:
- 收发快递——UDP协议信件交流——TCP协议
在本文里我们就来着重分析一下TCP协议。
1. TCP协议的特点类比与打电话,TCP这种业务的特点在于:
- 打电话要双方在场,且接通(TCP是面向连接的)打电话只能一对一(TCP是一对一的)打电话双方都能听到对方的所有内容(TCP是可靠交付的)打电话能说也能听(TCP是全双工的)打电话交换的是“话”(TCP是面对数据流)
既然TCP是面向连接的,那问题自然就出来了
- 如何建立连接?如何断开连接?
连接建立的最基本原则“每一方都能确知对方的存在”。
那一个问题就是:
双方需要最少交谈多少次才能保证这个最基本原则?
接下来,我们就以表白确定恋爱关系的例子探索这个问题
a. 一次交谈——“舔狗的单相思”就像舔狗的单相思一样,一次交谈显然是不够的。
因为你的女神可能根本不想鸟你(/狗头),啊哈哈哈。
b. 两次交谈——“我孩子都出生了!”那两次呢?表面看起来女神回复了就可以,但是有一种情况如下:
在这种情况下,很荣幸你女神答应你了!
但是不幸的是… 你孩子都出生了。
所以两次是不够的,这是因为客户端可能会因为超时而退出。
c. 三次交谈——“大功告成”正如图中所示,三次交谈刚刚好,这样:
- 双方都能知道对方的态度其中一方也不会因为时间太长而退出
所以在连接的建立中,需要三次交谈才能建立最基本的连接,这又被称为三次握手
其三次握手的过程为:
- 第一次握手:客户端主动发送请求【客户端:我想连接,你在吗?】
主动请求标志:SYN=1客户端序列号:seq=x 第二次握手:服务器端回答客户端【服务器端:久等,我在,可以连接,你还在吗?】
连接建立标志:SYN=1回答标志:ACK=1服务器端序列号:seq=y回答对象:ack=x+1 第三次握手:客户端回答服务器端【客户端:我在我在!】
回答标志:ACK=1客户端序列号:seq=x+1回答对象:ack=y+1
类比于建立连接,最直接的感觉是连接的断开也只需要三次交谈。
但是其实不然,连接与断开的一个区别在于:
断开的时候可能还有资源没有传输完毕(就像情侣分手了但是账还没有算清楚) a. 不提倡的方式
b. 提倡的方式 总结:四次挥手由于需要所有资源都传输完毕,不同于三次握手,断开连接的时候需要四次挥手。
四次挥手
第一次挥手:客户端发送关闭连接的报文段【客户端:我想关闭】
关闭标志:FIN=1客户端序列号:seq=u 第二次挥手:服务器收到 FIN 报文后,发回确认报文【服务器端:收到了,等一下】
确认标志:ACK=1服务器端序列号:seq=v确认对象:ack=u+1 第三次挥手:服务器发送完所有数据后,会向客户端发送 FIN 报文段【服务器端:好了,传输完了,可以关闭】
关闭标志:FIN=1确认标志:ACK=1服务器序号:seq=w确认对象:ack=u+1 第四次挥手:客户端收到来自服务器的 FIN 报文段后,向服务器发送 ACK 报文【客户端:好了,明白,拜拜】
确认标志:ACK=1客户端序号:seq=u+1确认对象:ack=w+1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)