how tcp stack distingue cerrar y cerrar?
Como sabemos que:
///////////////////////////////////////////////// ////////
close () terminará ambas direcciones en una conexión tcp
shutdown () puede bloquear la comunicación en una o ambas direcciones
///////////////////////////////////////////////// ////////
aquí, lo que me intrigó es cómo tcp stack puede distinguirlos.
He escrito un programa de ejemplo:
primero uso:
....
connect(192.168.1.100) //there is a server process running in 192.168.1.100
....
close(socketfd);
sleep(1000);
Entonces uso wireshark para volcar los paquetes:
01 -->syn
02 <--syn,ack
03 -->ack
04 -->fin,ack
05 <--ack
netstat -an | grep 192.168.1.100
Lo he ejecutado durante unos 5 minutos, imprime:
"tcp 0 0 ... FIN_WAIT2" al principio, luego de aproximadamente 2 minutos no hay salida, parece que la conexión se ha destruido.
then, yo uso:
....
connect(192.168.1.100)
....
shutdown(socketfd,SHUT_WR);
sleep(1000);
use wireshark para volcar los paquetes:
01 -> syn
02 <- syn, ack
03 -> ack
04 -> aleta, ack
05 <- ack
...
netstat -an | grep 192.168.1.100
ejecútelo durante unos 10 minutos, siempre imprime: "tcp 0 0 ... FIN_WAIT2"
desde la salida de wireshark, parece que no hay diferencia para cerrar y apagar,
pero a partir de la salida de netstat, su comportamiento es diferente.
so por qué el comportamiento es diferente?