TCP连接的三路握手

        本文内容参考《Unix网络编程》,大概描述了TCP连接的三次握手过程,这是我看到的最清楚的描述,记录在这里,希望能帮助到大家对于TCP连接过程的理解。


        传输控制协议(TCP)是TCP/IP协议簇里非常重要的一个协议。它提供客户与服务器之间的连接,并且提供可靠的数据传输功能。关于这个协议的具体规定,请参考相关文献。这里简单讲述一下三路握手。


        建立一个TCP连接时会发生以下几个过程:

        1.服务器必须做好接受外来的连接的准备。这个过程通过调用socket、bind和listen这三个函数来完成。

        2.客户通过调用connect发起主动打开。这个过程中,客户发送一个SYN分节告诉服务器,客户将在连接中发送数据的初始序列号。

        3.服务器确认客户的SYN,同时自己发送一个SYN,包含服务器将在该连接中发送的数据的初始序列号。

        4.客户确认服务器的SYN。

        非常形象的一个描述:

        建立TCP连接就好比一个电话系统。socket函数等同于有电话可用。bind函数是在告诉别人你的电话号码,这样他们可以给你打电话。listen函数是打开电话铃声,这样当有外来呼叫时你可以听到。connect函数要求我们知道对方的号码并拨打它。accept函数就好比是被呼叫者接听电话了。当呼叫者听到对方接听之后,就相当于最后一次确认,然后就可以通话了。


TCP连接的三次握手确实会涉及一些资源的浪费,尤其是在网络负载高或者连接频繁建立和关闭的情况下。 首先,三次握手需要在客户端和服务器之间进行三次来回的数据交换,每次握手都需要发送特定的控制报文段。在这些报文段中,需要包含序列号、确认号、窗口大小等信息,以确保连接的可靠性和可用性。而这些数据交换和报文处理需要消耗一定的网络带宽和服务器资源。 其次,由于TCP连接的三次握手中,服务器需要创建并维护相应的状态表来跟踪每个连接的状态和参数,包括序列号、窗口大小等。这些状态表需要占用一定的内存空间,并且需要在连接建立和关闭时进行更新和释放。如果连接频繁建立和关闭,服务器需要不断地创建和删除这些状态表,导致资源的浪费。 此外,三次握手还可能引发一些不必要的超时重传。如果某个握手报文段在网络中丢失或延迟,TCP协议需要等待一定的时间后才会进行重传。这样的重传机制会耗费一定的时间和带宽,并且增加了网络延迟,影响连接的建立速度和性能。 尽管三次握手存在一定的资源浪费,但它是确保连接的可靠性和可用性的重要手段。通过三次握手TCP可以建立起双方之间的信任关系,并确保双方都能够满足建立连接的条件。虽然可能会浪费一些资源,但这是为了保证数据的可靠传输和网络的稳定性。因此,从整体来看,三次握手在保证连接质量的同时还是必要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值