图解TCP/IP协议

本文详细介绍了TCP/IP协议中的TCP连接建立(三路握手)和断开(四路分手)过程,包括每个阶段的状态转换及目的。通过三次握手确保连接可靠性,防止旧连接干扰新连接,而四次分手则确保数据完整传输和连接彻底关闭。文中还探讨了为什么需要三次握手,以及TCP的超时重传、快速重传、流量控制和拥塞控制机制,最后阐述了TIME_WAIT状态的重要性及其存在的理由。
摘要由CSDN通过智能技术生成

TCP三路握手与4路分手:

连接:主动打开端(一般为客户端)调用connect函数,connect函数处于阻塞状态,发送SYN信号给服务器,客户端进入SYN_SEND状态,服务器接收到SYN信号,服务端进入SYN_RECV状态,accept函数进入阻塞状态,同时发送SYN+ACK信号给主动打开端,主动打开端接收到此信号,connect函数返回,进入ESTABLISHED状态,说明客户端连接已经建立,同时客户端发送ACK信号给服务端,服务端接收到此信号,accept函数返回,进入ESTABLISHED状态,说明连接已经成功建立。在此过程中,若第二路信号客户端没有接收到,则connect函数无法返回,客户端无法进入ESTABLISHED状态,accept函数也就无法返回,若第三路信号服务端没有接收到,则服务端accept函数无法返回,服务端无法进入ESTABLISHED状态,进行下面的接收数据的操作。

 

断开连接:主动断开端调用close函数,close函数进入阻塞状态,发送FIN信号,进入FIN_WAIT_1状态,服务端接收到FIN信号,进入CLOSE_WAIT状态,同时发送ACK信号,然后调用close函数,进入阻塞状态,发送FIN信号,进入LAST_ACK状态,客户端接收到ACK信号,客户端close函数返回,进入FIN_WAIT_2状态,等待接受FIN信号,接收到FIN信号之后进入TIME_WAIT状态,同时也发送ACK给服务端,服务端接收到ACK之后close返回,进入CLOSED状态。

在断开连接的过程中,如果出现以下情况:

 

1、如果两端同时主动打开,发送FIN信号,两端同时接收到FIN,发送ACK,则进入CLOSEING状态,接收到ACK之后然后进入TIME_WAIT状态;

2、如果客户端先接受到FIN,在接收到ACK,则直接进如TIME_WAIT状态;

4路分手分为两个2路,每路的FIN+ACK分别结束一个close函数。

 

TIME_WAIT状态:执行主动关闭的那端,最终进入的状态,该端点在此状态的停留时间是最长生命分节期的2倍(2MSL)。

存在理由:1、可靠的实现TCP全双工连接的终止,2、每成功建立连接时,能够保证来自该连接先前化身的老的重复分节能在网络中消失。

为什么是2MSL呢?我认为服务端等待ACK的最大时间是MSL,若在MSL时间内没有收到ACK,则服务端会重发FIN信号,客户端接收到重发的FIN信号的最长时间也是MSL.

转载:如果 TIME_WAIT 状态保持时间不足够长(比如小于2MSL),第一个连接就正常终止了。 
第二个拥有相同相关五元组的连接出现,而第一个连接的重复报文到达,干扰了第二 
个连接。TCP实现必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT 
状态保持时间足够长(2MSL),连接相应方向上的TCP报文要么完全响应完毕,要么被 
丢弃。建立第二个连接的时候,不会混淆。

 

TCP为什么采用3路握手来建立连接,2路为什么不可以?

说法1、这个问题的本质是信道不可靠,但是通信双方需要就某个问题达成一致,而要解决这个问题,无论在通信中包含什么信息,3次是理论上的最小值,所以3次握手是在不可靠的信道上可靠的传输信息这一需求导致的,既客户端与服务端都需要发送一个信息给对方,然后接收对方的确认信号。

说法2、3次握手的目的是为了防止已经失效的连接请求报文段突然又传回到服务端,因而产生错误,试想一下在以下这一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络节点上长时间的停滞了,一致延误到连接释放以后的某个时间才到达server,本来这是一个早已消失了的报文段,server收到这个报文段之后误认为是client发出的连接请求,server同意建立连接,假设只有两路握手,则server发出确认数据之后连接就建立了,由于现在client没有发出建立连接请求,因此不会理睬server的确认,也不会给server发送数据,但是server一直等待client发送数据,这样server的很多资源就浪费了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

 

 

一下转载自:程序员的那些事。

通过两个图来梳理TCP-IP协议相关知识。TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道。如图1所示,给出了TCP通信过程的示意图。


图1 TCP 三次握手四次挥手


图1主要包括三部分:建立连接、传输数据、断开连接。


1)建立TCP连接很简单,通过三次握手便可建立连接。


2)建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。


3)断开连接的过程也很简单,通过四次握手完成断开连接的过程。


三次握手建立连接:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值