TCP/IP三次握手四次挥手

TCP/IP协议

TCP/IP协议是Internet最基本的协议、Internet国际互联网网络的基础,由网络层的IP协议和传输层的

TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新创数,直到所有数据安全的

传输到目的地。而IP是给Internet的每一台联网设备规定一个地址。

TCP协议的三次握手和四次挥手

 

seq:sequance 序列号  SYN:synchronize 请求同步标志  ACK:acknowledge 确认标志 FIN:Finally 结束标志

TCP最关键的三个步骤:三次握手,传输确认,四次挥手

三次握手是建立连接的过程:

第一次握手:A的TCP进程创建TCB(传输控制块),然后向B发出连接请求报文段。段首部中的 同步位

SYN=1,(SYN报文段不能携带数据,但需要消耗一个序列号)同时选择一个初始序列号seq=x; 这是客户端进入到SYN-SENT(同步已发送)状态

第二次握手:B收到请求连接的报文段,如果同意建立连接,则向A发送确认。在确认报文段中 同步位

SYN=1,确认位ACK=1,确认号ack=x+1(对接受的序列号seq=x的报文段进行确认,并期望接收的下一个报文段的序号seq=x+1)

同时也为自己选择一个初始序列号seq=y,这是服务器进入SYN_RCVID状态

第三次握手:A收到B的确认后,再向B发出确认。确认ACK=1、确认号ack=y+1(对接受的序列号seq=y的报文段进行确认,并期望

接收的下一个报文段的序号seq=y+1)。这是A进入到ESTAB-LISHED状态。当B接受到A的确认后,也进入ESTAB-LISHED状态。连接建立完成。

同步位SYN:在建立连接时用来同步序号;当SYN=1,ACK=0时,表明这是一个连接请求报文段。当SYN=1,ACK=1时,表明这是一个连接接收报文段;

确认位ACK:当ACK=1时,确认号ack才生效。在请求建立连接后(第一次握手后),所有的报文段都必须把ACK置1。

确认号ack:期望收到的下一个报文段的第一个数据字节的序号,比如:B正确接收到了A发送过来的一个报文段,序号是501,数据长度是200字节;这表明B正确接收到了序号501-700的数据。所以,B期望的下一个序号是701,于是B在发送给A的确认报文段中确认号ack=701。

CLOSED:初始关闭状态

LISTEN:监听状态,等待客户连接

SYB-SENT:同步已发送

SYN-RCVD:同步已接收

ESTAB-LISHED:已建立连接

为什么不是两次握手?

这主要是为了防止已失效的请求报文,突然又传到服务器引起错误。

假设采用两次握手建立连接,客户端向服务端发送一个SYN包来请求建立连接,因为某些未知的原因,并没有到达服务器,

为了建立连接客户端会重发SYN包,这次数据包正常送达,服务段回复SYN+ACK之后建立起了连接,但是第一包数据阻塞的

节点突然恢复,第一包SYN包又送达到服务器,这时服务器会误认为是客户端又发起了一个新的连接,服务端认为是两个连接

而客户端认为是一个连接,造成了状态不一致,如果在三次握手情况下,服务端收不到ACK包,自然不会认为连接成功,所以三次握手

本质上来说就是为了解决网络信道不可靠的问题。

四次挥手

A与B想要断开连接,需要经过四次挥手

第一次挥手:A先发送连接释放报文段,段首部的终止控制符FIN=1,序号seq=u(等于A前面发送数据的最后一个序号加1);然后A进入

FIN-WAIT-1(终止等待1)状态,等待B确认。

注意:FIN报文段即使不携带数据也要消耗一个序列

第二次挥手:B收到A的释放连接后,立刻发出确认报文段,确认号ack=u+1,序号seq=v(等于B前面发送数据的最后一个序号1)然后B进入

ClOSE-WAIT(关闭状态)

注意:TCP服务器这时会通知高层应用进程,从A到B这个方向的连接就断开了,这时TCP连接处于半关闭状态(half-close);但B到A这个方向

的连接并没有断,B仍然可以向A发送数据。

第三次挥手:A收到B的确认报文段后进入到FIN-WAIT-2(终止等待2)状态,继续等待B发出连接释放报文段;若B已经没有数据要发送,B就会向

A发送连接释放报文段,段首部的终止控制为FIN=1,序列号seq=w(半关闭状态可能又发送了一些数据),确认号ack=u+1,这是B进入LAST-ACK

(最后确认)状态,等待A的确认。

特别注意:确认号ack没有变,仍然为上次发送过的确认号u+1

第四次挥手:A收到B的连接释放报文段并发出确认,确认段中 确认位ACK=1,确认号ack=w+1,序列号seq=u+1;然后A进入到

TIME-WAIT(时间等待)状态。当B再接受到该确认段后,B就处于CLOSED状态。

四挥的七个状态:

ESRAB-LISHED:已建立连接

FIN-WAIT-1:终止等待1

CLOSE-WAIT:关闭等待    

FIN-WAIT-2::终止等待2

LAST-ACK:最后确认

TIME-WAIT:时间等待

CLOSED:关闭

为什么客户端需要等待超时时间:

这书为了保证对方已经收到ACK包,因为假设客户端发送最后一包ACK后就释放了连接,一旦ACK包在网络中丢失服务端

将一直停留在最后确认状态。

如果客户端发送最后一包ACK包后,等待一段时间,这时服务端因为没有收到ACK包,会重发FIN包,客户端会响应这个FIN包

重发ACK包并刷新超时时间。

这个机制跟三次握手一样,也是为了保证在不可靠数据链路中进行可靠的连接断开确认。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值