l TCP连接
TCP连接(Transmission Control Protocol的含义是::该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。
区别:
IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。
而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP还可以负责恢复。
简言之:传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC 793说明。在简化的计算机网络OSI模型中,它完成运输层所指定的功能。
那么什么是TCP的三次握手机制呢?
我们知道,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用的是通过三次握手建立一个连接。那么究竟过程是怎么样的呢?
TCP的连接和建立都是采用客户服务器方式。主动发起连接建立的应用进程叫做客户(client)。被动等待连接建立的应用进程叫做服务器(server)。
我们看下面这张图:
或者这幅图:
上图中的字母是标志位:
SYN(synchronous建立联机) ;ACK(acknowledgement 确认);SEQ(序列号)
TCP连接的建立(以第二张图分析):
第一次握手:客户端向服务器问好,问咱俩能不能通信,并告知服务器自己的序列号为x,其中x为机器随机产生的一个数字。表明传送数据时的第一个数据字节的序号是 x。SYN表示建立联机,A(客户端) 的 TCP 向 B(服务器) 发出连接请求报文段,其首部中的同步比特 SYN 应置为 1。
第二次握手:B 的 TCP 收到连接请求报文段后,如同意,则发回确认。
B 在确认报文段中应将 SYN 置为 1,其确认号应为 x+1,同时并告知客户端自己的序列号为y,其中y也是随机生成。
第三次握手:A 收到此报文段后,向 B 给出确认,其确认号应为 y+1。表示客户端接收到来自服务器的确认号x+1时,知道服务器答应与自己通讯了,于是置下一次正式传输数据开始的序列号为x+1,同时置确认号为y+1,表示告知服务器我收到你的应答了,数据传输可以开始。
A 的 TCP 通知上层应用进程,连接已经建立。当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。
至此,连接建立,其实这在我们的生活中也能找到实例,比如:我们想要去拜访一位高人,比如像古代的那些高人,又比如像古代的哪些大观们,小的官员想要去拜见他们,就得必须提前预约,不可能你什么时候去,他就什么时候接待你,所以预约的过程就是一个握手协议。
首先:客人(小官)问主人(大官)有没有空或者时间接受来访。发出了一个讯息。
其次主人回应客人自己不忙或者说闲暇的时候就可以来访。不过计算机中较现实更进一步,不仅说自己什么时候有时间,还会询问客人的时间表。
再次客人收到讯息,在主人给的闲暇的时间段里选一个合适的时间点去,这样连接或者拜访就建立起来了。
连接的建立需要解决一些问题:
一、要使每一方能够确知对方的存在。
二、要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。
三、能够对运输实体资源(如缓存大小,连接表中的项目等)进行分配。
其实和拜访还是相同的,我们去拜访一个人,首先这个人肯定得存在,不然我们去拜访什么啊,我们不仅知道我们拜访的人,被拜访的人也必须知道我们要去拜访他,不然他不在或者就不知道这么回事,那么拜访也就无从成功建立。
我们拜访一个人,人家肯定不是每天都有时间的,像那些大官们日理万机的,我们在拜访之前必须确定拜访的时间的长短,看小官的诚意够不够,等等,只有在这些问题商议达到一致之后,才能进行拜访呢。
当然,如果小官的要求我们满足不了,或者说小官要求托办的事情大官无能为力,那么这拜访也是不成功的。所以这样对应计算机中的三次握手,同样和网上购物也有同样的相似之处,你也得你发出订单,对方收到后给予回应,并发货,你收货后,点确认收货,至此,买卖协议完成了。
三层握手看似很不好理解,把它生活化也许就好理解了。