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 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...
随机推荐
- Spring 读取配置文件(一)
注册 @Configuration 标识的类,spring 读取配置文件的时候该类会被自动装载 package cn.com.receive;import org.springframework.be ...
- 李洪强iOS开发之OC[007] - 李洪强iOS开发之类的声明和实现
类的声明和实现 类是一类具有相同特征和共同行为的集合 小轿车 大卡车 挖掘机 (车) 车类 类名: Car 属性: 颜色 速度 轮字数 共同行为: 跑 停 载人 对象: 是类的具 ...
- obj-fit
该 object-fit CSS 属性指定替换元素的内容应该如何适应到其使用的高度和宽度确定的框. 初始值 fill 适用于 替换元素 遗传 是 媒体 视觉 计算值 按规定 动画类型 离散的 为了规范 ...
- text-encoding正确使用姿势
蓝牙打印,需要转字符串为gb2312到uint8array.果断使用了一把text-encoding,始终不对. https://github.com/inexorabletash/text-enco ...
- MVVMLight-Mensenger 学习笔记
MVVMLight-Mensenger 最近一直在使用WPF,配合美工很容易能搭配出效果不错的UI来,开发效率也明显加快 自己也是最近才开始使用Mvvmlight,通过view和viewmodel分 ...
- 学习lofter 让图片适应各个分辨率的方法
只要图片的分辨率足够大,那么可以任意的width,不用担心失真 那么就可以根据屏幕的分辨率给图片相应的宽度 大分辨率浏览 小分辨率浏览 两个分辨率的图片地址是一样的,排除了换图的可能 大分辨率下的代码 ...
- execute,executeQuery和executeUpdate的区别
在jdbc中有3种执行sql的语句分别是execute,executeQuery和executeUpdate execute执行增删改查操作 execute返回的结果是个boolean型,当返回的是t ...
- xilinx 赛灵思fpga verilog hdl 教程
http://www.eefocus.com/article/08-03/37231s.html http://wenku.baidu.com/link?url=5mdkMmm4BGGi7gRdgSk ...
- UML Rose2003完美破解攻略
Rational Rose 2003 软件project画图软件 ,当然还不止画图,对于那些不想用英文版Rational Rose2003的同志们.这个Rational Rose2003 版本号已经汉 ...
- Activity四种启动方式
Activity启动方式有四种,分别是: standardsingleTopsingleTasksingleInstance 可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大 ...