原来的时候经常见这个tcp状态转换图,可是因为平常接触不到,没有认真的思考过,今天在部门里面展开了小讨论,终于自己解开了疑惑,也帮助了别人一把,呵呵,现在终于有一把直观的认识了。 这里有个概念需要澄清一下:linux连接跟踪ipconntrack的tcp状态转换图和经典的tcp状态转换图是有差别的,原因就是因为他们的用途是不一样的。ipconntrack作为连接跟踪其主要目的是跟踪一个连接两个方向的状态,而经典的tcp状态转换图都是基于...
状态转换图中状态的描述: CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WAIT1:应用说它已经完成 FIN_WAIT2:另一边已同意释放 ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时尝试关闭 TIME_WAIT:另一边已初始化一个释放 LAST_ACK:等待所有分组死掉 tcp/IP状态转换图的分...
上两周无意中讨论起这个话题,发现andy同学对此甚为熟悉,于是叫他给大家分享了一下,在这里做一个沉淀。
这是网络编程的基础,tcp的状态转移图说到底就是一个状态机的不同状态之间的转换关系以及触发这些状态需要的条件,一共存在11个状态,我们来逐一分析:
本帖最后由 gta 于 2010-03-21 13:18 编辑 两个问题 (1)考虑如下情景: client和server建立了tcp连接,client发送1字节数据给server,然后close socket。client端的close操作会导致一个fin被发送给server。因为网络问题,fin到达server时,先前发送的一字节数据还未到达,此时server是ack这个fin segment,还是ack 客户端最初的syn segment,好使客户端重发数据? (2)tcp在FIN_WAIT_1和LAST_ACK状态中,如果2msl时间内收不到另...
本帖最后由 gta 于 2010-03-21 12:54 编辑 两个问题 (1)考虑如下情景: client和server建立了tcp连接,client发送1字节数据给server,然后close socket。client端的close操作会导致一个fin被发送给server。因为网络问题,fin到达server时,先前发送的一字节数据还未到达,此时server是ack这个fin segment,还是ack 客户端最初的syn segment,好使客户端重发数据? (2)tcp在FIN_WAIT_1和LAST_ACK状态中,如果2msl时间内收不到另...
CLOSED: 表示初始状态。 LISTEN: 表示服务器端的某个SOCKET处于监听状态,可以接受连接。 SYN_SENT:在服务端监听后,客户端SOCKET执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务端的确认 SYN_RCVD: 表示服务端接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立tcp连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一...