Escenarios en conexiones TCP Contenidos Algunos recorridos del diagrama de estado TCP ELO-309
Establecimiento y Término de Conexión Active participant Passive participant (client) (server) SYN, SequenceNum = x y , 1 SYN + ACK, SequenceNum = x + Acknowledgment = ACK, Acknowledgment = y + 1 ELO-309
Diagrama de Estado de Transmisión CLOSED LISTEN SYN_RCVD SYN_SENT ESTABLISHED CLOSE_WAIT LAST_ACK CLOSING TIME_WAIT FIN_WAIT_2 FIN_WAIT_1 Passive open Close Send/ SYN SYN/SYN + ACK SYN + ACK/ACK ACK /FIN FIN/ACK ACK + FIN/ACK Timeout after two segment lifetimes Active open /SYN ELO-309
Escenario 1: Establecimiento de una conexión Cliente Servidor CLOSED Active open/SYN CLOSED LISTEN SYN_RCVD SYN_SENT ESTABLISHED CLOSE_WAIT LAST_ACK CLOSING TIME_WAIT FIN_WAIT_2 FIN_WAIT_1 Passive open Close Send/SYN SYN/SYN + ACK SYN + ACK/ACK ACK Close/FIN FIN/ACK ACK + FIN/ACK Time after two segment lifetimes Active open/SYN Passive open Close Close LISTEN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK Close/FIN ESTABLISHED Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN/ACK Close/FIN ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 ACK ACK FIN/ACK TIME_WAIT CLOSED Time after two segment lifetimes ELO-309
Escenario 1: El servidor debe prepararse parra recibir conexiones La aplicación solicita abrir un socket (o punto de conexión en un puerto) CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Servidor Cliente ELO-309
Escenario 1: Un cliente pide abrir un socket y envía un SYN pidiendo establecimiento de conexión CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED SYN Time after two segment lifetimes Time after two segment lifetimes open Cliente Servidor
Escenario 1: Un servidor recibe un SYN y responde con un ACK y SYN CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED SYN Time after two segment lifetimes Time after two segment lifetimes open Cliente Servidor SYN + ACK
Escenario 1: El cliente recibe el SYN + ACK y para él queda establecida la conexión CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED SYN Time after two segment lifetimes Time after two segment lifetimes open Cliente Servidor SYN + ACK ACK
Escenario 1: El servidor recibe su ACK y queda establecida la conexión para él. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED SYN Time after two segment lifetimes Time after two segment lifetimes open Cliente Servidor SYN + ACK ACK Intercambio de mensajes
Escenario 2: Cierre de la conexión por el servidor. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Cliente Servidor
Escenario 2: La aplicación en el servidor solicita un close del socket. Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN
Escenario 2: El cliente recibe el FIN y envía acuse de recibo. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN ACK
Escenario 2: El servidor recibe el acuse y queda a la espera del cierre por parte del cliente. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN ACK
Escenario 2: El cliente decide cerrar conexión, envía su FIN. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN ACK FIN Close
Escenario 2: El servidor recibe el FIN y acusa su recibo. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN ACK FIN Close ACK
Escenario 2: El cliente recibe el ACK de su FIN y cierra la conexión. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN ACK FIN Close ACK La conexión es cerrada
Escenario 2: El cliente recibe el ACK de su FIN y cierra la conexión. CLOSED Active open/SYN CLOSED Active open/SYN Passive open Close Passive open Close Close Close LISTEN LISTEN SYN/SYN + ACK Send/SYN SYN/SYN + ACK Send/SYN SYN_RCVD SYN/SYN + ACK SYN_SENT SYN_RCVD SYN/SYN + ACK SYN_SENT ACK SYN + ACK/ACK ACK SYN + ACK/ACK Close/FIN Close/FIN ESTABLISHED ESTABLISHED Close/FIN FIN/ACK Close/FIN FIN/ACK FIN_WAIT_1 CLOSE_WAIT FIN_WAIT_1 CLOSE_WAIT FIN/ACK FIN/ACK Close/FIN Close/FIN ACK ACK ACK + FIN/ACK CLOSING LAST_ACK ACK + FIN/ACK CLOSING LAST_ACK FIN_WAIT_2 FIN_WAIT_2 ACK ACK ACK ACK FIN/ACK FIN/ACK TIME_WAIT CLOSED TIME_WAIT CLOSED Time after two segment lifetimes Time after two segment lifetimes Intercambio de mensajes Close Cliente Servidor FIN ACK FIN Close ACK La conexión es cerrada Luego de un tiempo el servidor cierra su socket también
Iniciador de Cierre Diagrama recorrido por quien inicia el cierre CLOSED LISTEN SYN_RCVD SYN_SENT ESTABLISHED CLOSE_WAIT LAST_ACK CLOSING TIME_WAIT FIN_WAIT_2 FIN_WAIT_1 Passive open Close Send/ SYN SYN/SYN + ACK SYN + ACK/ACK ACK /FIN FIN/ACK ACK + FIN/ACK Timeout after two segment lifetimes Active open /SYN Diagrama recorrido por quien inicia el cierre ELO-309
Receptor del cierre (Me colgó el muy $ # % @ & !!!) CLOSED LISTEN SYN_RCVD SYN_SENT ESTABLISHED CLOSE_WAIT LAST_ACK CLOSING TIME_WAIT FIN_WAIT_2 FIN_WAIT_1 Passive open Close Send/ SYN SYN/SYN + ACK SYN + ACK/ACK ACK /FIN FIN/ACK ACK + FIN/ACK Timeout after two segment lifetimes Active open /SYN Secuencia seguida por quien recibe el cierre de su par no habiendo iniciado él el cierre ELO-309
Diagrama de Estado de Transmisión Los distintos caminos dependen de si hay cierre en ambos lados o no y si los FIN se cruzan en el camino. CLOSED LISTEN SYN_RCVD SYN_SENT ESTABLISHED CLOSE_WAIT LAST_ACK CLOSING TIME_WAIT FIN_WAIT_2 FIN_WAIT_1 Passive open Close Send/SYN SYN/SYN + ACK SYN + ACK/ACK ACK Close/FIN FIN/ACK ACK + FIN/ACK Time after two segment lifetimes Active open/SYN Intercambio de mensajes Close FIN FIN Close ACK ACK Intercambio de mensajes Close FIN Close FIN + ACK ACK ELO-309
Algoritmo ventana deslizante NS: Network simulator es un simulador de redes bastante evolucionado y de libre disposición. Ref: http://www.isi.edu/nsnam/ns/ Invito a los interesados a verlo. Ojo no es un programa trivial, por lo cual se escapa al alcance de este curso. A través de este simulador se puede estudiar los fenómenos de ventana deslizante y otros. ELO-309