Professional Documents
Culture Documents
(CS F303)
BITS Pilani Virendra Singh Shekhawat
Department of Computer Science and Information Systems
Pilani Campus
BITS Pilani
Pilani Campus
transport transport
network network controlled
link by OS
link Internet
physical physical
4
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket Programming [..2]
Application Example:
1. Client reads a line of characters (data) from its keyboard
and sends the data to the server.
2. The server receives the data and converts characters to
uppercase.
3. The server sends the modified data to the client.
4. The client receives the modified data and displays the line
on its screen.
5
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket Programming with UDP
Application viewpoint:
TCP provides reliable, in-order byte-stream
transfer (“pipe”) between client and server
7
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket Structure [.1]
struct sockaddr
{
unsigned short sa_family; // address family, AF_xxx
char sa_data[14] ; // 14 bytes of protocol address
}
8
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket Structure [..2]
• sin_zero is just used to pad the structure to the length of a structure sockaddr
and hence is set to all zeros with the function memset()
• Important – you can cast sockaddr_in to a pointer of type struct sockaddr and
vice versa
• sin_family corresponds to sa_family and should be set to “AF_INET”.
• sin_port and sin_addr must be in NBO
9
Computer Networks (CS F303) BITS Pilani, Pilani Campus
NBO & HBO Conversion
Functions
• Two types that can be converted
– short (two bytes)
– long (two bytes)
• Very Important: Even if your machine is Big-Endian m/c, but you put your
bytes in NBO before putting them on to the network for portability
10
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Primary Socket System Calls
11
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket System Calls:
Connectionless (e.g., UDP)
12
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket System Calls: Connection-
Oriented (e.g., TCP)
13
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket System Calls [.1]
• SOCKET: int socket(int domain, int type, int protocol);
– domain := AF_INET (IPv4 protocol)
– type := (SOCK_DGRAM or SOCK_STREAM )
– protocol := 0 (IPPROTO_UDP or IPPROTO_TCP)
– returned: socket descriptor (sockfd), -1 is an error
14
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket System Calls [..2]
• LISTEN: int listen(int sockfd, int backlog);
– backlog: how many connections we want to queue
15
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket System Calls […3]
• SEND: int send(int sockfd, const void *msg, int len, int flags);
– msg: message you want to send
– len: length of the message
– flags := 0
– returned: the number of bytes actually sent
• RECEIVE: int recv(int sockfd, void *buf, int len, unsigned int flags);
– buf: buffer to receive the message
– len: length of the buffer (“don’t give me more!”)
– flags := 0
– returned: the number of bytes received
16
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Socket System Calls [….4]
• SEND (DGRAM-style): int sendto(int sockfd, const void *msg, int len, int flags,
const struct sockaddr *to, int tolen);
– msg: message you want to send
– len: length of the message
– flags := 0
– to: socket address of the remote process
– tolen: = sizeof(struct sockaddr)
– returned: the number of bytes actually sent
• RECEIVE (DGRAM-style): int recvfrom(int sockfd, void *buf, int len, unsigned
int flags, struct sockaddr *from, int *fromlen);
– buf: buffer to receive the message
– len: length of the buffer (“don’t give me more!”)
– from: socket address of the process that sent the data
– fromlen:= sizeof(struct sockaddr)
– flags := 0
– returned: the number of bytes received
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
struct in_addr {
in_addr_t s_addr;
};
18
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Byte ordering routines
#include <sys/types.h>
#include <netinet/in.h>
int main()
{ int sockfd, connfd,clilen,n;
char buf[256];
struct sockaddr_in servaddr, cliaddr;
for(; ; ) {
clilen= sizeof(cliaddr);
connfd=accept(sockfd, (struct sockaddr *) &cliaddr, &clilen);
if(connfd<0)
{ printf(“Server Accept error \n”); exit(1); }
n = read(connfd, buf,256);
printf("Server read: \"%s\" [%d chars]\n", buf, n);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERVER_PORT);
servaddr.sin_addr.s_addr = inet_addr(“172.24.2.4”);
read(sockfd,buf,256);
printf(“Client Received%s\n",buf);
Close(sockfd);
}
22
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Simple UDP Server
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVER_PORT 9988
int main()
{ int sockfd, clilen;
char buf[256];
struct sockaddr_in servaddr, cliaddr;
sockfd = socket( AF_INET, SOCK_DGRAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERVER_PORT);
servaddr.sin_addr.s_addr =htonl(INADDR_ANY);
if (bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) <0 )
{ printf(“Server Bind Error”); exit(1); }
for(; ; )
{ clilen= sizeof(cliaddr);
recvfrom(sockfd,buf,256,0,(struct sockaddr*)&cliaddr,&clilen);
printf(“Server Received:%s\n”,buf);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERVER_PORT);
servaddr.sin_addr.s_addr = inet_addr(SERVER_IPADDR); Not
mandatory
sockfd = socket( AF_INET, SOCK_DGRAM, 0);
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(0);
cliaddr.sin_addr.s_addr =htonl(INADDR_ANY);
bind(sockfd,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
recvfrom(sockfd,buf,256,0,NULL,NULL);
printf(“Clinet Received: %s \n”,buf);
close(sockfd);
}
24
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Transport Layer Services and
Protocols
• Provides logical communication
between app processes
– Apps processes sends msgs to each
other using the logical communication
25
Computer Networks (CS F303) BITS Pilani, Pilani Campus
TP Layer Vs. Network Layer
26
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Transport Layer Services
27
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Multiplexing/Demultiplexing
Multiplexing at sendening time:
handle data from multiple Demux at receiving time:
sockets, add transport header use header info to deliver
(later used for demultiplexing) received segments to correct
socket
application
28
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Demultiplexing at Receiver
30
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Example: Connectionless
Demultiplexing
DatagramSocket serverSocket
DatagramSocket = new DatagramSocket DatagramSocket
mySocket2 = new mySocket1 = new
(6428);
DatagramSocket DatagramSocket
(9157); application
(5775);
application application
P1
P3 P4
transport
transport transport
network
network link network
link physical link
physical physical
length checksum
Why is there a UDP?
• No connection establishment
application
(which can add delay)
data
(payload) • simple: no connection state
at sender, receiver
• small header size
UDP segment format • no congestion control: UDP
can blast away as fast as
desired
36
Computer Networks (CS F303) BITS Pilani, Pilani Campus
UDP Checksum
37
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Principles of Reliable Data Transfer
38
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Principles of Reliable Data Transfer
39
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Principles of Reliable Data Transfer
send receive
side side
We will:
• Incrementally develop sender, receiver sides of reliable data
transfer protocol (rdt)
• Consider only unidirectional data transfer
– But control info will flow on both directions!
• Use finite state machines (FSM) to specify sender, receiver
event causing state transition
actions taken on state transition
State: when in this “state”
next state uniquely state state
1 event
determined by next 2
event actions
42
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Rdt1.0: reliable transfer over a
reliable channel
• Underlying channel perfectly reliable
– No bit errors, No loss of packets
• Separate FSMs for sender, receiver:
– Sender sends data into underlying channel
– Receiver read data from underlying channel
sender receiver
43
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Rdt2.0: channel with bit errors
rdt_send(data)
sndpkt = make_pkt(data, checksum) receiver
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for rdt_rcv(rcvpkt) &&
Wait for call
ACK or udt_send(sndpkt) corrupt(rcvpkt)
from above
NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
46
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt2.0: Error Scenario
rdt_send(data)
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for call Wait for rdt_rcv(rcvpkt) &&
from above ACK or udt_send(sndpkt) corrupt(rcvpkt)
NAK
udt_send(NAK)
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)
47
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt2.0 Has a fatal flaw!
48
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt2.1: Sender, handles garbled
ACK/NAKs
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for call Wait for
ACK or NAK
isNAK(rcvpkt) )
0 from
0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
L
L
Wait for Wait for
ACK or NAK call 1 from
rdt_rcv(rcvpkt) && 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)
49
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt2.1: Receiver, handles garbled
ACK/NAKs
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
50
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt2.1: Discussion
Sender:
• Seq # added to pkt
• Two seq. #’s (0,1) will suffice. Why?
• Must check if received ACK/NAK corrupted
• Twice as many states
– State must “remember” whether “current” pkt has 0 or 1 seq. #
Receiver:
• Must check if received packet is duplicate
– State indicates whether 0 or 1 is expected pkt seq #
– For an out of order received packet, it sends ACK for it
53
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt3.0: Channels with errors and loss
55
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt3.0 in action
56
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt3.0 (Lost ACK and Premature
Timeout)
57
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Performance of rdt3.0
U L/R .008
= = = 0.00027
sender 30.008
RTT + L / R microsec
onds
58
Computer Networks (CS F303) BITS Pilani, Pilani Campus
rdt3.0: stop-and-wait operation
sender receiver
first packet bit transmitted, t = 0
last packet bit transmitted, t = L / R
U L/R .008
= = = 0.00027
sender 30.008
RTT + L / R microsec
onds
59
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Pipelined Protocols
60
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Pipelining: Increased Utilization
sender receiver
first packet bit transmitted, t = 0
last bit transmitted, t = L / R
Increase utilization
by a factor of 3!
U 3*L/R .024
= = = 0.0008
sender 30.008
RTT + L / R microsecon
ds
61
Computer Networks (CS F303) BITS Pilani, Pilani Campus
Thank You!
62
Computer Networks (CS F303) BITS Pilani, Pilani Campus