TCP三次握手和四次挥手

1. TCP报文段的首部格式

源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号。
序号:占4字节,在一个TCP连接中传输的字节流中的每一个字节都按顺序编号。也叫报文段序号
确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号
数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始地址有多远。
保留:
紧急URG:
确认ACK:仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定:在连接建立后所有传送的报文段必须把ACK置为1;
推送PSH:
复位RST:
同步SYN在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。因此:SYN=1表明这是一个连接请求或连接接受报文
终止FIN用来释放一个连接,当FIN=1时,表明此报文段的发送方的数据已发送完毕,并要求释放运输连接
窗口:占2字节。窗口指的是发送本报文段一方的接受窗口(不是发送窗口)。窗口值告诉对方:接受方目前允许对方发送的数据量(以字节为单位),TCP以滑动窗口实现可靠传输
检验和:
紧急指针:
选项:

2. 三次握手

第一次握手:client端发送SYN包,请求连接,SYN包中包含内容为SYN=1,seq=x(SYN和自己的序号),此时client进入SYN-SENT状态。
第二次握手:server端收到SYN包,对SYN包进行确认:确认SYN是否为1;并发送SYN+ACK包,ACK=x+1;服务器端进入SYN-RCVD状态。
第三次握手:client收到SYN+ACK包,向服务器端发送确认包ACK,发送完之后,客户端和服务器端进入ESTABLISHED状态,完成三次握手。

3. 四次挥手

第一次挥手:客户端(也可以是服务器)发送连接释放报文,FIN=1,seq=n(n等于前面发送的报文的数据的最后一个字节的序号加1),此时客户端进入FIN-WAIT-1(终止等待1)状态。
客户端发送第一次挥手后,就不能在向 服务端发送数据了

第二次挥手:服务器收到连接释放报文,发出ACK确认报文,ACK=1,并带上自己的序号seq=v,此时服务器端进入CLOSE-WAIT(关闭等待)状态。
Server 第一次响应后,还可以继续向 Client 发送数据,这里只是告诉 Client ,我收到你发送的关闭请求

第三次挥手:服务器端发送完数据之后,发送FIN报文,请求关闭连接,同时服务器进入CLOSE-WAIT(关闭等待)状态。
当服务器端的数据发送完成后,再告诉Client,我这边也可以关闭请求了, 这时Server 就不能再向 Client 发送数据了

第四次挥手:客户端收到服务器端的FIN报文,然后向服务器端发送确认报文(ACK报文),然后客户端进入TIME-WAIT状态,服务器端在收到确认报文后,就关闭连接(进入CLOSED状态),客户端在等待2MSL时间后如果没有收到回复,则证明服务器端已关闭,然后客户端关闭连接。

提示:MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

4. 为什么要三次挥手(两次不行)?

为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

5. 为什么要四次挥手(三次不行)?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值