博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP状态迁移以及三次握手
阅读量:4072 次
发布时间:2019-05-25

本文共 916 字,大约阅读时间需要 3 分钟。

目录


1.TCP状态转换图

2.三次握手过程

         Client                                                                Server

Send SYN(seq==j)                          ---------->   Receive SYN(seq==j)
Receive SYN(seq==k,ACK==j+1)  <----------    Send SYN(seq==k,ACK==j+1)
Send ACK(ACK==k+1)                   ---------->   Receive ACK(ACK==k+1)
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),待发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
其中,这三次握手的过程中,包含了下面的这些概念:

1).未连接队列

在TCP建立连接的过程中,服务器会维护一个未连接队列。该队列会为每一个客户端的SYN包(syn==j)开辟一个条目,表示服务器已经收到SYN包,并向客户端发出了确认,正在等待客户端的确认包。这些条目所代表的连接在服务器中处于SYN_RECV状态,当服务器收到客户端ACK时,这些条目被删除,服务器进入ESTABLISHED状态。
2).Backlog参数
这个参数用来表示未连接队列的最大容纳数目。SYN+ACK重传次数。服务器发送完SYN+ACK后,如果没有收到客户端的ACK,服务器进行首次重传。如果等待一段时间后,任然没有收到客户端ACK, 则进行第二次重传。以此类推,如果重传次数超过了系统规定的最大重传次数,系统会将该连接信息从半连接队列中删除。另外,每次重传等待时间不一定相同。
3).半连接存活时间
表示半连接队列的条目存活的最长时间,也即服务器从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。也称之为Timeout时间、SYN_RECV存活时间。

你可能感兴趣的文章
轮番图
查看>>
设置label.text的行间距
查看>>
判断当前网络
查看>>
创建操作/删除多行数据的UITableView的细节
查看>>
验证码倒计时
查看>>
动态设置Cell的高度
查看>>
取消tableView多余的横线
查看>>
NSString MD5加密
查看>>
自定义导航条返回按钮
查看>>
数字字符串转化为时间字符串
查看>>
获取iOS版本号
查看>>
获取 一个文件 在沙盒Library/Caches/ 目录下的路径
查看>>
图片压缩
查看>>
检测缓存文件是否超时
查看>>
十进制字符串转十六进制字符串
查看>>
属性字符串(富文本)的使用
查看>>
cell上label的背景颜色在选中状态下改变的解决办法
查看>>
GPS定位
查看>>
地图、显示用户位置、大头针
查看>>
自定义大头针
查看>>