TCP三次握手 和四次挥手

简介:

1 .TCP三次握手(重点)

1.1         TCP报文字段详细说明

              

wKioL1lt1rGiy0olAADk2OC_pRE411.jpg-wh_50             

1.     【源端口】 ---字段说明(占用16bit,即2个字节),表示网络访问来源处的端口号,即指定了发送端的端口。

2.     【目的端口】---字段说明(占用16bit,即2个字节):表示网络访问目的处的端口号,即指定了接受段的端口号。

说明:由上面可以看出,源端口和目标端口都是占用了16bit/2字节,因此也可以通过计算得知源目标端口范围是2的16次方=65536。

3.     【序列号】---字段说明(占用32bit,即4字节):每一个TCP报文段都会有一个序号,序号字段的值其实是本报文段所发送的数据的第一个字节的序号。这是因为TCP是面向连接的可靠服务,其每一个字节都会对应一个序号,通过序号来确保服务的可靠性和有序性。标识数据包传输的顺序,便于数据包拆分后,进行重新组装。

4.     【确认号】---字段说明(占用32bit,4字节),确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。简单理解就是发送端发送一个seq序列号x,接收端需要回复一个确认号x+1;并发送一个序列号Y,发送端接收一个seq序列号Y,接收端需要回复一个确认号y+1。

5.     【数据偏移】---字段说明(占用4bit:其实他本质上就是首部长度,因为数据偏移是指TCP报文段的数据部分的起始处距离TCP报文段的起始处的距离,数据偏移总共占用4bit,因此最大能表示的数值为15,而数据偏移的单位是“4字节

置位概念:根据TCP的包头字段,存在三个重要的标识ACK SYN FIN

  • ACK:位数字为1,表示确认收到发送请求,表示确认位。

  • SYN :位数字为1,表达式建立TCP连接。

  • FIN:数字为1,表示断开TCP连接。

  •          TCP三次握手建立过程简单说明:

wKioL1lt1tiD8dH8AADbr31xT78025.jpg-wh_50

1)       由主机A发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中SYN字段置位1,表示需要建立TCP连接请求。

2)       主机B会回复发送的TCP连接请求报文,其中包含seq序列号,也是由回复段随机生成的,并且将回复报文的SYN字段置1,而且会产生ACK验证字段ack验证字段数值是在A发过来的seq序列号基础上加1进行回复;并且还会回复ack确认控制字段,以便A收到信息时,知晓自己的TCP建立请求已得到确认。

3)       A端收到B端发送的TCP建立请求后,会使自己的原有序列号加1进行再次发送序列号,并且再次回复ACK验证请求,在B段发送过来的seq基础上加1进行回复;同时也会回复ack确认控制字段以便B收到信息时,知晓自己的TCP建立请求已经得到了确认。


1.3         TCP三次握手状态转换说明:

wKioL1lt1vjzZUt3AADSKbJi2fo520.jpg-wh_50

  • 首先,建立连接之前的服务器和客户端的状态都为CLOSED。

  • 服务器创建socket后开始监听,变为LISTEN状态。

  • 客户端请求建立连接,向服务器发送SYN报文,客户端的状态变为SYN_SENT。

  • 服务端收到客户端的报文后向客户端发送ACKSYN报文,此时服务器的状态变为SYN_RCVD。

  • 然后,客户端收到ACK,SYN,就向服务器发送ACK,客户端状态变为ESTABLISHED。

  • 服务器收到客户端的ACK后也变为ESTABLISHED。

此时3次握手完成,连接建立。


2 TCP四次挥手过程(重点记忆)

wKiom1lt1x3AzeOCAACVOJ4STFE898.jpg-wh_50


2.1         TCP四次挥手状态转换简单说明:

由于tcp连接时全双工的,断开连接会比建立连接麻烦点。

  • 客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1。

  • 服务端收到FIN后向客户端发送ACK,服务器状态变为CLOSE_AWIT。

  • 客户端收到ACK后就进入FIN_WAIT2的状态,此时连接已经断开了一半,如果服务器还有数据要发送给客户端,就会继续发送。

  • 直到发送完了,就发送FIN报文,此时服务器就进入LAST_ACK状态。

  • 客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态,再过了2MSL时间后进入CLOSED状态,服务器收到客户端的ACK就进入CLOSED状态。

 1. 2MSL介绍

     主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime

      (最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。

      MSLRFC 1122上建议是2分钟,而源自berkeleyTCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。

 

 2. time_wait状态作用说明

      TIME_WAIT状态存在的理由:

    1)可靠地实现TCP全双工连接的终止

在进行关闭连接四路握手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN


因此客户端必须维护状态信息允许它重发最终的ACK。如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connectionresetSocketException)


因而,要实现TCP全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节的丢失情况,主动关闭的客户端必须维持状态信息进入TIME_WAIT状态。


  2)允许老的重复分节在网络中消逝

TCP分节可能由于路由器异常而迷途,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后 也会被送到最终目的地,这个原来的迷途分节就称为lost duplicate


 在关闭一个TCP连接后,马上又重新建立起一个相同的IP地址和端口之间的TCP连接,后一个连接被称为前一个连接的化身  incarnation),那么有可能出现这种情况,前一个连接的迷途重复分组在前一个连接终止后出现,从而被误解成从属于新的化身。


为了避免这个情况,TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TCP连接的时候,来自连接先前化身的重复分组已经在网络中消逝。

 

 wKioL1lt13Gw4b1IAADcmRcGGHI103.jpg-wh_50


图1-1 TCP11种状态集转换图


本文转自写个博客骗钱博客51CTO博客,原文链接http://blog.51cto.com/dadonggg/1948687如需转载请自行联系原作者

菜鸟东哥
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
缓存 网络协议 安全
TCP通信机制:三次握手、四次挥手、滑动窗口
TCP通信机制:三次握手、四次挥手、滑动窗口
610 1
TCP通信机制:三次握手、四次挥手、滑动窗口
|
网络协议
TCP/UDP相关-三次握手四次挥手以及为什么三次握手-如何实现可靠UDP传输
TCP/UDP相关-三次握手四次挥手以及为什么三次握手-如何实现可靠UDP传输
110 0
|
缓存 网络协议 安全
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
TCP三次握手四次挥手及常见问题解决方案
|
网络协议 测试技术
软件测试|TCP三次握手四次挥手
软件测试|TCP三次握手四次挥手
107 0
软件测试|TCP三次握手四次挥手
|
网络协议
TCP三次握手与四次挥手
TCP三次握手与四次挥手
128 0
|
网络协议 网络性能优化
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(下)
|
缓存 网络协议 网络性能优化
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
计算机网络【UDP与TCP协议(三次握手、四次挥手)】(上)
|
网络协议
TCP/IP协议的介绍
TCP/IP协议是众多协议的统称,通过分层结构来管理。可分为七层模型或四层结构
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
211 0
IP协议, TCP协议 和DNS 服务分别是干什么的?