博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解TCP中的三次握手
阅读量:4005 次
发布时间:2019-05-24

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

理解TCP中的三次握手
2012-07-07 20:29:24
标签:
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。

TCP三次握手

TCP(Transmission Control Protocol) 传输控制协议

TCP是端到端的传输控制协议,提供可靠的连接服务,采用三次握手方式来建立连接。

要理解三次握手流程,需要先了解TCP协议格式,因为在三次握手过程中,发送的都是没有数据,只有报头信息的TCP报文,通过报头中某些字段值的不同含义从而实现连接的建立。TCP报文格式如下:

       

上述的TCP报文格式中每个字段意义已经描述得很清楚,现针对三次握手中要用到的字段再做简单描述,

TCP报文格式中有6位的tcp标志位,每个标志位对应着TCP连接的不同状态,完整的6个标志位组成了TCP连接的完整状态。

具体每个标志位的含义如下:

  1. URG (urgent 紧急 =1时表示Urgent Pointer字段值有效)
  2. ACK (acknowledgement 确认 =1表示Acknowledgement number字段值有效)
  3. PSH (push =1时表示传送数据)
  4. RST (reset =1时表示连接需要复位)
  5. SYN( synchronous =1时表示建立连接,序号同步)
  6. FIN (finish 结束 =1时表示终止连接)

 

三次连接具体过程描述:

          

第一次握手:Client端发送标志位SYN=1,随机产生Seq number=8000的SYN包到Server,此时Client进入SYN_SEND状态。Server根据SYN=1知道Client要求建立TCP连接

第二次握手:Server收到SYN请求后如果允许建立连接,就向Client发送Ack number=8001 (Client的Seq Number+1),随机产生Seq Number=15000,状态标志位,SYN=1,ACK=1的SYN+ACK包,此时Server进入SYN_RECV状态。

第三次握手:Client收到SYN+ACK包后检查Ack number是否正确,是否等于第一次握手中发送的Seq number+1,同时检查标志位ACK是否为1,若两项检查都正确,Client会再次发送Ack number=15001(Server的Seq Number+1),ACK=1的ACK包,Server收到后检查Ack number值与ACK=1无误后则连接建立成功, 此时Client和Server均进入ESTABLISHED状态。

完成三次握手后Client与Server开始传送数据。

 

三次握手过程中报头信息的变化

第一次握手

     SYN包没有携带任何数据,使用了报头中SYN标志位和Seq number字段,其中SYN=1标志请求建立一个连接

第二次握手

     SYN+ACK包也没有携带任何数据,使用了报头中的SYN和ACK标志位,以及Seq Number 和 Ack Number字段,

     其中SYN=1标志Server端同步初始顺序号,以便Server向Client发送信息。

     ACK=1标志已确认收到SYN包,同时给出期望从Client端收到的下一个序号。

     需要注意的是在第二次握手中还定义了动态窗口大小。

第三次握手

     ACK包没有携带任何数据,使用标志位ACK=1以及Seq Number和Ack Number字段

你可能感兴趣的文章
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming 排序函数sorted的可选参数
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
visca接口转RS-232C接口线序
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
关于共享单车定位不准问题
查看>>
终于搞定CString和string之间转换的问题了
查看>>
用防火墙自动拦截攻击IP
查看>>
补充自动屏蔽攻击ip
查看>>
通信和通讯有什么区别?
查看>>
谷歌走了
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>