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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta