---
# System prepended metadata

title: SYS2 1
tags: [' system', ' ING1', ' réseaux', ' S6', SYS2]

---

---
lang: fr
title: SYS2 1
tags: SYS2, system, réseaux, ING1, S6
---

# SYS2 1

* 18/02/2019
* Gaby

### Planning

- Process / tasks / thread
- Scheduling
- Mecanisme de synchro
- Réseaux
- File system

:warning: on va pas faire dans l'ordre !

:::info
Bouquin cool en OS:
modern operating system
operating system design livre avec des dino
understanding the linux kernel
the linux programming interface
:::

## Réseaux

### OSI

Si on est sur la couche n, on a besoin de connaitre la couche n-1 (et un peu n+1).

### TCP/IP

On a moins de couches que dans le modèle OSI

<img src="https://docs.google.com/drawings/d/e/2PACX-1vQ4G_o85dR7ItNYu2j1Y2Zh9q8ikpUlmYQHLiiJUhmOrv40FSjlzMiJmoKLTrjOPVzvpGHU3DGYadTT/pub?w=960&amp;h=720">

- Link: Ethernet
- Network: Fait le lien entre les differets réseaux. IPV4/IPV6 etc.. Cela permet de dialoguer entre plusieurs réseaux. 
- Transport: TCP/UDP



### Trame ethernet

==MTU==: Metrique translation unit
Si on relie deux réseaux avec differnts MTU, on peut avoir des problèmes. Donc il nous faut être capable de dialoguer malgré tout.

Du coup on a des adresses **IP**.

IP: XX.XX.XX.XX

Un IP permet d'identifier des machines et des réseaux.

Dans 192.168.1.0/24 -> le /24 signifie que les 24 premiers bits correpondent à l'identitié du réseau. Les autres correspondent à la machine.

==Switch==: Va enregistrer les adresses des differents appareils lorsqu'il y a une connection. Si A veut envoyer à B, alors le switch va d'abord enregistrer l'adresse de A dans une table pour l'associer plus rapidement après puis, va check si il a B dans sa table. Si il l'a, il envoie les data à B, sinon il envoie à tout le monde et chacun check si il est censé avoir ces data.

==Routeur==: Si on veut envoyer un paquet sur un autre réseau, alors on va envoyer nos data au routeur de l'autre réseau, et le routeur va savoir à quelle machine le transmettre.


==Netmask==: Tous les bits pertinent pour le réseau. Permet de faire des choses similaires aux bitwise...

==Table de routage==: prefix -> endpoint
Ex: 10.0.0.1.0/24 -> 10.0.0.0.1


==ARP==: Pour retrouver dans un réseau quelles sont les addresses mac par rapport aux adresses IP.

==TCP==: Permet d'avoir de l'ordre dans les paquets et de la retransmission. (C'est embetant d'avoir les paquets dans le désordre). Pour chaque paquet, on va lui associer un numéro de séquence qui correspond à un offset dans le flux complet.

==ACK==: (Acknowledge) Accusé de réception.


### Socket


==Socket==: renvoie un file descriptor

```cpp=
// Arg1: Grande famille de protocole: INET 6: IPV6, UNIX: Socket local
// Arg2: 

fd = socket(INET, DGRAM) 
```

### Côté client

Avec ça, on a pas d'IP, ni de port...
Du coup -> Connect() !


```cpp=
connect(fd,{address, port}) 
```

### Côté server ?

```cpp=
bind(fd,{address, port}) 

listen(fd, ...) 

new_fd_client = accept(fd, &{address, port}) 
```

Accept renvoie le fd du nouveau client.

### Ensuite une fois conneter ?

- recv(): utiliser en tcp
- send(): utiliser en tcp
- recvfrom(): utiliser en udp
- sendto(): utiliser en udp