在网络的学习过程中,常常听人提及TCP/IP ,但TCP/IP究竟是什么?
在这里我们首先需要明白的,是何为协议族——一系列相关协议的集合,称为一个协议族。同时,指定一个协议族中的各种协议之间的相互关系并划分需要完成的任务的设计,称为协议族的体系结构和参考模型。而现在便可以解释开篇所提出的TCP/IP 了——它是实现Internet体系结构的协议族。
在TCP/IP这个大家族里,它不仅有我们所熟知的TCP与IP协议,还有诸如ARP、ICMP、IGMP、UDP、SCTP等一系列协议,她们一起组成了一个协议的集合,便是TCP/IP协议族。
而在解释了常常提及的TCP/IP究竟是什么之后,我将浅谈TCP的连接原理和过程。
TCP(Transmission Control Protocol 传输控制协议)属于传输层通信协议,但与使用了相同网络层(IPv4或IPv6)的UDP不同,TCP更是一种面向连接的、可靠的、基于字节流的协议。不仅如此,TCP还是一种单播协议——同时,它给程序提供的是一种全双工服务与点对点的服务。
而术语“面向连接的”,是指只用TCP的连个应用程序必须在它们可交换数据之前,通过相互联系来建立一个TCP连接——所以TCP也是一种握手协议,即主要用来让客户端及服务器确认彼此的身份的一类网络协议。
在一个TCP连接中,往往由一个四元组构成,它们分别是两个IP地址和两个端口号,而一个IP地址和一个端口的组合被称为一个端点(endpoint)或套接字(socket),所以更准确的说,一个TCP连接是由一对端点或者套接字构成,其中套接字用(IP地址:端口号)表示。
一个TCP连接通常分为三个阶段:建立、会话和结束。
建立一个TCP连接,需要完成以下步骤:
1.客户端发送一个SYN报文段,并指明自己想要连接的端口号和它的客户端初始序列号(Seq(a))。
2.服务器也发送自己的SYN报文段作为响应,并包含了它的初始序列号(Seq(b))。此外,为了确认客户端的SYN,服务器将其包含的Seq(a)数值加1后作为返回的ACK(a+1)。因此,每发送一个SYN,序列号就会自动加1——所以如果出现丢失的情况,该SYN段就会加1。
3.为了确认服务器的SYN,客户端将Seq(b)的数值加1后作为返回的ACK(b+1)。
通过发送上述的三个报文段,便可以完成一个TCP连接的建立,所以TCP的建立也常常被称作三次握手。
关闭的步骤:
1, Client发送一个FIN——Seq(q)表示Client要发送的数据已经发送完成,请求结束连接。
2, Server收到Client的FIN后,会向Client发送一个ACK(q+1),表示收到了Client的FIN请求。
3, 当Server完成向Client的数据传输后,向Client发送一个FIN——Seq(p)表示Server已经完成发送。
4, Client接收到Server的FIN后,向Server发送一个ACK(p+1)表示确认收到Server的FIN。
通过发送上述的四个报文段,便可以关闭一个TCP会话,所以TCP的结束也常常被称作四次握手。
而TCP连接中的会话过程,只需要两次握手。
至此,一个TCP的连接过程已经结束了。