首页 > 代码库 > tcp 状态转换.

tcp 状态转换.

命令行:
root@ubuntu:/home/linson# netstat -apt | grep 3030

server,listen
tcp 0 0 localhost:3030 *:* LISTEN 11170/epoll

server 还没应答之前
tcp 0 0 localhost:3030 *:* LISTEN 11170/epoll
tcp 0 0 localhost:3030 localhost:33092 ESTABLISHED -
tcp 0 0 localhost:33092 localhost:3030 ESTABLISHED 11504/esocket6


应答之后
tcp 0 0 localhost:3030 *:* LISTEN 11170/epoll
tcp 0 0 localhost:3030 localhost:33092 ESTABLISHED 11170/epoll
tcp 0 0 localhost:33092 localhost:3030 ESTABLISHED 11504/esocket6

客户端关闭.服务断还未应答.
tcp 0 0 localhost:3030 *:* LISTEN 11170/epoll
tcp 1 0 localhost:3030 localhost:33092 CLOSE_WAIT 11170/epoll
tcp 0 0 localhost:33092 localhost:3030 FIN_WAIT2 11504/esocket6

服务端应答
tcp 0 0 localhost:3030 *:* LISTEN 11170/epoll
tcp 0 0 localhost:33092 localhost:3030 TIME_WAIT -

服务端应答 之后某几分钟之内.
tcp 0 0 localhost:3030 *:* LISTEN 11170/epoll

 

 

知识点

1)客户端的fin_wait_1在局域网应该是看不到的.猜测是服务端内核马上发送 ack (cfin+1),

  但是服务端的fin是要等待调用close才会发送.

2)客户断的 TIME_WAIT是等待2msl.因为最后一个分组信息是客户端发送的.发送完毕之后.服务端并不会回应.所以

  客户端辛苦一点,迟点下班,万一路由发生错误,还可以再发一次.

3)客户端连续发送2次close,是会导致发送rst?这个要再测试下.

 

tcp 状态转换.