TCP建立连接和释放链接

TCP是一个十分复杂而又十分有用的协议,是一个网络四层协议,其中TCP建立连接需要三次握手,而断开连接需要四次握手,具体的流程如下图所示。


其中三次握手的状态需要记一下,发送完syn之后进入syn-sent状态,server端开始就处于listen状态,当server端收到syn之后,进入syn-recevied状态,然后发送自己的syn以及对于客户端syn的ack,客户端接收到syn+ack会后进入established状态,同时发送对于客户端syn的ack,当server端收到ack后,也进入established状态。

对于断开开链接,由于tcp是全双工的,因此需要四次才能够断开,这四次中有两次是断开去的连接,还有两次是断开来的连接。首先发送fin的一端还会进入time-wait状态,首先发送第一个fin之后进入fin_wait1状态,收到这个fin的ack之后进入fin_wait2状态,然后收到对面的fin并发送这个fin的ack进入time-wait状态。

time-wait状态的作用:

1)让对方有足够的时间接受ack,如果对方没有收到ack,会重发fin,这一来一回正好是两个MSL(最大分段生存期)。

2)有足够的时间让这个链接和下一个链接不混在一起。

数据传输过程中的sequence number


SeqNum的增加是和传输的字节数相关的。上图中,三次握手后,来了两个Len:1440的包,而第二个包的SeqNum就成了1441。然后第一个ACK回的是1441,表示第一个1440收到了。


### TCP连接与短连接的区别 TCP连接指的是在网络通信中建立一次连接之后,可以多次进行数据传输而必每次都重新创建新的连接。这种方式减少了频繁建立断开连接所带来的资源消耗以及延迟。 对于TCP连接而言,则是在每次请求完成之后立即关闭该连接。这种机制适用于那些交互次数较少或者单次交互量较大的情况,能够快速释放网络资源[^1]。 #### 主要区别如下: - **生命周期** - 长连接在整个应用程序运行期间保持打开状态。 - 短连接仅在特定事务处理过程中维持开放,并在完成后迅速终止。 - **性能影响** - 使用长连接可减少三次握手的时间成本并提高效率,尤其是在高频率的小规模消息交换场景下表现优异。 - 而短连接由于每次都需要经历完整的TCP四次挥手过程来结束会话,因此相对低效但更加节省服务器端口资源[^2]。 - **应用场景** - 实时性强的应用程序通常采用长连接形式以确保持续稳定的通讯链路,比如即时聊天软件、在线游戏等。 - 对于一次性查询操作或是偶尔发生的事件通知类服务则更适合使用短连接模型,因为这类应用需要长时间占用宝贵的连接资源[^3]。 ```python import socket def create_long_connection(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('localhost', 10000) print('connecting to {} port {}'.format(*server_address)) sock.connect(server_address) try: message = 'This is a long connection' print('sending {!r}'.format(message)) sock.sendall(message.encode()) amount_received = 0 amount_expected = len(message) while amount_received < amount_expected: data = sock.recv(16) amount_received += len(data) print('received {!r}'.format(data.decode())) finally: print('closing socket') # Long connections do not close immediately after each request. def create_short_connection(): with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect(('localhost', 10000)) s.sendall(b'This is a short connection') data = s.recv(1024) print('Received:', repr(data)) create_long_connection() create_short_connection() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值