前端小伙伴找工作的时候是不是常常被问到http的tcp三次握手策略是怎么建立的啊。
看到篇文章以后在面试这块就不用怕了?
其实TCP/IP按层分的话,分为4层,分别是
1 应用层
2 传输层
3 网络层
4 链路层
关于这4层分别是什么,在这就不多说了,今天咱们只看 传输层(TCP协议层)。
tcp作为传输层它主要提供了一下功能,
- 提供了可靠的字节流服务
- 确保数据能够到达目标
1、TCP提供的可靠字节流服务。
1.1 、所谓的字节流服务,简单的理解就是身为传输层的tcp协议,能够把传输比较大的数据进行分块处理,按序号分块处理成网络传输的小单位。其实就是为了方便传输。
比较官方店的解释为:”为了方便传输,将大的数据分割成以报文段为单位的数据包进行管理“
1.2 、可靠的传输服务,简单的理解为tcp协议能够把大数据包已经分割成报文为单位的数据包准确可靠传给对方。
总结上面1.1、1.2得知tcp协议为了容易传送数据才把数据分割,而且tcp协议能够确认数据最终是否送达到对方。
2、确保数据能够到达目标
tcp的三次?就是马上就要浮出真面目。
为了确保数据能后无误的送达目标处,tcp协议采用面试关常问的三次握手(three-way-handshaking)策略,用于tcp协议把数据包送出去后,tcp不会对传送的后的情况置之不理,它一定会向对方确认是否成功送达。
先简单的理解一下三次握手机制,简单的例子比如咱们大家是不是都在支付宝或者微信上面进行过转账啊,比如我有一个好朋友赵鑫,赵鑫打电话给我借钱,我得知这个消息后,要给他转钱,我选择在微信上面给他转账了。
我把钱转给他以后,接着就给他发了一条信息”我把2000元已经转给你了,你注意查收一下“,
赵鑫看到信息以后就会回复:’钱收到了,下个月还你‘等这类的话
我看到信息后回复:’收到,好的‘
转账加信息回复就是简单描述三次握手,接下来我们看看在tcp层怎么实现的
在握手的过程中使用了tcp的标志(flag)-SYN(synchronize,使.....同步)和ACK(acknowledgement,承认、确认)。
发送端在数据包发送以后,首先发送一个带SYC(synchronize)标志的数据包给对方,接收端收到后,回传一个带有SYN(synchronize)/ACK(acknowledgement)标志的数据包已传达接收端的确认信息。发送端在回传一个带有ACK标志的数据包,代表”握手结束“,
若在握手中某个阶段莫名中断,tcp协议会再次以相同的顺序发送相同的数据包
除了上述的三次握手,tcp协议还有其他各种手段来确保通信的可靠性