理论教育 TCP连接建立技术-计算机网络技术

TCP连接建立技术-计算机网络技术

时间:2023-11-22 理论教育 版权反馈
【摘要】:序号的引入最初的目的是为了解决因时延所带来的TCP报文段失序到达的问题,但会看到它在TCP连接的建立以及流量控制中同样会起到关键作用。图6-1三次握手首先,主机A发送一个SYN标志位置位的TCP报文段,在这个SYN报文段中,指明要打算连接的主机B的端口,同时告知对方这个SYN报文段的序号为为i。telnet是应用层协议,该协议在运输层采用TCP协议进行连接和释放。将捕获到的3个TCP报文段分别与三次握手的连接过程相对应。

TCP连接建立技术-计算机网络技术

可以想像,假设网络是可靠的,那么对于一个连接的建立只需要A向B发送一个连接请求,而B向A返回一个确认就可以确定一条连接了。通常把这样的过程称为“二次握手”。

然而对于IP提供的不可靠网络服务,二次握手的条件对于确定一条连接而言已经不再是充分的了。因为在这个过程中,A对B的请求可能丢失,而B返回的确认也同样可能丢失。

TCP采用的是一种带有序号确认的“三次握手”方式。TCP协议将传输的每一字节都分配一个序号。序号的引入最初的目的是为了解决因时延所带来的TCP报文段失序到达的问题,但会看到它在TCP连接的建立以及流量控制中同样会起到关键作用。

图6-1所示为典型的三次握手过程,不但对连接请求进行确认,而且对双方的初始序号也进行确认。

978-7-111-31053-2-Chapter06-2.jpg

图6-1 三次握手

首先,主机A发送一个SYN标志位置位的TCP报文段,在这个SYN报文段中,指明要打算连接的主机B的端口,同时告知对方这个SYN报文段的序号为(SN)为i。

接着,主机B发回一个ACK标志位置位的TCP报文段,表示同意建立连接,并把自己的初始序号j告知主机A。与此同时,这个ACK报文段中还包含对主机A初始序号的确认,即将确认序号(AN)设为i+1,表示序号i+1以前的字节都已正确接收,准备接收序号为i+1的字节。

最后,主机A回送一个ACK报文段,确认B的响应,确认序号为j+1。这个ACK报文段的序号为i+1。

这就是一个典型的三次握手过程。可以看到,三次握手过程完成了两个重要功能。一是要通信双方都知道彼此都已经准备好发送或接收数据;二是对双方的初始序号分别进行同步,即对方发送的字节序号应该是自己希望要接收的字节序号,这也是把连接请求报文段称为SYN(同步)报文段的缘由。所以双方的序号都会在三次握手的过程中被发送和确认。

初始序号并不需要从1开始,通常情况下,这个初始序号的选择是随时间变化的,连续两次连接的初始序号相差越大越好。这样做的目的是为了防止在网络中被延迟的请求在以后又被传送的时候,而导致另一方对它做错误的解释。

图6-2演示了报文段延时到达所发生的情况。在A建立新连接期间,一个旧的B的确认在自己的连接已经关闭后到达了A。由于这时A的初始序号SN=i,而与旧的确认中的序号p不再有关系,也就是A认为自己没有发送这样的请求,所以A会发送一个RST报文段拒绝这个旧的确认,而不会因为它的到来而影响到当前合法的新连接的建立过程。但是显然,如果初始序号没有随时间变化,这样延时到达的旧确认就会引起打断新连接建立的危害。(www.daowen.com)

978-7-111-31053-2-Chapter06-3.jpg

图6-2 三次握手中收到旧的确认的情况

通过三次握手的过程,主机A与主机B就可以确认建立了一条逻辑的连接。而一旦连接建立,数据就可以同等地在两个方向上进行全双工传输。

现在看一个TCP连接建立的实例。在命令行下使用telnet命令连接BBS网站。telnet是应用层协议,该协议在运输层采用TCP协议进行连接和释放。当执行命令“telnet bbs.nankai.edu.cn”访问南开大学BBS网站时,利用抓包软件Wireshark得到如图6-3所示的结果。

978-7-111-31053-2-Chapter06-4.jpg

图6-3 三次握手的实际例子

图中第一行分别对应包顺序、时间、源IP地址、目的IP地址、包类型。第二行为具体的包信息。可以看到,捕获到3个TCP报文段。192.168.102是主机(客户端)的IP地址,202.113.16.117是BBS服务器的IP地址。

将捕获到的3个TCP报文段分别与三次握手的连接过程相对应。第一个报文段由客户端发送,带有SYN标志,即第一次握手的请求连接SYN报文段,其中初始序号(Seq,即SN)为2901805352。

第二个报文段是服务器发回的ACK确认响应,包含服务器自己的初始序号4125779264,同时带有SYN和ACK标志,确认序号为2901805353,即客户端初始序号2901805352+1。

第三个报文段是客户端对服务器的SYN报文段进行确认。确认序号为4125779265,是服务器端的初始序号+1。序号为2901805353,为自己客户端的初始序号+1。可以看到,该实际的抓包结果与所描述的三次握手过程一一对应。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈