Home Inginerie Engineering Links Links Feedback Site Map MultiMedia
Exemplu: TCP
Home | ARO, Erori | TCP, Control | Congestia | Conexiunea | Timere | Exemplu: TCP

EN RO

Home
Up

Home > Inginerie > Calculatoare > Ghid retele > Nivelul Transport > Exemplu: TCP

Studiu de caz pentru nivelul transport pentru Internet: TCP şi UDP

UDP: servciu de datagramă

  • orientat pe mesaj, un timp transmite apoi prezervă limitele mesajului

  • nesigur

  • fără retransmisie

  • detecţie de eroare folosind verificarea sumei pe Internet peste pachetul UDP şi 3 cāmpuri de headere IP (lungimea adresei şi IP)

  • fără controlul traficului sau al congestiei

  • fără ordonare

<----------------------------- 32 bi -------------------------->

port sursă port destinaţie
lungime UDP verificare sumă UDP
data (pānă la 65K)

Implementarea UDP: codul sursă

Implementarea Linux a UDP partea de transmisie

 
/* udp_send called from above, as result of sendto system call */
static int udp_send(struct sock *sk, struct sockaddr_in *sin,
	 unsigned char *from, int len, int rt)
{
	struct sk_buff *skb;
	struct device *dev;
	struct udphdr *uh;
	unsigned char *buff;
	unsigned long saddr;
	int size, tmp;
	int ttl;
  
	/* Allocate an sk_buff copy of the packet. */
	size = sk->prot->max_header + len;
	skb = sock_alloc_send_skb(sk, size, 0, &tmp);
	if (skb == NULL) 
		return tmp;

	skb->sk       = NULL;	/* 
to avoid changing sk->saddr */
	skb->free     = 1;
	skb->localroute = sk->localroute|(rt&MSG_DONTROUTE);

	/*Now build the IP and MAC header. */
	 
	buff = skb->data;
	saddr = sk->saddr;
	dev = NULL;
	ttl = sk->ip_ttl;

	tmp = sk->prot->build_header(skb, 
saddr, sin->sin_addr.s_addr,
			&dev, IPPROTO_UDP, sk->opt, 
skb->mem_len,sk->ip_tos,ttl);
	skb->sk=sk;	/* So memory is freed correctly */
	/*Unable to put a header on the packet. */
	 		    
	if (tmp < 0 ) 
	{
		sk->prot->wfree(sk, skb->
mem_addr, skb->mem_len);
		return(tmp);
  	}
  
	buff += tmp;
	saddr = skb->saddr; /*dev->pa_addr;*/
	skb->len = tmp + sizeof(struct udphdr) + 
len;	/* len + UDP + IP + MAC */
	skb->dev = dev;
	
	/*Fill in the UDP header.  */
	 
	uh = (struct udphdr *) buff;
	uh->len = htons(len + sizeof(struct udphdr));
	uh->source = sk->dummy_th.source;
	uh->dest = sin->sin_port;
	buff = (unsigned char *) (uh + 1);

	/*Copy the user data.  */
	memcpy_fromfs(buff, from, len);

  	/*Set up the UDP checksum.  */
	udp_send_check(uh, saddr, sin->sin_addr.s_addr,
 skb->len - tmp, sk);

	/* Send the datagram to the interface.  */
             udp_statistics.UdpOutDatagrams++;
	sk->prot->queue_xmit(sk, dev, skb, 1);
	return(len);
}

TCP: apel setare şi īnchidere

Legătură pe trei căi pentru setarea conexiunii.

Īnchiderea conexiunii:

  • Fiecare parte din TCP trebuie să determine īnchiderea alteia

TCP: transfer de date

Orientat pe flux (flux de byte fără limitări de mesaj)

Verificarea sumei pe Internet ca īn UDP

Cānd trebuie să se transmită īn TCP?

  • RFC spune "oricānd"

  • fereastra de control al traficului şi al congestiei restricţionează transmiterea

  • operaţiile interactive: ecoul caracterului īn telnet

    • header de 40 byte + un byte pentru īncărcare

    • algoritmul  lui Nagle: cu un singur caracter la intrare, se buferează caracterele pānă cānd se obţine recunoaşterea pentru ultimul batch de caractere transmis

    • reţea rapidă necongestionată: nu interesează suprahead-ul (overhead), pe cānd īn reţeaua lentă se buferează caracterele pentru a salva suprahead-ul.

La destinatar:

  • recunoaştere cumulativă

  • RFC nu spune cānd să se facă recunoaşterea

  • pentru pachetele care nu sunt īn ordine, TCP nu specifică acţiunea

    • de obicei se buferează şi se recunoaşte ultimul pachet īn ordine

  • recunoaşterea poate să nu fie generată imediat

    • se speră īn returnarea datelor īn direcţie inversă

    • se speră ca la sosirea celui de al doilea pachet, să fie recunoscute amāndouă pe loc

TCP: retransmiterea rapidă cu recunoaştere cumulativă

Retransmitere rapidă după recepţia a trei recunoaşteri (N) īn timp ce se aşteaptă pentru recunoaşterea (N+1)

  • Se retransmite N fără aşteptare (N a fost ca şi pierdut)

Exemplu:

  • retransmiterea rapidă a lui 3

  • recunoaşterea cumulativă a lui 6

Formatul pachetului TCP

Despre multe din cāmpurile de pachete am vorbit deja.

Cāmpuri despre care nu s-a vorbit:

  • lungimea: lungimea headerului (ariabilă, datorită opţiunilor)

  • URG: dacă se setează, pointerul urgent indică datele "urgente"

  • PSH: TCP trebuie să īmpingă aceste date către destinatar cāt mai curānd posibil. Se foloseşte sau se poate folosi adesea.

  • opţiuni: pot fi folosite pentru a controla tactul, sau informaţii despre mărimea maximă a segmentului.

Ferestre şi timere TCP

Estimarea RTT se bazează pe īntārzierile măsurate ale recunoaşterii.

Timere de retransmitere

  • algoritm vechi: 2*RTT

  • algoritm nou: RTT +4*factorul de variaţie

Controlul traficului cu ajutorul ferestrei:

  • destinatarul avertizează asupra spaţiului buferului la expeditor

Controlul congestiei cu ajutorul ferestrei:

  • start lent

  • creşte mult mai īncet

Aspecte terminal-terminal pentru ATM

Nivelul de adaptare ATM (ATM adaptation layer (AAL)) permite funcţionarea terminal-sistem īn reţelele ATM

  • diferite AAL oferă servicii diferite nivelelor superioare

  • funcţionalitate comună:

    • fragmentarea şi reasamblarea: spargerea unităţilor de date la nivel de aplicaţie īn fragmente de 48 byte pentru nivelul de reţea ATM

    • detectează erorile, dar nu le corectează

AAL1:

  • pentru timp real, aplicaţiile la viteze de bit constant precum audio necomprimat, video

  • prezervă timingul īn cazul terminal-terminal

AAL2: nefuncţional

AAL3/4 şi AAL5

  • transportul de date pentru datele sensibile la eroare şi care nu sunt īn timp real

  • mod mesaj (prezervă limitările mesajului) şi mod flux.

AAL5 Studiu de caz

Seamănă mult cu UDP

Va detecta erori dar nu le va retransmite

Formatul pachetului:

  • data: pānă la 65K bytes per mesaj AAL5

  • UU: cāmp utilizator (nivel superior) nefolosit de AAL. utilizări posibile sunt numerele secvenţiale şi/sau multiplexarea

  • lungimea: lungimea datelor

  • CRC: verificarea redundanţei ciclice (cyclic redundancy check): detecţie de erori mai puternică decāt verificarea sumei pe Internet (checksum). Erorile detectate (semnalate către nivelul superior) dar necorectate.

Nivel transport: perspectiva

Cerinţele noilor aplicaţii impun noi mecanisme pentru nivelul de transport.

Se caută alăturarea unui set specific de funcţionalităţi cu un protocol monolitic cum este TCP, pentru a permite protocoale flexibile īn cazul blocurilor de construcţie mai mici.

Inter-reţele: cānd se traversează mai multe reţele, cel mai de jos nivel de serviciu este minimal. Este necesară funcţionalitatea nivelelor de transport bogate.

Web Site Info

Google

Tip-Top-Hot Web Sites


Back Home Up

Enter to Top 100 Sites and Vote for this Site!!! Best Electronics Award

 

Privacy Policy | Terms of Service
© 1999 - 2007, MultiMedia SRL
Send articles and materials to be published on this website to: Publishing
If you see unauthorized or illegal materials on this website, please send an e-mail to: Abuse