Documente Academic
Documente Profesional
Documente Cultură
Gestiunea reelei
Gestiunea reelei
Transport layer
TCP
UDP
Network layer
IP
Routing
NetFilter
ARP
Queing discipline
BRIDGING
struct FILE
struct inode
struct socket
struct socket
struct sock *
...
...
proto_ops
struct sock
struct inet_sock
sk_prot
...
struct tcp_sock
release()
bind()
connect()
accept()
sendmsg()
recvmsg()
poll()
...
struct sock
struct inet_sock
sk_prot
...
struct udp_sock
inet_dgram_connect
inet_sendmsg
udp_poll
inet_release
inet_bind
...
char c;
struct sockaddr_in addr;
int s;
Generic socket
layer
IP socket
layer
UDP socket
layer
IP socket
layer
sock_aio_write sock->ops->sendmsg
sk->sk_prot->sendmsg
ip_append_data / udp_flush_pending_frames
skb = sock_alloc_send_skb();
skb_queue_tail(sk, skb)
routing
ip_local_out();
Fluxul pachetelor
Tabela de rutare
Cache-ul de rute
Netfilter
skb
Descrie un pachet
O parte linear +
Un vector de fragmente +
O list de fragmente
skb_frag
skb_frag
Pointer to
data
Pointer to
data
SKB
Pointer to
data
(linear
part)
prev
next
SKB
SKB
Pointer to
data
Pointer to
data
prev
prev
next
next
Skb (2)
struct sk_buff {
struct sk_buff *next;
struct sk_buff *prev;
struct sock *sk;
ktime_t tstamp;
struct net_device *dev;
char cb[48];
unsigned int len,
data_len;
__u16 mac_len,
hdr_len;
void (*destructor)(struct sk_buff *skb);
sk_buff_data_t
sk_buff_data_t
sk_buff_data_t
sk_buff_data_t
sk_buff_data_t
transport_header;
network_header;
mac_header;
tail;
end;
Operaii comune
Head
skb_push
skb_reserve
Data
skb_trim
skb_pull
Tail
skb_put
End
Flags
IFF_UP, IFF_BRODCAST, IFF_RUNNING, etc.
Features
NETIF_F_SG, NETIF_F_CSUM, NETIF_F_GSO, NETIF_F_TSO, etc.
short
Interfaa hardware
Packet buffers
Memory
IRQ
(packet received)
CPU
RX ring
TX ring
NIC
IRQ
(packet sent)
Scatter-gather
Un pachet poate fi format din zone ne-contigue de memorie
Descriptorii de TX/RX mai au un bit: end-of-packet
Necesar pentru zero-copying
Procesare pachetelor
TCP offload
Stateless offload
Stiva folosete pachete mari
TSO (Transmit/TCP Segmentation Offload): hardware-ul primete pachete mari i le sparge n
pachete mai mici pe care apoi le trimite pe fir
LRO (Large Receive Offload): hardware-ul agregheaz pachetele mici n pachete mari pe care
le trimite apoi la stiv
ETH
IP
TCP
Payload
Networking stack
Copy
ETH
IP
Copy &
update
Copy
NIC
Copy
ETH
...
TCP
Paylo
ad
Copy &
update
IP
Copy
TCP
Paylo
ad
MSS
Check and
discard
IP
TCP
Payload
2nd packet
IP
TCP
Payloa
d
Copy
ETH
IP
TCP
Payload
Dac se recepioneaz pachete ale aceluai segment n ordine ele se vor agrega i ctre
stiva se va trimite un pachet mare (pn la 64KB)
Agregarea se poate face n hardware sau software
Pentru a reduce latena, n momentul n care se iesi din bulca NAPI se face flush
Intrebri