TCP三次握手

TCP传输控制协议

	Transmission Control Protocol,简称TCP,Internet传输层协议。提供面向连接,可靠,有序,字节流传输服务。
	在进行数据传输时,应用进程需要先建立连接,后续根据TCP协议来进行数据报文的可靠交付。

在这里插入图片描述

  1. 首先客户端跟服务端都是关闭状态,服务端在启动后,进行端口监听,处于LISTEN状态。

  2. 一次握手: 客户端发送连接请求,SYN=1代表请求服务端建立连接,seq=x表示传输的报文段序列号是x, 客户端状态变为SYN_SENT同步发送状态。

  3. 二次握手: 服务端在收到请求后,同意建立连接,并且发送确认报文段。
    syn=1,同意建立新连接
    seq=y, 服务端给返回确认的报文,加上自己的序列号
    ack_seq=x+1, 表示已经收到seq=x的报文段,期望后修接收x+1序号的报文
    ack=1 确认收到请求报文
    发送完后,服务器状态变为SYN_RCVD同步收到。

  4. 三次握手 客户端对服务器的同意连接报文段进行确认。注意 这次握手可以携带数据。ack=1,seq=x+1,ack_seq=y+1 这个参数就不介绍了。大致跟上面差不多。客户发送ACK报文后,进入ESTABLISHED状态。服务器收到ACK报文后,也进入ESTABLISHED状态。到此连接建立完成。

下面重点来了…
这么解释感觉有点麻烦,也不好记忆。我们可以这样理解三次握手,
TCP不但要建立连接,而且要验证客户端,服务器双方的数据“收发”能力。来我们重新分析下建立连接的过程

  1. 一次握手: 客户端发送连接请求到服务器,那是不是说明客户端向服务端证明了自己有发送数据的能力,是不是呢。
  2. 二次握手 服务器收到连接建立请求,返回同意连接报文。客户端在接收到后,是不是说明服务端向客户端证明了自己有接收数据,发送数据的能力,是不是呢?(解释下:确认一次握手的连接请求已接收到)
  3. 三次握手 客户端再次发送确认报文段给服务器,是不是向服务器证明自己有接收数据的能力,是不是呢?(解释下:确认二次握手的报文数据自己已经接收到。)
  4. 现在回过头来看呢,第一次,第三次握手验证了客户端的收发。二次握手验证了服务器的收发。
  5. 然后连接建立完成。

所以呢,三次握手一次都不能少,要不然没法证明呀。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值