My question: How can I know if one transaction is Segwit transaction or not. As far as I know, not all P2SH addresses are segwit addresses.
You can't tell by looking at the transaction output. Segwit has a specific script format which hashes to match the P2SH value. So only the owner of the transaction output knows that it is a segwit output (unless you can guess the owner's public key hash and generate the matching P2SH value). Of course, once the output is spent, you can tell it is a segwith output by looking at the spending input.
There is a BIP for a native segwit address but it hasn't been implemented yet.