核心知识点:
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次,
而建立连接的过程是连续的,两次请求+一次确认所以就是三次。