Add questions.md

Co-authored-by: Ezequiel Bellver <ebellver@itba.edu.ar>
Co-authored-by: Juan Barmasch <jbarmasch@itba.edu.ar>
This commit is contained in:
Santiago Lo Coco 2021-11-15 13:13:33 -03:00
parent ab7ae0c347
commit 39afa170f0
2 changed files with 111 additions and 31 deletions

View File

@ -15,69 +15,79 @@ challenge_t challenges[] = {
"hacer lo mismo para resolverlos. No basta con esperar la respuesta.\nAdemás, "
"deberán implementar otro programa para comunicarse conmigo.\n\nDeberán estar atentos "
"a los easter eggs.\n\nPara verificar que sus respuestas tienen el formato correcto "
"respondan a este desafío con la palabra 'entendido\\n'", "¿Cómo descubrieron el protocolo, "
"la dirección y el puerto para conectarse?",
"respondan a este desafío con la palabra 'entendido\\n'",
"¿Cómo descubrieron el protocolo, la dirección y el puerto para conectarse?",
"entendido\n",
NULL
},
{
"The Wire S1E5\n5295 888 6288", "¿Qué diferencias hay entre TCP y UDP y en qué casos "
"conviene usar cada uno?",
"The Wire S1E5\n5295 888 6288",
"¿Qué diferencias hay entre TCP y UDP y en qué casos conviene usar cada uno?",
"itba\n",
NULL
},
{
"https://ibb.co/tc0Hb6w", "¿El puerto que usaron para conectarse al server es el mismo "
"que usan para mandar las respuestas? ¿Por qué?",
"https://ibb.co/tc0Hb6w",
"¿El puerto que usaron para conectarse al server es el mismo que usan para mandar las "
"respuestas? ¿Por qué?",
"M4GFKZ289aku\n",
NULL
},
{
"EBADF...", "¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede "
"utilizar read(2) y write(2) para operar?",
"EBADF...",
"¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede utilizar "
"read(2) y write(2) para operar?",
"fk3wfLCm3QvS\n",
writeChallenge},
writeChallenge
},
{
"respuesta = strings:250", "¿Cómo garantiza TCP que los paquetes llegan en orden y "
"no se pierden?",
"respuesta = strings:251",
"¿Cómo garantiza TCP que los paquetes llegan en orden y no se pierden?",
"too_easy\n",
NULL
},
{
".data .bss .comment ? .shstrtab .symtab .strtab", "Un servidor suele crear un nuevo proceso "
"o thread para atender las conexiones entrantes. ¿Qué conviene más?",
".data .bss .comment ? .shstrtab .symtab .strtab",
"Un servidor suele crear un nuevo proceso o thread para atender las conexiones "
"entrantes. ¿Qué conviene más?",
".RUN_ME\n",
NULL
},
{
"Filter error", "¿Cómo se puede implementar un servidor que atienda muchas conexiones sin usar "
"Filter error",
"¿Cómo se puede implementar un servidor que atienda muchas conexiones sin usar "
"procesos ni threads?",
"K5n2UFfpFMUN\n",
filterChallenge
},
{
"¿?", "¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?",
"¿?",
"¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?",
"BUmyYq5XxXGt\n",
questionChallenge
},
{
"Latexme\n\nSi\n \\mathrm{d}y = u^v{\\cdot}(v'{\\cdot}\\ln{(u)}+v{\\cdot}\\frac{u'}{u})\n"
"entonces\ny = ", "sockets es un mecanismo de IPC. ¿Qué es más eficiente entre sockets y pipes?",
"entonces\ny = ",
"sockets es un mecanismo de IPC. ¿Qué es más eficiente entre sockets y pipes?",
"u^v\n",
NULL
},
{
"quine", "¿Cuáles son las características del protocolo SCTP?",
"quine",
"¿Cuáles son las características del protocolo SCTP?",
"chin_chu_lan_cha\n",
quineChallenge
},
{
"b gdbme y encontrá el valor mágico", "¿Qué es un RFC?",
"b gdbme y encontrá el valor mágico",
"¿Qué es un RFC?",
"gdb_rules\n",
gdbChallenge
},
{
"Me conoces", "¿Fue divertido?",
"Me conoces",
"¿Fue divertido?",
"normal\n",
normalChallenge
}

70
questions.md Normal file
View File

@ -0,0 +1,70 @@
# Preguntas
## ¿Cómo descubrieron el protocolo, la dirección y el puerto para conectarse?
`strace`
## ¿Qué diferencias hay entre TCP y UDP y en qué casos conviene usar cada uno?
"La principal diferencia entre TCP y UDP pasa fundamentalmente por el sistema de verificación de la transmisión de la información entre el dispositivo emisor y el dispositivo receptor. El protocolo TCP es un protocolo de transporte orientado a conexión, mientras que el protocolo UDP no lo es. De esta manera, el protocolo TCP verifica la correcta transmisión de los datos entre los dispositivos emisores y los receptores, mientras que el protocolo UDP no lo hace. Por esto, el protocolo UDP cuenta con una velocidad de transmisión superior a la del protocolo TCP, si bien lo hace a costa de una pérdida de precisión en la transmisión de la información. Entrando en apartados algo más técnicos, encontramos que el protocolo TCP cuenta con un sistema de control de congestión y de flujo del tráfico, mientras que el protocolo UDP carece de él. Por último, el tamaño de la cabecera del protocolo TCP es de 20 bytes, mientras que el del protocolo UDP es de solo 8 bytes. Esto responde a la necesidad del protocolo TCP de incluir más información en los paquetes para poder comprobar y subsanar después los posibles errores de transmisión." [6]
TCP: "It provides a reliable, stream-oriented, full-duplex connection between two sockets on top of ip(7), for both v4 and v6 versions. TCP guarantees that the data arrives in order and retransmits lost packets. It generates and checks a per-packet checksum to catch transmission errors. TCP does not preserve record boundaries."
UDP: "It implements a connectionless, unreliable datagram packet service. Packets may be reordered or duplicated before they arrive. UDP generates and checks checksums to catch transmission errors." [7]
"Debido a sus distintas características y, sobre todo, a su velocidad, el protocolo UCP está orientado fundamentalmente al streaming de audio y vídeo, mientras que el protocolo TCP se utiliza para todo lo demás gracias a su fiabilidad." [6]
## ¿El puerto que usaron para conectarse al server es el mismo que usan para mandar las respuestas? ¿Por qué?
Sí, porque, junto a su address, es lo que identifica al socket mediante el cual se realizará la comunicación entre procesos.
## ¿Qué útil abstracción es utilizada para comunicarse con sockets? ¿se puede utilizar read(2) y write(2) para operar?
Existen recv() y send(). Además, se pueden usar las instrucciones read y write debido a que las mismas precisan de un fd para cumplir su función y socket() devuelve un fd.
"The difference is that recv()/send() work only on socket descriptors and let you specify certain options for the actual operation. Those functions are slightly more specialized. Functions read()/write() are the universal file descriptor functions working on all descriptors."
## ¿Cómo garantiza TCP que los paquetes llegan en orden y no se pierden?
"TCP assigns each data packet a unique identifier and a sequence number. This lets the receiver identify which packet was received and which one is arriving next.
Once the data packet is received, and if its in the correct order, the receiver sends an acknowledgement to the sender. The sender can now send another packet. If the packet is lost or sent in the wrong order the receiver stays silent, indicating that the same data packet needs to be resent."
"Para prevenir el riesgo de pérdida de datos, el protocolo TCP establece una conexión entre el dispositivo emisor y el dispositivo receptor y verifica de forma continua la emisión y recepción de la información entre ambos. El protocolo TCP consigue esta verificación dividiendo los flujos de bytes en segmentos ordenados con un número de secuencia antes de transmitirlos a través del protocolo IP. Este número de secuencia es verificado por el dispositivo receptor y, en caso de que alguno de los segmentos resulte faltante, el protocolo TCP vuelve a solicitar su envío a través del protocolo IP, hasta que el mensaje llega en su totalidad al dispositivo receptor." [6]
## Un servidor suele crear un nuevo proceso o thread para atender las conexiones entrantes. ¿Qué conviene más?
Un thread, dado que es mucho menos costoso de hacer que un fork().
## ¿Cómo se puede implementar un servidor que atienda muchas conexiones sin usar procesos ni threads?
Usando la función select/poll para leer de (atender) varios FDs.
## ¿Qué aplicaciones se pueden utilizar para ver el tráfico por la red?
`netstat`, `lsof`, `wireshark`, `tcpdump`
## sockets es un mecanismo de IPC. ¿Qué es más eficiente entre sockets y pipes?
Los pipes son mas eficientes que los sockets [4]
## ¿Cuáles son las características del protocolo SCTP?
SCTP (Stream Transmission Control Protocol - Protocolo de control de transmisiones de corrientes) es un protocolo orientado a las conexiones, similar a TCP, pero proporciona la transferencia de datos orientada a mensajes, similar a UDP.
- es mas fiable que UDP
- es orientado a conexión como TCP
- orientado a mensaje como UDP
- tiene control de flujo como TCP
- la entrega de datos puede ser ordenada (si se aíslan los datos de forma lógica de las corrientes diferentes)
## ¿Qué es un RFC?
Los Request For Comments son documentos que contienen especificaciones tecnicas y notas organizacionales para Internet ([rfc](https://www.rfc-editor.org))
"RFC stands for Request For Comments, which is a memorandum published by Software Engineers through the Internet Engineering Task Force (IETF). Normally these are fairly technical documents describing new concepts, proposals or descriptions of the inner workings of Netwoking Protocols.
Most of the networking concepts and protocols used to power todays Internet have been described by RFCs. For example the Hyper Text Transmission Protocol or HTTP that delivers the web content to our browsers is described in HTTP - RFC 2616. Another fundamental protocol, SMTP, that drives the e-mail is desribed in SMTP - RFC 5321."
## ¿Fue divertido?
```c
#define PUAN 10
int main(void) {
printf("Si decimos que sí, ¿nos ponen un %d?\n", PUAN);
}
```
# Bibliografía:
[1] https://byjus.com/gate/difference-between-tcp-and-udp/
[2] https://www.geeksforgeeks.org/differences-between-tcp-and-udp/
[3] https://www.techopedia.com/definition/23554/initial-sequence-numbers-isn
[4] https://github.com/goldsborough/ipc-bench
[5] https://www.ibm.com/docs/es/aix/7.2?topic=protocol-stream-control-transmission
[6] https://nordvpn.com/es/blog/protocolo-tcp-udp/
[7] https://www.man7.org/linux/man-pages/
[8] https://nordvpn.com/es/blog/tcp-or-udp-which-is-better/