通俗易懂的讲讲TCP的三次握手

通俗易懂的讲讲TCP的三次握手

TCP协议是传输层里面的一个协议,TCP在建立连接之前进行的三次握手对于很多人来说可能一直是迷。干嘛要握三次手?握其他次数不行咩?
那么我们就来讲讲TCP的三次握手都干了些什么吧(才疏学浅,说错的地方希望大家指正)
在这里插入图片描述

一、首先要明确三次握手的目的是什么?

三次握手的目的是为了确认客户端和服务端的收发功能是正常的。

那么就是需确认的东西一共有4个:

1.客户端的发送功能;
2.客户端的接收功能;
3.服务端的发送功能;
4.服务端的接收功能;

二、那三次握手分别都确认了哪些功能呢?
1、第一次握手

第一次握手是客户端主动发起的,简单粗暴的理解就是客户端给服务端写了一封信;
这就跟以前的人寄信一样,我自己知道自己是把信放进了邮箱里面,但是我并不知道邮差是不是把它拿出来寄出去了,
也就是说,客户端只知道自己发送了报文,但是报文有没有被发送出去就不知道,所以这个时候客户端对于自己的发送功能是否完好是不确定的;
但是当第一次握手的报文被送达服务端的时候,服务端就知道自己的接收功能是完好的了;因为它已经收到了嘛;
所以第一次握手就确定服务端的接收功能(括号内为握手编号):
在这里插入图片描述

2.第二次握手

第一次握手是客户端发起的,第二次握手就是服务器端发起的;
别人给你写了信,你收到了肯定就要回信嘛;
那么这个时候我们就可以来看一下参数(为了方便理解,我们暂时将报文信息理解成参数):
第一次握手客户端会给服务端传过去两个参数,其中有一个是:seq=x;
SYN我们先不管,这个seq=x我们就可以看成是写在信里的内容;
第二次握手的时候服务器端给客户端返回的是4个参数,其中有2个是:seq=y;ack=x+1
那么这个ack=x+1我们就可以理解成是回答了客户端写在信里的内容,因为来信是x,客户端接收到来自服务端的x+1的时候就知道自己写出去的东西被收到了;就可以知道自己的发送功能的正常的;同时客户端也能知道自己的接收功能是正常的,因为能够接收来自服务器端的消息;
那为什么服务端也要写出信息seq=x给客户端呢?
因为服务端也不知道自己的发送功能是否正确嘛;
所以在第二次握手里面可以确定的功能是:
在这里插入图片描述

3.第三次握手

第三次握手是客户端发起的,就是这么一来一回的;
在第二次握手里面我们就知道握手和确认功能完善之间的逻辑,那么接下来也只剩下一个功能,就是服务端的接收功能;
服务端怎么知道自己的发送功能是正确的呢?
类比第二次握手我们就知道了,只要收到客户端关于seq的回答就好了;
第二次握手的时候服务向客户端发送了seq=y
seq发出去,那么客户端就要将对信的回复写在ack里面;
所以第三次握手所传的参数里面有ack=y+1,也就是说客户端回复了服务端的seq;
当服务端接收到这个反馈的时候就知道自己的发送功能的正确的了。
在这里插入图片描述

总结

总之呢就是一句话:能接收就说明接收功能正常;但是能发送不一定代表发送功能正常,发送功能需要通过**seq(写信)和ack(回信)**才能判断

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值