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;
当服务端接收到这个反馈的时候就知道自己的发送功能的正确的了
10-27
3万+
10-27
436