TCP协议的三次握手过程和四次挥手过程以及为什么要这样? ------一二熊猫

TCP三次连接过程

很久没有复习TCP三次握手四次挥手,复习一下。
在这里插入图片描述
SYN、RST是用于连接的建立和清除,含SYN的报文被叫做SYN报文段。
建立连接时:
第一步,客户端的TCP首先向服务器端的TCP发送一个特殊的TCP报文。该报文段中不包含应用层数据。报文首部包含一个标志位为SYN被置为1,同时客服端选择一个随机的序列号seq(client_isn)并将其放在该起始的TCP SYN报文段中,该报文段会发送给服务器端。报文段中的SYN=1表示这是建立连接报文,seq为客户端的随机序列号。

第二步,一旦TCPSYN报文段的ip数据报到达服务器主机,服务器就会从该数据报中取出TCPSYN报文段,为该TCP分配TCP缓存和变量,并向该客户端发送允许连接的报文段。首先将这个要回复的报文段的标志位SYN置为1,其次将该报文段的首部确认号字段被置为client_isn+1,即ack=x+1;最后服务器会选择自己的初始序号(server_isn)即seq=y,并将其放置到TCP的报文段首部的序号字段中。(这个允许连接的报文段实际上表明了:“我收到了你发起的SYN分组,该分组带有初始序号clien_isn。我同意建立连接。我自己的序列号是server_isn”),该报文段被称为SYNACK报文段。报文段的SYN=1是表示这是建立连接报文,ACK是对客户端报文段的确认,seq=y是服务器发送自己的初始序列号,ack=x+1是指期待接受到对方的下一个字节的序号。

第三步,在收到SYNACK报文后,客户也要给该连接分配缓存和变量。客户主机则向服务器发送另一个报文段。这个报文段对服务器的允许连接报文段进行了确认,客户端将值server_isn+1放置到TCP报文段首部确认字段中来完成此项工作。SYN被置为0,因为已经建立了连接。
其中ACK是对服务器端报文段的确认,seq=x+1是传输给对方自己的下一个报文序号,也就是对上一次接受到服务器报文后给与的序号同步,ack=y+1是期待服务器的下一个字节的序号。

为什么需要三次连接,二次连接不行吗?

三次连接的必要性:
原因一:为了防止重复连接

TCP三次握手主要是为了防止旧的连接引起的重复连接问题。

由于没有第三次握手,服务器只能选择建立连接或拒绝连接,但是服务器并不知道这次连接违不违法,所以每收到一个 SYN 就会建立一个新的连接,服务器就会建立多个冗余的无效链接,造成不必要的资源浪费(SYN洪泛攻击)。若是TCP是三次握手,那么客户在收到ack=x+1的序号后就可以判断当前是否为历史连接,如果是历史连接,客服端就会发送终止报文RST,告诉服务器终止这次连接,若不为历史连接,那么就发送指令给服务器来建立连接。

通俗的说:
假如客户端发出了连接请求,但因为网络波动导致服务器并没有收到来自客户端的请求连接,于是客户端又重发了一次连接请求,客户端和服务器经过两次握手就建立好连接。双方开始传输数据,数据传输完成以后,双方断开连接。过一段时间后,原本在网络传输中搁置的连接请求到达了服务器。服务器以为是客户端又发出来一次新的连接请求,于是就向客户端发送确认报文段,同意建立连接(两次握手只需要服务器发出确认报文段,就建立好连接)。此时服务器一直在等待客户端发送的数据,一直浪费着系统资源。

原因二:为了同步初始化序列

首先客户端发送一个序号为seq=200的数据包给服务器,服务器方接受到后就会返回一个ack=200+1的确认,当客服端前后发送了很多数据报到达服务器端时,由于网络原因,数据包不会按发送顺序到达。服务器对收到的数据包进行确认时只会一个个按序确认,比如发送了ack=900+1的确认数据报,就说明前900序号的数据报都收到了。若是只收到seq=900的数据包而下一个到达的是seq=1000的数据包,那么一般就会将其丢弃掉或者保留下来等待所有失序的数据报到来。

TCP是稳定的网络传输协议,它需要一个序列号来确保自己的稳定性。这个序列号就是为了防止数据报的重复或者漏发,以及解决数据报顺序颠倒问题。当客户端发送一个带初始序列号的报文段到达服务器端时,需要服务器回答一个已经接受到这个初始序列号的ACK应答报文,服务器端发送的数据报中也有服务器方的初始序列号,也需要得到客户端的应答回复,这样一来一回就能确保双方的序列号同步。

TCP四次挥手

当客户应用进程发送一个关闭连接的命令后,客户端TCP会向服务器端TCP发送一个带特殊标志位的报文段,这个特殊标志位为FIN=1;当服务器接收到这个报文段后就向发送方发送一个确认报文段,然后服务器发送它自己的终止报文段,其FIN标志位也置为1。最后,客户端再对这个服务器的终止报文进行确认。这个时候这个TCP连接的所有资源在双方的主机上都被释放了。
具体访问博文:TCP四次挥手

自我学习笔记记载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值