TCP的几个状态

TCP的几个状态

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

其中,对于我们日常的分析有用的就是前面的五个字段, 它们的含义是:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。

其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,
如果只是单个的一个SYN,它表示的只是建立连接。 

TCP的几次握手就是通过这样的ACK表现出来的。
但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。
RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。
一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。
PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。
概念补充-TCP三次握手:
TCP(Transmission Control Protocol)传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:

SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据

转载于:https://my.oschina.net/stephenzhang/blog/383078

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109533.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Oracle中的wm_concat函数用法

    Oracle中的wm_concat函数用法    在日常的数据查询过程中,经常遇到一条信息分多条记录存储,并以同一个ID关联的情况,比如常见的房产证权利人信息,因为共有权人可能有很多,不可能把所有的权利人都放到权利人表的权利人字段,把所有权利人的证件号都放到权利人证件号字段,所以在数据库设计时候,会采用一个权利人一条记录,并以权利ID关联的方式存…

    2022年5月26日
    91
  • 黑苹果MacOS Big Sur 11.0 安装教程及驱动工具

    黑苹果MacOS Big Sur 11.0 安装教程及驱动工具最新黑苹果MacOSBigSur11.0安装教程,附带各电脑EFI驱动合集、原版引导镜像,图文并茂简单易懂…一、准备工作1.一个8G以上的U盘(安装10.15Catalina必须要16G及以上的U盘);2.MacOS镜像、TransMac(刻录工具)、DiskGenius(分区工具)、EasyUEFI(引导工区)、EFI驱动文件。安装工具获取链接:https://pan.baidu.com/s/1pwUVVo1Ud4yxO29k_ckTBw提取码:qs05安装镜像

    2022年6月3日
    156
  • linux源码分析(二)-启动过程

    linux源码分析(二)-启动过程

    2022年3月12日
    41
  • 一阶惯性环节的传递函数表达式_设一力传感器可作为二阶系统来处理

    一阶惯性环节的传递函数表达式_设一力传感器可作为二阶系统来处理具有纯滞后一阶惯性系统计算机控制系统设计具体内容:1)自己给出系统的闭环传递函数的表达式2)自己设定系统性能指标3)书面设计一个计算机控制系统的硬件布线连接图4)硬件布线连接图转化为系统结构图5)选择一种控制算法6)软件工程知识编写程序流程图7)在MATLAB下进行编程和仿真,给出单位阶跃函数的输出结果表8)进行系统的可靠性和抗干扰性的分析计算机控制系统课程设计目录…

    2022年9月1日
    1
  • 金山词霸2009牛津版完整激活成功教程版+绿色精简版下载

    金山词霸2009牛津版完整激活成功教程版+绿色精简版下载山软件推出了最新的《金山词霸2009牛津版》了!这次金山词霸与牛津合作,一次性增加6本牛津词典,这在牛津在全球的翻译软件合作伙伴中也属首次,实属不容易呢,可以说提升了金山词霸在翻译软件类中的权威和经典的形象了。    这次《金山词霸2009牛津版》里面内置了6本牛津词典:《新牛津英汉双解大词典》、《新牛津美语大词典》、《牛津英语习语词典》、《牛津短语动词词典》、《牛津英语搭配词典》、《牛津英语同义

    2022年7月15日
    14
  • git和github gitlab的区别_gitlab和git区别

    git和github gitlab的区别_gitlab和git区别GitHub是在线代码仓库,全世界只有GitHub一家,大家把代码存储在人家的服务器上。Gitlab相当于小型的GitHub,你可以在本地搭建一个属于你自己的类似GitHub仓库,让小伙伴把代码存储在上面,这样代码只有你们几个人能看见,但是你要存在GitHub上,全世界都能看见git是一种版本控制系统,是一个命令,是一种工具gitlib是用于实现git功能的开发库github是一个基于git实现的在线代码仓库,包含一个网站界面,向互联网开放gitlab是一个基于git实现的在线代码仓

    2022年10月23日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号