文档章节

TCP的三次握手和四次握手详解

语博兄
 语博兄
发布于 2014/09/15 12:39
字数 967
阅读 61
收藏 0

    TCP,Transmission Control Protocol,传输控制协议。位于第三层传输层。TCP/IP的四层模型从下到上为:链路层(Link layer),网络层(Internet Layer),传输层(Transport Layer),应用层(Application Layer)。对应OSI参考模型的第四层——传输层。三次握手和四次挥手是建立连接拆除连接的详细过程。

    因为TCP是面向连接的服务协议,这一点跟UDP不同。什么是面向连接?简单说就是在传输数据前需要在网络中建立一个虚拟通路,而不需要时再拆除连接。这种服务特性能保证传输质量,是可靠的服务(而UDP是尽力而为的服务,也即放到网络中传输就了事了)。TCP建立连接时的3次握手和拆除时的4次挥手就是面向连接的实例。

    SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)这六个位码是TCP数据中的标志位,每个位对应一个bit,可标识为1或0(默认)。绿色的是今天要讲到的。

    而Sequence number(顺序号码) 是发送方发送消息的序列号,相当于标识每一条消息的id。Acknowledge number(确认号码)是表示确认收到上一条,请对方发送下一条。注意这里的Ack number和标志位Ack不同。Ack只有一位,而Ack number一般为接收到的seq number + 1,不止一位。它们在数据中位于两个不同位置。

    TCP的三次握手是为了建立TCP连接(连接服务器指定端口)进而传输数据。在Socket编程中,由客户端的connect()函数触发三次握手。建立连接的过程也会交换TCP窗口大小的信息。由wireShark就可以抓包看到。

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

    第二次握手:主机B收到请求后要确认联机信息,向A发送Ack number=(主机A的seq+1)=1234568,SYN=1,

ACK=1,随机产生seq=7654321的包,此时B进入SYN_RECV状态,一直到第三次握手之前,AB之间是半连接状态;

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

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

     ------------------------------------------------------------------

    三次挥手是由客户端发起的,而四次挥手不一样,客户端或服务器均可主动发起挥手动作请求关闭,在socket编程中,任何一方执行close()操作即可产生挥手操作。

    第一次挥手: 主动方B向被动方A发送位码FIN = 1, Ack number = x,Seq number = k的数据包,这里的Ack number = x,则表示已收到对方seq = x - 1的数据包,告知对方可发送下一个数据包;

    第二次挥手: 被动方发送Ack number = k + 1,seq = x 的数据包;

    第三次挥手: 依然是被动方发送位码FIN = 1,Ack number = k ,seq = y的数据包;

    第四次挥手: 主动方发送 Ack number = y ,seq = k的数据包。

© 著作权归作者所有

语博兄
粉丝 1
博文 53
码字总数 22168
作品 0
东城
程序员
私信 提问
理论经典:TCP协议的3次握手与4次挥手过程详解

1、前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。 面向连接意味着两个使用TCP的应用(通常是一个客户和一...

JackJiang-
2016/09/26
827
2
【转】跟着动画来学习TCP三次握手和四次挥手

最近看到一篇很通俗易懂的描述TCP三次握手和四次挥手概念的文章,觉得特别好,怕以后找不到了,特意转载在这里学习一下。 原文地址:跟着动画来学习TCP三次握手和四次挥手 作者:老錢 链接:...

欧阳鹏
2018/07/16
0
0
TCP三次握手/四次挥手

TCP 三次握手 TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:...

长平狐
2013/01/06
84
0
TCP/IP协议 三次握手与四次挥手

一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从T...

小和尚敲代码
2016/02/22
67
0
TCP/IP协议三次握手与四次握手流程解析

一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从T...

大鸟地带
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅析大数据 学习大数据后能做什么

大数据时代的到来使得大数据开发人才迎来了前所未有的机遇和挑战!一个绝佳的入行机会摆在了众人面前!于是,很多人都在打听,大数据到底有何应用?可以用来做什么?好程序员今天就为大家作出...

好程序员IT
20分钟前
1
0
C# USB视频人脸检测

此程序基于 虹软人脸识别进行的开发 SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral 前提条件 从虹软官网下载获取ArcFace引擎应用开发包,...

是哇兴哥棒棒哒
31分钟前
2
0
Vagrant虚拟机硬盘扩容

# 停止虚拟机vagrant halt <machine_name># 进入VirtualBox VMs目录,查看并记录原磁盘uuid,留作后用vboxmanage showhdinfo box-disk1.vmdk# 克隆磁盘,vmdk格式无法调整大小,需要...

sskill
33分钟前
1
0
分布式商业萌芽,银行迎来发展新机遇

01 分布式商业萌芽,银行迎来发展新机遇 金融界:近几年区块链的热度经历了过山车般的转折。目前追逐区块链的资本也开始冷静下来,于此同时,各大商业银行对区块链的研究应用也越来越多。您认...

Java领航员
39分钟前
3
0
Spring系列教程六: Spring jdbcTemplate在Dao中的使用

概念 Spring中的jdbcTemplate的主要作用是实现数据的交互,下面我们就在dao层中如何使用jdbctemplate写测试案例 项目目录如下 基于xml实现jdbctemplate 这里我们使用的是JdbcDaoSupport这个类...

我叫小糖主
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部