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 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...
随机推荐
- centos7+nginx部署asp.net core mvc网站
1. 安装 .net core 可参见官网安装教程. 选择Linux发行版本为Centos/Oracle 添加dotnet的yum仓库配置 $ sudo rpm -Uvh https://packag ...
- java获取真实的ip地址
直接上代码,获取请求主机的IP地址,如果通过代理进来,则透过防火墙获取真实IP地址 public class IPUtil { private static final Logger logger = ...
- lamp环境编译安装curl扩展
Linux编译安装php扩展包curl 1.curl,主要用于发送http请求,是php的一个扩展包. 2.安装过程: (1)curl下载:http://curl.haxx.se/download.h ...
- Elasticsearch5.X IN Windows 10 系列文章(2)
ElasticSearch版本: 5.5.1 (最新稳定版为5.5.2),由于用到IK中文分词插件,最新版本没有5.5.2 ,所以使用5.5.1 日期:2017-08-29 第二章:安装Kibana ...
- shiro session过期后ajax请求跳转(转)
配置了 Shrio框架,session也集成进去了 ,发现问题session会话过期,点击页面,一直请求失败.本来想集成拦截器,过滤器,但是已经用了shiro框架,sessionDestroyed 方 ...
- [PHP开发必备] 走在大牛的路上 phpstudy最全的开发环境搭建
今天给大家分享我最喜欢的一个工具,也是咱php开发攻城狮亦或程序猿必备的开发神器 -- phpstudy最全的开发环境搭建 这也是我的好朋友,日复一日不断更新的成果,大家有钱的捧个钱场,没钱的捧个人场 ...
- staticmethod classmethod修饰符
一.staticmethod(function) Return a static method for function.A static method does not receive an imp ...
- 电脑出现“损坏的图像”窗口提示dll没有被指定在Windows上运行如何解决
电脑中出现了无法运行应用程序的情况,弹出一个“***.exe - 损坏的图像”的窗口,上面提示“***.dll没有被指定在Windows上运行……”,如果我们遇到这样的问题,应该要如何解决呢? 1.我 ...
- Xcode7.3打包ipa文件 报错和解决
An error occurred during export. The file “xxx.ipa” couldn’t be opened because there is no such file ...
- 使用PHP函数输出前一天的时间和后一天的时间
1.明确date()函数和time()函数的功能,其中time()函数是获取时间戳函数 2.输出前一天的当前时间: echo '一天之前的时间为:'.date('Y-m-d H:i:s',time() ...