核心知识点:

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协议的三次握手和四次挥手机制的更多相关文章

  1. TCP协议的三次握手和四次挥手

    暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...

  2. 网络编程——TCP协议的三次握手和四次挥手

    三次握手原理解析 TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND ...

  3. TCP协议的三次握手和四次挥手过程

    TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...

  4. TCP协议的三次握手、四次挥手

    TCP三次握手 TCP的连接的建立需要发送三个包,一次称为三次握手(Three-way Handshake). 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 ...

  5. TCP协议的“三次握手”和“四次挥手”

    TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三次握手的目的是同步连接双方的 ...

  6. TCP协议的三次握手与四次挥手

    1.数据包说明 1)源端口号(16位):它(连同源主机IP地址)标识源主机的一个应用进程. 2)目标端口号(16位):它(连同源主机IP地址)标识目的主机的一个应用进程.这两个值加上IP报头中的源主机 ...

  7. NetWork——关于TCP协议的三次握手和四次挥手

    分钟. (2)服务器B存在一个保活状态,即如果A突然故障死机了,那B那边的连接资源什么时候能释放呢? 就是保活时间到了后,B会发送探测信息,以决定是否释放连接. (3)为什么连接的时候是三次握手,关闭 ...

  8. 学习http协议的三次握手和四次挥手 ~~笔记

    http协议是基于tcp协议的  所以应该说是tcp协议的三次握手和四次挥手 SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定.建立连接,设置为1 FIN:用来释放一个连接.FIN=1表 ...

  9. TCP 中的三次握手和四次挥手

    Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...

随机推荐

  1. c++ telescoping constructor is NOT supported until c++11

    Telescoping constructor: see Effective Java 2nd Edition Item 2 If you want to use telescoping constr ...

  2. eclipse 断点类别

    行断点 行断点位于一般方法内,双击代码行左边就可以设置行断点: 行断点可以设置条件,右键断点-properties: 1设置效果是第几次到达时暂停,图中所示是当第三次到达时暂停 2是开启条件断点 3是 ...

  3. css中div标签不置顶

    设置div属性垂直对齐方式为:top <div style="vertical-align: top;"></div>

  4. 放苹果(整数划分变形题 水)poj1664

    问题:把M个相同的苹果放在N个相同的盘子里.同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 例子 : 1 7 3 ---------------8 ...

  5. ffmpeg中的x264编码选项,对应关系

    )’ Disabled. ‘variance (1)’ Variance AQ (complexity mask). ‘autovariance (2)’ Auto-variance AQ (expe ...

  6. Spring MVC隐藏字段域

    以下示例显示如何在使用Spring Web MVC框架的表单中使用隐藏字段(Hidden).首先使用Eclipse IDE来创建一个WEB工程,实现在隐藏字段中指定用户编号的功能.并按照以下步骤使用S ...

  7. Oracle数据迁移expdp/impdp

    Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创 ...

  8. unity3d面试题与参考答案

    1.C#程序题 1 2 3 4 5 6 7 8 9 10 11 private static void aaa(int x) { x = 10; }   private static void bbb ...

  9. syntaxerror : unexpected token &

    部署网站到服务器后,添加.修改.删除数据都会出现这个错误,之前都没有出现过. 之前的服务器系统都是windowserver2008,而这次所部署的服务器系统也是2008,只是此服务器一开始并没有安装. ...

  10. 如何获取继承中泛型T的类型

    @SuppressWarnings("unchecked") public void testT() { clazz = (Class<T>)( (Parameteri ...