1.网络7层协议
网络7层协议中,上三层是我们用户层的(application),下四层为内核层,开发人员负责的就是上三层
三次握手是发生在传输控制层的
首先了解三次捂手之前先了解下状态
这里我用win来演示
netstat-ano
这里我是启动了一些服务的
我们可以看到从左到右分别是 协议–本地地址–外部地址–状态–PID
我们可以看到几个熟悉的端口 6379(redis) 8080 40171,40172是我开启的服务端口
可以看到他们的状态都是LISTENING(监听状态)
此时的LISTENING表示服务端已经启动,外部还没有连接进来,正处于监听状态
当我去连接 40171,40172的时候,就会看到 外部地址有地址了,而且状态变成了,ESTABLISHED
当前表示三次握手已经完成可以通信了
现在我们知道了服务的两种状态 LISTENING(监听) 和ESTABLISHED(就绪)
下面我们开来看看其他的状态
这里·我们看到了 第二行SYN_SENT,FIN_WAIT_1 ,TIME_WAIT ,CLOSE_WAIT
这里只有第一个是发生在三次捂手时候的状态其他的都是四次分手的时候
左边客户端,右边服务端
我们可以看到Client一开始状态就是SYN_SENT,之后像服务端发送SYN包,服务端在接受到SYN包之后,进入SYN_RCVD状态,之后把SYN+ACK包发送给客户端,此时客户端进入ESTABLISHED状态,并且返回ACK包,所有操作做完,服务端进入ESTABLISHED状态,
上面我们看到 PID1192状态为SYN_SENT状态,说明他发送给客户端SYN,服务端没有返回SYN+ACK包,所以客户端状态没法更新
SYN_RCVD
SYN_RCVD服务端状态
在客户端启动搞的时候最开始是LISTENING状态,客户端连接之后会进入一个LISTEN-SOCKET,在socket中,客户端没有收到服务端发送的SYN包,所以就进入了SYN_RCVD
当所有状态都进入就绪状态的时候,三次捂手就是完成了,现在可以发送数据了,但是发送数据,怎么发送,往那里发送,这就要进入下一层,这里就不讲了,下面说是四次分手
四次分手
在要断开链接的时候,
未完待续