! "#
$ # % # ! & # ! #
!# # ' # ' &
( # #
) * ! + # # & ,
! "#
0
0 ' + 1
' '
' #
/
# / '
0 !
0
&
0 !+ ! *
# !2
# !2
' # !2
' # !2
'
, /
& &% '
# + # ! # # ! * #
+
'
4
!
5 %
#
&
6 - ' % & &%
% 7# % 8
' # ' ! * !
/etc/services
0 16 31
SrcPort DstPort
Checksum Length
Data
3' ' !
5
!
Application process
Write bytes
TCP Send buffer
Application process
Read bytes
TCP Receive buffer
0
0 !
+ *
'
'
+ *
'
! *
Send buffer
Segment Segment Segment
Transmit segments
Receive buffer
+
' &
, *
)
! *
#
# &
! *
# '
' #
' #
! *
' ' *
!
! *
&
#
+ '
=
+ *
1 ' !
# 9 <
; + # ' ! '
# '
+ # ' /
& &% # * * # ' !
0
SrcPort DstPort
SequenceNum
Acknowledgment
0 4 10 16 31
Options (variable)
Data Checksum
HdrLen 0 Flags
UrgPtr
AdvertisedWindow Acknowledgment
#
& &%
! #
#
0
&
# ! # ? +
(SrcPort, SrcIPAddr, DsrPort, DstIPAddr)
! ! : !
SequenceNum, acknowledgment, AdvertisedWinow
Data (SequenceNum)
0
SYN, FIN, RESET, ACK, URG (for urgent data), PUSH
# *
# : : #
Sender
Acknowledgment + AdvertisedWindow
#
Active participant (client)
Passive participant (server)
Three-way handshake:
event{/action}
CLOSED
LISTEN
Passive open Close
Send/SYN SYN/SYN + ACK
Close
Active open/SYN
4 9 <+
SYN_RCVD SYN_SENT
ESTABLISHED
CLOSE_WAIT
LAST_ACK CLOSING
TIME_WAIT FIN_WAIT_2
FIN_WAIT_1
Send/SYN SYN/SYN + ACK
SYN + ACK/ACK SYN/SYN + ACK
ACK
Close/FIN
FIN/ACK
Close/FIN
FIN/ACK
Timeout after two max. segment lifetimes
FIN/ACK
ACK ACK
ACK
Close/FIN
CLOSED
Open a connection
Close a connection
(
!
'
3 D
'
% '
0 !
6 D
#
*
!
!
!# ' # # '
+
/ # ! ! E
# ' ' ! ! / #
'
+
#
*
!
!
#
Sending application
LastByteWritten TCP
Receiving application
LastByteRead TCP
! LastByteAcked LastByteWritten
LastByteAcked ≤
LastByteSent
LastByteSent ≤
LastByteWritten
'
! LastByteRead LastByteRcvd
LastByteRead NextByteExpected NextByteExpected ≤ LastByteRcvd +1
LastByteSent
LastByteAcked NextByteExpected LastByteRcvd
'
3
)
#
6 SampleRTT # -) C
) C %
# #
! # '
EstimteRTT F α x EstimteRTT : G α x SampleRTT
!# α ! H&I H&J
EstRTT
! #
#
)
-; % # # ) C
# #
Sender Receiver Sender Receiver
Origina
l transm
ission
ACK
Retran
smission
Original transm
ission
ACK
Retran
smission
C
-
)
#
!#
#
'
) + * 1 ' !
) + * 1 ' !
! * # #
K
-C
)
#
# '
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
# * LHH
0 !
+
*
'
'
!2
# ' # # ' ! ! #
# # #
4
+
/ + MaxSendBuffer
0 !
&
' + ) ' ( !
LastByteRcvd LastByteRead 7 F MaxRcvBuffer
AdvertisedWindow F MaxRcvBuffer NextByteExpected
NextByteRead
LastByteSent LastByteAcked 7F AdvertisedWindow
EffectiveWindow F AdvertisedWindow LastByteSent
LastByteAcked
LastByteWritten LastByteAcked 7F MaxSendBuffer
; ! % LastByteWritten
0 !
&
=+ # ! # * ! # ) ' ( !
H ' H / ) ' ( !2
; % ' ! ) C '
) C '
) C '
* # 9 - ' < % #
! # G '
' ) C
) # # # #
* ! # # - ) ' ( ! #
#
! M
!
# &
* '
# #
# #
9 ' * <
(
!
(#
'
!
! & &%
'
/
2
# #
& &% ! '
'
)
'
/
!
!% !
1
/
6
* ! 9 '
<
# + # ! !
# + 4 > )
#
! 2
+ # '
# + ! * /
+ ' & *
(# (#
! !
# *>
) C '
4 + ' ' * +
)
(
)
OA 1 4 % GP ) ' ( !
4 ! # # ! ! #
# +
6 & , 6 , % & &% GAH
6 & , 6 , % & &% GAH
# % ! * # 1 ! ! # 6 ,
OA
1
!
5 ! # ( )
G G&L 6 P&? #
# GH 6 LQ
O ?L 6 GO
0 ; GHH 6 P
O GLL 6 ?
GA PAA 6 LL
A? G&A R AI
@ 6 * > ! * !# 7 GLL6 % !
1 # ! * 5(
C
#
0
) ' ( ! # # * #
=+ # GP ) ' ( ! # >
1
!
!
/
GHH
5 ! # 5 ! #
G G&L 6 GIC5
# GH 6 GAAC5
O ?L 6 L?JC5
O ?L 6 L?JC5
0 ; GHH 6 G&A65
O GLL 6 G&I65
GA PAA 6 Q&?65
A? G&A R G?&I65
@ GP ) ' ( ! & ! ! / P?C5
@ # # ' O #
; # # # 1
0 % *! #
#
* # # ) C
1 ! # OA
! 1 )(
! % 43
# 1
GP ) ' ( !
)
'
#
+
)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
Client Server
Request Blocked
Reply
Computing
Blocked Blocked
(#
#
2
# # ' #
& &%
!
#
'
!
#
'
-#
Caller (client)Client stub
RPC protocol
Return value Arguments
Reply Request
Callee (server)
Server stub
RPC protocol
Return value Arguments
Reply Request
(
9
* <
5,)
# / 1 )4
5 *
5,)
0 M ) 6 )),
;
* )), ; % '
# !# *
Sender Receiver
Fragment 1 Fragment 2 Fragment 3
Fragmen Fragment 4
# !# *
Fragment 5
Fragment 6
Fragment 3 Fragment 5
5,)
+
*
% 34
' ' 1 %
34 34
34 % E
R ' #
' * !
; ' * 9 # ' ' <
ProtNum
MID
Length
NumFrags Type
0 16 31
5,)
0
6; ; + !
U F ) ) 4 0 +
Data
NumFrags Type
FragMask
5,)
0 % '
'
4 ! ! ! * ! !
3 ' 9 < # E
!
4 ' %
1
-
)4
Client Server
Request
ACK
Reply ACK
Client Server
Request 1
Request 2
)4
,
1
%
%
) C
)4 6;
6; #
6 # #
6 # #
5; #
!
'
9 ' < %
' 9;> ' <
(
)4
0
Type
MID
BID
CID
0 16 31
# ;
5 ;
Data BID
Length
#
,
#
#
Caller (client)
SELECT call
call
Callee (server)
SELECT upcall
upcall
;
)4
)
+ 1 #
# # + :
CHAN CHAN
deliver send
#
*
SELECT
CHAN
BLAST
> 4 ! * 0 40
E ; 0 *
;
; 5,) 1 '
'
)4 1 '
& &%
: , 1 '
#
# ! #
IP
ETH SunRPC
0
V;
)4> 6;
'
V;
'
Data MsgType =CALL
XID
RPCVersion = 2 (a)
Program
Version
MsgType = REPLY XID
Status = ACCEPTED (b)
Data Procedure
Credentials (variable)
; # # '
; ' # 3 5) 3 D
1 5 * ) # 36R
% ! '
# + ' - %
#
#
* 5,)
!# #
'
%
1
/ /
'
& &%
P?C
' ! ! / !
#
0
! #
' M
'
*
Client Server
19
Fack
24
FragmentNum = 20
WindowSize = 10
SelAckLen = 1
SelAck[1] = 0x36 110100
6 + 20 5 + 20 3 + 20
' *+ ; '
=+ # !
2
+ / ' % ' % &
! # GJIG
(# 2
(# 2
+ % D
+ D
1
& &% !-
&
#
#
'
E
#
/
& &%
M
'
*
'
#
#
-1 ! *
'
GHHS
' & !
! "# % ) # ) % U # % 6 # R %
5 ' ( 4 ! * ) 6 6 >HL
0
#
; ;% % 0 QJO% & GJIG
)& 5 % 5& 4 % ; %