Computer Networks
Lecture25:UDPSocket
UserDatagramProtocol(UDP)
UDPservice:• “nofrills,”“barebones”extensionofbest-effortIP• “besteffort”service,UDPsegmentsmaybe:• lost• deliveredoutofordertoapp• connectionless:• nohandshakingbetweenUDPsenderandreceiver
• eachUDPsegmenthandledindependentlyofothers
UDP[RFC768]
srcport# dstport#
32bits
Applicationdata
(message)
length checksumlength,inbytes,of
UDPsegment,includingheader
Checksum:• checksumcomputedincludingpseudoIPheader(containingsrcanddstIPaddresses,protocol,segmentlength)
• computedwithall0’sinthechecksumfield
• Internetchecksum:1’scomplementof1’scomplementsum
� whenchecksumiscomputedatreceiver,resultis0
UDPsegmentformat
UDPSocketUDPsocketidentifiedbythetuple:<dest IP address, dest port number>
(contrastwithTCP’sfour-tuple!)
WhenahostreceivesaUDPsegment,it:• checksthedestinationportnumberand• directstheUDPsegmenttothesocketwiththatportnumber⇒ IPdatagramswithdifferentsourceIPaddressesand/orsource
portnumbersaredirectedtothesamesocket
ConnectionlessDemultiplexing
clientIP:B
P2
clientIP:A
P1P1P3
serverIP:C
SP:6428DP:9157
SP:9157DP:6428
SP:6428DP:5775
SP:5775DP:6428
SPprovides“returnaddress”
UDPSocketSimilartoTCP’sstreamsockets,except:• socketscreatedusingSOCK_DGRAMinsteadofSOCK_STREAM• noneedforconnectionestablishmentandtermination
• noconnect-bind,listen,accepthandshaking,butservermuststillalwayscallbind()• clientdoesn’tneedtocallconnect()thoughclientmayuseconnect()totellkernelto“remember”theserver’saddressandport#
DataTransmissionNo“connection”betweensenderandreceiver
• senderexplicitlyattachesIPaddressandport#ofdestinationtoeachpacket,byusingsendto()insteadofsend() • send()canstillbeusedifserver’saddressandport#havebeen“registered”withkernelusingconnect()
• ifreceiverusesrecvfrom()itcanextractIPaddressandport#ofsenderfromreceivedpacket• ifthesearenotneeded,recv()maybeusedinstead
Transmitteddatamaybedeliveredoutoforder,ornotdeliveredatall
NoConnection
Stevens
Somewhereinthesocketstructure:TCPServer:TCPClient:
SocketAddresses
UDPServer:
UDPClient:
DataTransmission
Stevens
UDPpacketshaveboundaries,notformingabyte-streamasinTCP,sorecv()retrievesonemessageatatime,i.e.,noneedtocallrecv()inaloop• calltorecv()returnsthewholepacket
• cannotretrieveonlypartsofapacket
• toinspectapacketcallrecv()withflags=MSG_PEEK
• sameforrecvfrom()andrecvmsg()
SocketBuffers
Whenreceiver’ssocketreceivebufferisfull,incomingUDPpacketswillsimplybedroppedIfsender’ssocketsendbufferissmallerthanthesizeofUDPdatapassedtosend(),send()returns-1andthesystemglobalvariableerrnoissettoEMSGSIZE TheAPIsgetsockopt()andsetsockopt()areusedtoqueryandsetsocketoptions,includingtheSO_RCVBUFandSO_SNDBUFoptions
Lab5DemoBest-effortnetimgwithnoflow-controlandnoerror-control
Learnhowtosetsendandreceivebuffersizes
Playwithdifferentreceivebuffersizesandobserveeffectoflackofflowcontrol
Playwithdifferentdropratesandobserveeffectoflackoferrorcontrol
Learnhowtosendandreceivelargedatabufferusinggatherwrite(sendmsg())andscatterread(recvmsg())
FILEINMEMORY
HowtoSendaLargeFileErrorrecoveryandcorrectionbothrequireassociatingdatawithsequencenumber(sqn)
Howtoattachsequencenumberstochunksofdatatobesent(assuming1Ksegment)?
sqn0
sqn1K
sqn2Ksqn3Ksqn4K
sqn5K
sqn6Ksqn7K
sqn8K
0 1K 2K 3K
4K 5K 6K 7K
8K
sqn
FILEINMEMORY
GatherWrite
i/ovectorsendthis�sqn0
sqn0
sqn1K
sqn2Ksqn3Ksqn4K
sqn5K
sqn6Ksqn7K
sqn8K
sqn1Ksqn2Ksqn3Ksqn4Ksqn5Ksqn6Ksqn7Ksqn8K
tobesentonnetwork:
Outputdataisgatheredfrommultiplebuffers
reused!
sqn
MEMORYBUFFER
ScatterRead
receiveintohere�sqn0
sqn0
sqn1K
sqn2Ksqn3Ksqn4K
sqn5K
sqn6Ksqn7K
sqn8K
sqn1Ksqn2Ksqn3Ksqn4Ksqn5Ksqn6Ksqn7Ksqn8K
receivedfromnetwork:
i/ovector
Inputdataisscatteredintomultiplebuffers
reused! sqn
MEMORYBUFFER
Out-of-OrderPackets
receiveintohere�sqn0
sqn0
sqn2Ksqn3Ksqn4K
sqn5K
sqn6Ksqn7K
sqn8K
sqn2Ksqn3Ksqn4Ksqn5Ksqn6Ksqn7Ksqn8K
receivedfromnetwork:
i/ovectorreused!
DataScatter/GatherThesocketAPIsforscatter-gatherI/Oarerecvmsg(sd, msg, flags)andsendmsg(sd, msg, flags)
usedtoidentifydestinationwhensending
pointertoavectorof
pointerstodatabuffers
wheresenderinformationisstoredwhenreceiving
TCPcanalsousesendto(),recvfrom(),sendmsg(),andrecvmsg()
[Stevens]
sqn
Lab5:SequenceNumberSequencenumberisperbyte,notperpacket
Thesequencenumberattachedtoapacketisthesequencenumberofitsfirstbyte
Thesequencenumberofabyteisitsbyteoffsetfromthestartofimagebuffer
Thisenablesout-of-orderdatatobeplacedinitsrightpositionintheimagebuffer
Lab5:InteroperabilityTesting
HomefirewallmayblockUDPpacketsUse“ssh -Y”totestclientonCAENeecs489hostsifUDPblockedbyhomefirewall• onWindows,useMobaXtermorsimilartoolsthatsupportsXforwarding
VNCmayhaveOpenGLcompatibilityissuesandisslower
Top Related