TCP协议——三次握手与四次挥手

TCP协议

是一种面向连接的、可靠的、基于字节流的传输层通信协议。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。TCP使用的流量控制协议是可变大小的滑动窗口协议。

 

:在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。


建立连接——三次握手

  • 客户端发送SYN到服务器
  • 服务器收到SYN,发送ACK,SYN到客户端
  • 客户端收到服务端数据,发送确认ACK到服务端,客户端进入ESTABLISHED状态,服务端收到确认也进入ESTABLISHED状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

终止连接——四次挥手

  • 客户端发出连接释放报文FIN到服务端
  • 服务端收到客户端发来的连接释放报文,发送确认包到客户端
  • 服务端将未发送的数据都发送完毕后,发送连接释放报文FIN到客户端
  • 客户端接收到服务端的释放连接报文,发送确认包到服务端,进入TIME_WAIT状态,服务端收到应答立马关闭此连接。

 

为什么建立连接握手需要三次而不是两次?

防止已经失效的连接请求突然又传送到了服务器,从而产生错误。

举个列子,假使客户端发送了一个连接请求,但是因为网络的问题该请求滞留的时间比较长,客户端就会认为说“哎,服务器没有收到我发送的请求”,这时候客户端会怎么做呢?再次发送连接请求,假使这次连接建立成功,那么客户端在发送完毕之后断开,刚好之前滞留的连接请求到达了服务器,这时候客户端和服务器再次建立了连接,浪费了资源。

 

为什么连接需要三次握手而断开需四次挥手?

这是由于TCP的半关闭造成的。

在建立连接时,SYN和ACK可以一同发送到客户端,而断开连接时,只是客户端不再发送数据了,但还可以接收数据,服务端也不一定所有数据都已经传给对方,所以就可以先发送数据,之后再去发送FIN报文,所以就需要四次挥手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值