Factors affecting transport protocol design
! "# ! "#
# +--!!!& &! & -.#/#
' +
1
' ' '
# / # / ' 0 !
&
!+ ! *
# !2 # !2 '
# !2 ' # !2 '
, / & &% '
3
3
- ' 4 ! 5 %
# # # # ! *
&
6 - ' % & &% % 7# %
8
' # ' ! * !
/etc/services 16 31
3 # * SrcPort DstPort Checksum Length Data 16 31
3
3' ' !
5
! Application process Write bytes TCP Send buffer Application process Read bytes TCP Receive buffer Send buffer
Segment Segment Segment Transmit segments Receive buffer ■ ■ ■
- ' & , *
) ! * #
# &
! * # '
' # ' #
! *
' ' *
#
&
- ' =
- 1 ' ! #
9 < ; + # ' ! ' # ' SrcPort DstPort SequenceNum Acknowledgment
4
10
16
31 Options (variable) Checksum HdrLen Flags
UrgPtr AdvertisedWindow Acknowledgment
# & &% ! # #
&
! # ? + #
(SrcPort, SrcIPAddr, DsrPort, DstIPAddr)
! ! : !
SequenceNum, acknowledgment, AdvertisedWinow Data (SequenceNum) Receiver
Sender Acknowledgment + AdvertisedWindow
SYN, FIN, RESET, ACK, URG (for urgent data), PUSH
# Active participant (client)
Passive participant (server) Three-way handshake: to setup and terminate a bidirectional connection
event {/action} Passive open Close CLOSED Close Active open /SYN LISTEN SYN/SYN + ACK SYN/SYN + ACK Send Send /SYN /SYN
4 9 <+ SYN_RCVD ACK SYN + ACK/ACK SYN/SYN + ACK SYN_SENT # @ # @ ) ;6 (); Open a connection ! AB & ESTABLISHED
' ,3 Close a connection Close /FIN % # & #
- # ! ' FIN_WAIT_1 Close /FIN FIN/ACK CLOSE_WAIT # #
) C
( ! '
3 D '
% ' 0 !
6 D # * ! !
!# ' # # '
- / # ! ! E
' + # * ! ! # Sending application LastByteWritten TCP Receiving application LastByteRead TCP !
LastByteAcked LastByteWritten '
! LastByteRead LastByteRcvd LastByteSent LastByteAcked LastByteRcvd NextByteExpected (a) (b)
' 3 ) #
6 SampleRTT # -) C
) C % # #
! # '
EstimteRTT F α x EstimteRTT : G
α x SampleRTT !# α ! H&I H&J
! # #
- )
; % # # ) C
# #
Sender Receiver Sender Receiver
OriginaOrigina l transm l transm ission ission
ACK Retran smissio n
Retran smissio n
ACK
- C ) #
!#
#
'- ) )
1 ' ' ! !
- 1 *
- !
- # E # '
# '
Diff F SampleRTT EstRTT EstimateRTT = (1 - δ) x EstimateRTT + δ δδ δ δ x SampleRTT δδ Dev = (1 - δ ) x Dev + δ δδ δ δ x |Diff| δδ
!# δ ! H G
' ' !# !# ' '
TimeOut F µ x EstRTT : φ x Dev
!# % % F G F ? µ φ
4
# ' # # ' ! ! # # # #
0 !
+ * ' '
!2
4 +
0 ! &
- '
) ' ( !
LastByteRcvd LastByteRead
7 F MaxRcvBuffer AdvertisedWindow
F MaxRcvBuffer NextByteExpected NextByteRead LastByteSent LastByteAcked
7F AdvertisedWindow EffectiveWindow
F AdvertisedWindow LastByteSent LastByteAcked
=+ # ! # * ! # ) ' ( ! H ' H / ) ' ( !2
0 ! &
; % ' ! ) C ' ) C ' ) C '
* # 9 - ' < % #
! # G '' ) C
# ! M
!
# &
- '
#
#
#
#
9 ' * <
# 9 ! ! <
( ! (#
' ! ! & &% ' /
2
# # & &% ! '
Sender Receiver
' ) ' / ! !% !
1 /
6
- !
9 ' <
# + # ! !
2
# + 4 > ) #
!
2
- # '
- # ! * /
- ' & +
(# (#
! ! # *> ) C '
) ( )
OA
1 4 % GP ) ' ( !
4 ! # # ! ! #
# +
6 & , 6 , % & &% GAH 6 & , 6 , % & &% GAH # % ! * # 1 ! ! # 6 , =+ !# # # # ;
2 OA
1 !
5 ! #( ) G G&L 6 P&? # # GH 6 LQ O ?L 6 GO
; GHH 6 P O GLL 6 ? GA PAA 6 LL A? G&A R AI
C #
) ' ( ! # # * # =+ # GP ) ' ( ! # >
! *2 ! *2
1 ! ! / GHH 5 ! #
5 ! # G G&L 6 GIC5 # GH 6 GAAC5 O ?L 6 O ?L 6 L?JC5 L?JC5
; GHH 6 G&A65
O GLL 6 G&I65
GA PAA 6 Q&?65
A? G&A R G?&I65
; # # #
1
% *! #
#
- # # ) C
1 ! # OA ! 1 )( ! %
43
) ' #
- )H+ 4 ,;)5,
!# D !# D #
) ' # & )G+ !# !
2
!
1 /
E # E # ! # ' /
1 & &%
) ' # & )A+ !#
! 2
# # ' D #
1 ! # ! ! # !
!
! ! * ! * ' & &% ! *
) ' # & )O+ !#
!
2
- # ! # # * ! !
2 ! !
2 ( ! ' & !
2
' # 1 & &%
) ' # &
- )?+ (# 9 1 <2
- 1
! ! # % E ! E !
! # ' #
M !
- 1
3
Client Server Blocked Request
Blocked Computing
Reply Blocked
(# #
2 # # ' # & &% ! ! # #
' '
- 1
# Caller (client) Client RPC stub protocol Return value Arguments Reply Request Callee (server) Server stub RPC protocol Return value Arguments Reply Request
( 9 * <
5,)
5 * 5,)
M ) 6 )), ;
- )), ; % '
# !# *
Sender Receiver Fragm ent 1Fragm ent 2 Fragm ent 3 Fragm en
Fragm ent 4
# !# *
# #- ' ' '
- !
5 GHHS
Fragm ent 5 Fragm ent 6
Fragm ent 3 Fragm ent 5 SRR
5,)
%
34 ' ' 1 %
34
34 34 % E
R ' #
5,) &
' + # %
1
!# # ' % ,) T0 )R
,) T0 )R !# ' ' !
!# !# % %
- # ' %
U ,) T0 )R
U
5,)
16
31
6; + ; !
ProtNum MID
U F ) )
Length NumFrags NumFrags Type Type
4 4 0 + 0 +
FragMask
#
Data
- 0 6 #
F ) )%
- #
5,)
% ' '
- 4 ! ! ! ! !
3 ' 9 < # E !
4 ' %
1 - )4
R '
# / ! # '
; 1 - # ! ' # # )4 )
' ' #
; ) * Client Server
Reque st ACK Client Server Reque Repl st 1 y 1
)4 , 1 % % ) C
)4 6; 6; #
6 6 # # # #
5; # ! '
9 ' < % ' 9;> ' <
)4
16
31
Type CID # ;MID 5 ;
BID BID Length ProtNum Data
)4 )
# , # # Caller (client) SELECT call call Callee (server) SELECT upcall upcall ;
- 1 # CHAN CHAN deliver send deliver send
#
SELECT
CHAN
BLAST
IP
> 4 ! * 0
40
- E ; ;
; 5,) 1 '
SunRPC '
UDP
)4 1 '
& &%
IP
: , 1 '
31 31 V; XID XID )4> 6; (a) RPCVersion = 2 (b) Status = ACCEPTED MsgType = CALL MsgType = REPLY Program Data ' Version V; V; ' ' Credentials (variable) Procedure
Verifier (variable) Data 1 !#
- % !# # ! #
; # # '
; ' # 3 5)
3 D 1 5 * ) #
36R %
! '
# + ' - %
#
# Client Server
- 5,) !# # ' %
1
/ /
' & &% P?C
' ! ! / !
! # ' M
Client Server * ' 21 2019 23
22 25 24 24 26 Type = Fack
- ' Fack WindowSize = 10 5 + 20 FragmentNum = 20 3 + 20 6 + 20 24 22
- / ' % ' % & ! # GJIG
- %
- D + ' # #
- ' # #
- '
- # ! # #
- # ! # ! # #
- # /
- W
21 SelAck[1] = 0x36 SelAckLen = 1 110100
=+ # !
2
5 # # ' ' - ' *% ! %
3
(# 2 (#
2
D
# / & &% M '
1 & &% !- & # # ' E
) , '
' # # “ ” “ ”
G * +
) “ *” 1 +
: # / : 1 -
1 ! *
' GHHS ' & !
! "# % ) # ) % U # % 6 # R % 5 ' ( 4 ! * ) 6 6 >HL
#
; ;% % 0 QJO% & GJIG
)& 5 % 5& 4 % %
;
) 6 % 0 & GJI?
) X # L Y?
# L+ A% J % GA% OJ% ?P