2020-09-07

三次握手

在这里插入图片描述
一、TCP报文格式
在了解三次握手和四次挥手之前,先知道TCP报文内部包含了那些东西。
1.TCP报文中的源端口号和目的端口号,同IP数据包中与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接的意思:双方都需要保存对方的信息。例如:ip、端口
2.报文主要段的意思
序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号
确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序号加1.只有ACK=1才有效。
ACK:确认序号对的标志,ACK=1表示确认序号有效,ACK=0表示报文不含确认序号的信息。
SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接。
FIN:结束标志,用于释放连接,为1表示关闭本方数据流。
二、“三次握手”
2.1三次握手的过程
建立TCP连接时,需要客户端和服务端发送三个包
第一次:客户端发送初始序号X和SYN=1请求标志。
第二次:服务器发送请求标志SYN,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ACK=x+1.
第三次:客户端发送ACK确认号,发送自己的序号seq=X+1,发送对方的确认序号ACK=Y+1。
2.2 三次握手过程分析
第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x.
第二次:服务器发给客户端,客户端知道自己发送,接收正常,服务器接收,发送正常。ACK=1,ack=X+1,SYN =1,seq=y
第三次:客户端发给服务器,服务器知道客户端发送,接收正常,自己接收发送也正常。seq=x+1,ACK =1,ack=Y+1.
上面Fenix过程可以看出,握手两次都达不到让双方都得到自己,对方接收,发送能力都正常的结论。
三、四次挥手
3.1 四次挥手的过程
一次挥手:客户端发出释放FIN =1,自己序列号seq=u,进入FIN-WAIT-1状态。
第二次挥手:服务器接收到客户端的消息后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己序列号seq=v,进入CLOSE-WAIT状态。
第三次挥手:客户端接收到服务器确认结果后,进入FIN-WAIT-2状态,此时服务器发送释放FIN=1信号,确认标志ACK=1.确认序号ack=u+1,自己序号seq=w,服务器进入LAST_ACK(最后确认状态)。
第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过两个最长报文段寿命后,客户端CLOSE;服务端收到确认后,立刻进入close状态。

3.2 四次握手过程分析
第一次:客户端请求断开,seq=u
第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
四、其它问题
4.1为什么三次握手和四次挥手
三次握手时,服务器同时把ACK和SYN放在一起发送到客户端哪里。
四次挥手时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了,但是还能接收数据,己方是否现在发送数据通道,还需上层来决定,因此,己方ACK和FIN一般都不会分开发送。
4.2为什么客户端最后还要等待2MSL?
客户端保证最后一次发送的ACK报文到服务器,如果服务器未收到,可以请求客户端重发,这样客户端有时间再发,重启2MSL计时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值