TCP三次握手与释放链接
来源:互联网 发布:智能语音翻译软件 编辑:程序博客网 时间:2024/06/06 02:45
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态
TCP状态图
建立连接和释放需要的信息有:
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
三次握手的过程:
首先由Client发出请求连接即 SYN=1 ACK=0 (请看头字段的介绍), TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x
然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1,
再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.
然后连接建立,为什么要进行三次握手呢(两次确认)。
下面是释放连接的过程:
当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1, 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。 A收到B的确认后进入等待状态,等待B请求释放连接, B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack = u+1(如图), A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。
为什么要等待呢?
为了这种情况: B向A发送 FIN = 1 的释放连接请求,但这个报文丢失了, A没有接到不会发送确认信息, B 超时会重传,这时A在 WAIT_TIME 还能够接收到这个请求,这时再回复一个确认就行了。(A收到 FIN = 1 的请求后 WAIT_TIME会重新记时)
另外服务器B存在一个保活状态,即如果A突然故障死机了,那B那边的连接资源什么时候能释放呢? 就是保活时间到了后,B会发送探测信息, 以决定是否释放连接。
- TCP三次握手与释放链接
- TCP链接(三次握手)和释放(四次握手)
- TCP/IP 连接三次握手与释放四次握手
- TCP/IP 连接三次握手与释放四次握手
- TCP/IP协议三次握手与四次握手释放
- TCP三次握手及释放
- TCP 连接管理与释放(三次握手,四次挥手)
- TCP协议采用三次握手建立链接与断开链接
- TCP协议采用三次握手建立链接与断开链接
- TCP/IP四层模型,TCP/IP连接三次握手与释放四次握手
- TCP三次握手及释放连接详解
- TCP三次握手以及释放连接
- 【网络】TCP三次握手建立连接和四次挥手释放链接
- TCP三次握手与挥手
- TCP连接的建立 (三次握手) 和释放 (四次握手)
- TCP连接的建立 (三次握手) 和释放 (四次握手)
- TCP建立连接三次握手和释放连接四次握手
- TCP建立连接三次握手和释放连接四次握手
- UVa 202 - Repeating Decimals(AC)
- Linux C高级编程——网络编程之包裹函数
- 俄罗斯方块游戏的控制面板和消息接收框界面的实现
- 跟我学AngularJs:AngularJs入门及第一个实例
- Tcl -- unset
- TCP三次握手与释放链接
- 《软件架构设计》学习笔记--8--6大步骤4:概念架构设计
- 关于集成支付宝SDK的开发
- 第四章项目5-递归求n的阶乘(1)
- Android 高质量高压缩比图像压缩
- C语言中自己写几个简单的库函数
- 百度地图error code:162
- 内边距
- Mybatis Generator 生成的mapper只有insert方法