TCP协议的三次握手和四次挥手机制
核心知识点:
1.三次握手:seq和ack number
2.四次挥手:FIN和随机数
一、TCP/IP协议
TCP/IP协议(Transmission control protool/Internet protool)叫做传输控制/网际协议,又叫做网络通讯协议。
这个协议是Internet国际互联网络的基础,TCP/IP协议是网络中使用的基本的通行协议。
虽然从名字上看TCP/IP协议(传输控制协议/网际协议),但是TCP/IP实际上是一组协议,
包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,
而TCP协议和IP协议是保证数据完整性传输的两个基本的重要协议。
通常说TCP/IP是协议簇,而不单单是TCP和IP,TCP协议使用范围极广,是目前异种网络通信使用的唯一协议体系,
适用于连接各种机型,既可用于局域网,也可用于广域网。
TCP/IP是很多不同的协议组成,TCP用户数据报表协议,也称做TCP传输控制协议(Transport Control Protool可靠的主机到主机层协议),
传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种,
两个TCP意思不相同,TCP是一种可靠的面向连接的传输服务,它在传输数据时是分段进行的,主机交换数据必须建立一个对话。
它用比特流通信,即数据被作为无结构的字节流,通过TCP传输的字段指定顺序号,以获得可靠性,
是OSI参考模型的第四层,TCP是使用IP的网间互联网功能而提供可靠的数据传输,
IP不停的把报文放到网络上,而TCP是负责确定报文到达,
在协同IP的操作中TCP负责:握手过程、报文管理、流量控制、错误检测和处理(控制),
可以根据一定的编号顺序对非正常顺序的报文给予重新排列顺序。
传输协议就只有两种,一种是可靠传输协议(TCP),一种是不可靠传输协议(UDP)。
关于TCP协议可以查看:
http://www.cnblogs.com/yangmingxianshen/p/7900531.html
http://www.cnblogs.com/yangmingxianshen/p/7787281.html
二、三次握手和四次挥手
1.三次握手:建立连接
TCP是对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,位码即tcp的标志位。

部分名词解释:
- SYN:建立联机,标识状态
- ACK:确认,标识状态
- PSH:传送
- FIN:结束
- RST:重置
- URG:紧急
- Sequence number:顺序号码
- Acknowledge number:确认号码
第一次握手:主机A发送位码为SYN=1,随机产生seq number=1(假设)的数据包到服务器上,主机B由SYN=123456知道,主机A要求建立连接。
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq number=654321的包。
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ck是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),
ACK=1,主机B收到后,确认seq值与ACK=1,如果正确则连接成功,就可以开始传送数据了。
三次握手的关键的在于seq和ack number上面,前两次握手都会随机生成一个seq随机数,这个随机数将决定下次确认的ack number=(seq+1),
而SYN和ACK可以看作是一种状态,A到B需要发送请求,B到A也要发送请求,所以前两次握手是有SYN的,
而第一次握手是发起状态,所以之后后面两次有确认信息ACK,以及ack number。
2.四次挥手:断开连接
上面已经阐述了TCP请求如何通过三次握手建立连接的过程,现在阐述TCP请求如何通过4次回收来断开连接的,如何保证数据的完整性和安全性的。
由于TCP连接是全双工,因此每个方向都必须单独进行关闭,这个原则是当一方完成它的数据发送任务后就发送一个FIN来终结这方面的连接。
收到一个FIN意味着这一方向没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据,首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

现假设A到B数据传输完毕:
第一次挥手:A发送给B一个FIN,标志数据已经传输完毕,用来关闭A到B的数据传输,同时还发送一个随机数M,类似于seq。
第二次挥手:B收到信息后会返回一个ack=M+1给A,表示已经收到。
第三次挥手:当B的数据传输也结束的时候,B也会给A发送一个FIN,通知A已经传输完毕,同时还发送一个随机数N。
第四次挥手:A收到信息后,返回一个确认信息,ack=N+1给B,通知B自己已经收到了。至此双方都断开连接,标志着整个TCP会话结束。
四次挥手其实是两次单方面的断开连接,为啥需要这样,这样可以保证数据的完整性。
为什是三次握手,四次挥手?
首先要说明的是断开连接并不是连续的,为了保证数据的完整性必须是:请求+确认的模式,所以断开连接就是4次,
而建立连接的过程是连续的,两次请求+一次确认所以就是三次。
TCP协议的三次握手和四次挥手机制的更多相关文章
- TCP协议的三次握手和四次挥手
暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...
- 网络编程——TCP协议的三次握手和四次挥手
三次握手原理解析 TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND ...
- TCP协议的三次握手和四次挥手过程
TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...
- TCP协议的三次握手、四次挥手
TCP三次握手 TCP的连接的建立需要发送三个包,一次称为三次握手(Three-way Handshake). 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 ...
- TCP协议的“三次握手”和“四次挥手”
TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三次握手的目的是同步连接双方的 ...
- TCP协议的三次握手与四次挥手
1.数据包说明 1)源端口号(16位):它(连同源主机IP地址)标识源主机的一个应用进程. 2)目标端口号(16位):它(连同源主机IP地址)标识目的主机的一个应用进程.这两个值加上IP报头中的源主机 ...
- NetWork——关于TCP协议的三次握手和四次挥手
分钟. (2)服务器B存在一个保活状态,即如果A突然故障死机了,那B那边的连接资源什么时候能释放呢? 就是保活时间到了后,B会发送探测信息,以决定是否释放连接. (3)为什么连接的时候是三次握手,关闭 ...
- 学习http协议的三次握手和四次挥手 ~~笔记
http协议是基于tcp协议的 所以应该说是tcp协议的三次握手和四次挥手 SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定.建立连接,设置为1 FIN:用来释放一个连接.FIN=1表 ...
- TCP 中的三次握手和四次挥手
Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...
随机推荐
- 【HDU-5246】超级赛亚ACMer(贪心)
之前用了个nlogn的算法超时了.仅仅能改成n的算法了 大题贪心思路就是 对每一个人的能力值从小到大进行排序,当前能力值为now,那么我们找到一个人的能力使得这个能力值 <= now.now + ...
- 李洪强iOS开发之OC[005] - OC和C的差异学习二
- iOS多线程(转)
关于iOS多线程,你看我就够了 字数8596 阅读28558 评论74 喜欢313 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例 ...
- HDU 5355 Cake(2015多校第六场,搜索 + 剪枝)
Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub ...
- 【藏】使用Entity Framework时要注意的一些性能问题
这篇文章写的很好: http://diaosbook.com/Post/2012/12/9/performance-issue-in-select-one-or-few-colums-via-enti ...
- RPMforge(Repoforge)源
centos使用rpmforge-release 时间:2017-10-09 09:48:29 阅读:536 评论:0 收藏:0 [点我收藏+] 标签:rpmf ...
- MAC信息摘要
MAC(Message Authentication Code ,消息认证码算法)是含有密钥散列函数算法,兼容MD和SHA算法的特性,并在此基础上加入了密钥.因此,MAC也称为HMAC. ...
- go开启多进程——拆分多个进程同时处理(分而治之)
使用了goroutine实现了多线程,使用chan来控制多线程. runtime.GOMAXPROCS(3)来设置最大的原生线程. runtime.Gosched() 显式地让出CPU时间给其他gor ...
- eclipse 查看源代码
文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常是 ...
- rest规范 ; restful 风格; gradel介绍 ; idea安装 ;
[说明]上午整理了一下心情:下午继续开始任务,了解了restful,知道了那个牛人的博士论文,下载了管理工具gradle,并且部署了环境:晚上安装了idea继承环境并且建了一个简单的gradle项目( ...